`

HDFS 读文件分析

阅读更多

HDFS 读文件分析

标签: hdfs 文件 分析 | 发表时间:2014-04-18 04: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重试,直到该文件写完。 

未完,待续。。 
分享到:
评论

相关推荐

    java 从hadoop hdfs读取文件 进行groupby并显示为条形图

    3. **从HDFS读取文件**:使用`FileSystem`类的`open()`方法可以打开HDFS中的文件,然后通过`FSDataInputStream`读取内容。数据通常是以文本格式存储,如CSV或TSV,便于解析成Java对象。 4. **数据解析与预处理**:...

    python解析hdfs文件和实现方式

    本文将详细介绍如何使用Python解析HDFS文件,并将其内容生成为本地文件,以及相关的插件包安装步骤。 首先,我们需要安装Python的HDFS客户端库,最常用的是`pyarrow`和`hdfs3`。`pyarrow`是Apache Arrow项目的一...

    向hdfs上传Excel文件.doc

    在大数据处理场景中,经常需要将Excel文件上传到Hadoop分布式文件系统(HDFS)中进行进一步的数据处理或分析。然而,由于HDFS本身并不直接支持Excel文件格式,通常的做法是先将Excel文件转换为CSV等更易于处理的格式...

    java操作Hadoop源码之HDFS Java API操作-上传文件

    在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...

    HDFS分布式文件系统

    - **文件大小统计**:`hdfs dfs -du`命令用于计算文件或目录的大小,`-s`选项用于显示总计,`-h`使输出以人类可读的格式显示。 - **可用空间查询**:`hdfs dfs -df`命令提供文件系统的总空间、已用空间和可用空间...

    第3章-分布式文件系统HDFS.pdf

    此外,HDFS还提供了编程实践接口,使得开发者可以利用这些接口在应用程序中实现文件的读取、写入、创建、删除和重命名等操作。通过这种方式,HDFS能够被广泛应用于大数据处理场景中,如数据挖掘、日志分析和数据仓库...

    Hadoop学习总结之二:HDFS读写过程解析.doc

    本文将详细解析HDFS的读取和写入过程,基于标题"《Hadoop学习总结之二:HDFS读写过程解析》"和描述中提到的代码分析。 1. **文件的打开** 当客户端想要打开一个HDFS文件时,它会调用`DistributedFileSystem.open`...

    python读取hdfs上的parquet文件方式

    在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊。从hdfs上使用python获取parquet格式数据的方法...5、读取文件 ##namenode mode: from hdfs3

    实验2 熟悉常用的HDFS操作

    - 创建一个`MyFSDataInputStream`类,继承自`org.apache.hadoop.fs.FSDataInputStream`,实现按行读取HDFS文件的方法`readLine()`。 - 使用`java.net.URL`和`org.apache.hadoop.fs.FsURLStreamHandlerFactory`,编写...

    Hadoop学习总结之二:HDFS读写过程解析

    在读取文件时,客户端首先与NameNode通信,获取文件的数据块位置信息,随后直接向DataNode发送读取请求,避免了每次读取都经过NameNode的瓶颈。此外,数据块的多副本机制确保了数据的高可用性和容错性。 在实际读取...

    读取HDFS序列化文件解析key、value可视化输出

    ReadAndWritePatterns是读取序列文件,并解析其key和value,然后可视化输出,所谓可视化输出是指不是乱码的输出,具体可以参考http://blog.csdn.net/fansy1990中《hadoop解析序列文件并可视化输出》

    04:HDFS分布式文件系统.zip

    当客户端需要读取文件时,它首先与NameNode通信获取文件块的位置信息,然后直接从相应的DataNode节点读取数据。写入文件时,客户端将文件切分成块,分别写入DataNode,并将每个块的副本发送到其他节点。最后,...

    基于Spark Streaming将图片以流的方式写入HDFS分布式文件系统.zip

    3. **图片处理**:项目可能涉及读取、解析和转换图片格式,例如JPEG或PNG,可能还会涉及到图像特征提取或预处理。 4. **数据流处理**:通过Spark Streaming,数据流会被拆分为DStreams(Discretized Streams),...

    《HDFS——Hadoop分布式文件系统深度实践》PDF

    读取文件时,NameNode会根据元数据信息指引客户端找到数据块的位置,通常是从最近或负载较低的DataNode开始读取。 HDFS的另一大特点是其流式访问模式,适合大规模批处理任务,而非低延迟的随机访问。MapReduce框架...

    实验项目 实战 HDFS 实验报告

    HDFS Java API允许开发者通过编程方式对HDFS进行高级操作,如创建、读取、修改和删除文件等。 五、HDFS Java API编程 通过Java API,学生可以实现上传本地文件到HDFS的功能。例如,使用FSDataInputStream和...

    web中进行HDFS文件系统操作的一些例程

    3. **打开和读取文件**:有了`FileSystem`实例后,可以打开文件并读取内容。 ```java Path filePath = new Path("/path/to/hdfs/file"); FSDataInputStream in = fs.open(filePath); BufferedReader reader = new ...

    HDFS存储系统

    #### 四、HDFS读文件流程 1. **客户端请求打开文件**:客户端向Namenode发起打开文件的请求。 2. **获取数据块信息**:Namenode返回包含文件所有数据块信息及其所在Datanode位置的元数据。 3. **选择数据源**:...

Global site tag (gtag.js) - Google Analytics