HDFS 读文件分析

标签: hdfs 文件 分析 | 发表时间:2014-04-18 12:31 | 作者:驰晨
出处:http://ronxin999.blog.163.com
UNIX Domain Socket

UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和 应答等,只是将应用层数据从一个进程拷贝到另一个进程。UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。 

本地读还是远程读

1 先判断datanode 上的该block是否在 fileInputStreamCache 上,即前面读过,则直接从cache上拿到留。也相当于本地读。
2  如果属性 dfs.client.use.legacy.blockreader.local 配置为true(默认为false)而且该文件block不在写的状态,因为在写的Block
    不能通过本地读。则开启本地读。注意,该属性是针对Windows环境的用户。
3  如果dfs.client.use.legacy.blockreader.local 没有启用,则通过DomainSocket,即Short-Circuit Local 来读,Short-Circuit Local
   需要先创建DomainSocket,如果allowShortCircuitLocalReads(dfs.client.read.shortcircuit)为true,且useLegacyBlockReaderLocal为false,这个也需要datanode
   通过DomainSocket 发送FileInputStream给Client。,datanode 需要配置dfs.client.read.shortcircuit为true。协议是 
   REQUEST_SHORT_CIRCUIT_FDS 87
 
4 最后才通过远程读。

要启用Short-Circuit Local来读block,在hdfs-site.xml配置文件增加如下两个属性,注意,客户端和服务端都需要。
  <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.domain.socket.path</name>
    <value>/var/lib/hadoop-hdfs/dn_socket</value>
  </property>
dfs.domain.socket.path 是给 Domain Socket用的,如果这个没有配置的话,默认是“”,则Short-Circuit Local读不会生效。

读文件的流式协议:

1 版本:DATA_TRANSFER_VERSION
2 命令参数:OP_READ_BLOCK
3 块ID
4 时间戳
5 偏移量
6 读数据的长度
7 客户端标示
8 是否做checksum

client发送到datanode后,datanode的DataXReceive 接收,解析协议,解析成功,后,发一个成功连接的标示
给client,然后准备发送,发送前,先会发送checksum和计算后的偏移量,
client批判的是否为成功的标示,如果是,则继续

建立输入流通过DFSClient ,建立输入流DFSInputStream,构成成功后,对storefile获取文件块的信息,默认是10个块,并对最后一个快的大小是否改变,如果有改变,则说明该文件正在被写,更新中,则等待400ms重试,直到该文件写完。

未完,待续。。

相关 [hdfs 文件 分析] 推荐:

HDFS 读文件分析

- - 经验沉淀 知识结晶
UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和 应答等,只是将应用层数据从一个进程拷贝到另一个进程. UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱.

使用shell并发上传文件到hdfs

- - 互联网 - ITeye博客
使用shell并发上传文件到hdfs. hdfs日志上传脚本(三). 海量Web日志分析 用Hadoop提取KPI统计指标. 每天一个linux命令(60):scp命令. 实现ssh自动登陆的三种方式. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Flume监听文件夹中的文件变化_并把文件下沉到hdfs

- - 行业应用 - ITeye博客
摘要: 1、采集目录到HDFS 采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去 根据需求,首先定义以下3大要素 采集源,即source——监控文件目录 : spooldir 下沉目标,即sink——HDFS文件系统 : hdfs sink source和sink之间的传递通道——channel,可用file chann.

HDFS-压缩

- - Java - 编程语言 - ITeye博客
文件压缩带来了两大益处1)减少存贮空间2)加速网络(磁盘)传输. 基于大数据的传输,都需要经过压缩处理. 压缩格式 工具 算法 文件扩展名 可分块. Java代码 复制代码 收藏代码. 24.        // io.compression.codecs 定义列表中的一个 . Native gzip 库减少解压缩时间在50%,压缩时间在10%(同java实现的压缩算法).

HDFS架构

- - 数据库 - ITeye博客
       在阅读了GFS的论文之后,对GFS的框架有了基本的了解,进一步学习自然是对HDFS的解析,不得不说,之前对GFS的一些了解,对理解HDFS还是很有帮助的,毕竟后者是建立在前者之上的分布式文件系统,二者在框架上可以找到很多的共同点,建议初次接触HFDS的技术人员可以先把GFS的那篇论文啃个两三遍,毕竟磨刀不砍柴工.

HDFS+Clickhouse+Spark:从0到1实现一款轻量级大数据分析系统

- - InfoQ推荐
导语 | 在产品精细化运营时代,经常会遇到产品增长问题:比如指标涨跌原因分析、版本迭代效果分析、运营活动效果分析等. 这一类分析问题高频且具有较高时效性要求,然而在人力资源紧张情况,传统的数据分析模式难以满足. 本文尝试从0到1实现一款轻量级大数据分析系统——MVP,以解决上述痛点问题. 文章作者:数据熊(笔名),腾讯云大数据分析工程师.

Hadoop分布式文件系统HDFS和OpenStack对象存储系统Swift有何不同?

- - ITeye博客
HDFS使用 集中式单一节点架构(NameNode)来维护文件系统元数据,而在Swift中,元数据 分布在整个集群中并拥有多个副本. 注意:集中式元数据存储使HDFS存在单点故障和扩展性问题,因此规模越大就性能越低,就越难扩展甚至不能扩展,所幸的是HDFS2使用NameNode HA和HDFS Federation解决了这两个问题.

用java程序把本地的一个文件拷贝到hdfs上并显示进度

- - CSDN博客云计算推荐文章
把程序打成jar包放到Linux上. 转到目录下执行命令 hadoop jar mapreducer.jar /home/clq/export/java/count.jar  hdfs://ubuntu:9000/out06/count/. 上面一个是本地文件,一个是上传hdfs位置. 成功后出现:打印出来,你所要打印的字符.

Hadoop剖析之HDFS

- - CSDN博客数据库推荐文章
Hadoop的分布式文件系统(HDFS)是Hadoop的很重要的一部分,本文先简单介绍HDFS的几个特点,然后再分析背后的原理,即怎样实现这种特点的. 这是HDFS最核心的特性了,把大量数据部署在便宜的硬件上,即使其中某些磁盘出现故障,HDFS也能很快恢复丢失的数据. 这个的意思是HDFS适合一次写入,多次读取的程序,文件写入后,就不需要修改了.

Hoop:Hadoop HDFS的RESTFul封装

- Vent - NoSQLFan
Hoop是对Hadoop HDFS Proxy 的改良重写,为Hadoop HDFS提供了HTTP(S)的访问接口. 通过标准的HTTP协议访问你的HDFS系统. 在运行不同版本的HDFS之间进行数据交换(这克服了一些RPC方式因版本不同而产生的兼容性问题). 将对HDFS的操作置于防火墙的保护下.