HDFS 读文件分析
标签: hdfs 文件 分析 | 发表时间:2014-04-18 04:31 | 作者:驰晨
分享到:
出处:http://ronxin999.blog.163.comUNIX 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配置文件增加如下两个属性,注意,客户端和服务端都需要。
要启用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重试,直到该文件写完。
未完,待续。。
未完,待续。。
相关推荐
python解析hdfs文件内容生成本地文件、及相关插件包安装实现方式
对hadoop HDFS的分析,描述,HDFS文件的访问,读写等。HDFS读文件解析,HDFS写文件解析,HDFS文件创建流程,HDFS文件数据流写入传输协议
首先通过分析大量小文件历史访问日志,得到小文件之间的关联关系,然后根据文件相关性将相关联的小文件合并成大文件后再存储到HDFS。从HDFS中读取数据时,根据文件之间的相关性,对接下来用户最有可能访问的文件进行...
ReadAndWritePatterns是读取序列文件,并解析其key和value,然后可视化输出,所谓可视化输出是指不是乱码的输出,具体可以参考http://blog.csdn.net/fansy1990中《hadoop解析序列文件并可视化输出》
在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊。从hdfs上使用python获取parquet格式数据的方法...5、读取文件 ##namenode mode: from hdfs3
第2章 HDFS元数据解析 2.1 概述 2.2 内存元数据结构 2.2.1 INode 2.2.2 Block 2.2.3 BlockInfo和DatanodeDescriptor 2.2.4 小结 2.2.5 代码分析——元数据结构 2.3 磁盘元数据文件 2.4 Format情景分析 2.5 元数据...
SparkSQL HDFS JAVA调用完整实例,使用Maven管理,项目很小,里面实例很多。敬请下载。
针对Hadoop 分布式文件系统(Hadoop distributed file system,HDFS)进行小文件存储时NameNode 内存占用率高的问题,通过分析HDFS 基础架构,提出了基于元数据存储集群的SQL-DFS 文件系统. 通过在NameNode 中加入小文件...
1. 分布式文件系统与HDFS 2. HDFS 的shell 操作 3. HDFS 体系结构与基本概念 4 HDFS 的web 接口 5. HDFS 的java 访问接口 6. HDFS 的RPC 机制 7. NameNode 的接口分析 ...10. HDFS 的读数据过程分析
针对 Hadoop 分布式文件系统(Hadoop distributed file system,HDFS)进行小文件存储时 NameNode 内存占用率高的问题,通过分析 HDFS 基础架构,提出了基于元数据存储集群的 SQL-DFS 文件系统. 通过在 NameNode 中加 入...
针对Hadoop 分布式文件系统(Hadoop distributed file system,HDFS)进行小文件存储时NameNode 内存占用率高的问题,通过分析HDFS 基础架构,提出了基于元数据存储集群的SQL-DFS 文件系统. 通过在NameNode 中加入小文件...
在深入分析HDFS数据读写原理的基础上,提出了一种面向HDFS的数据随机访问方法。其设计思想是为Datanode添加本地数据访问接口,用户程序可以读取Datanode上存放的数据块文件以及把数据写入到Datanode上的数据块存放...
单个文件一般在百MB级以上文件数目适中3、流式数据访问,最高效的访问模式是一次写入、多次读取HDFS适合用于处理批量,而不适合随机定位访问HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据...
HDFS的读取数据过程细节上比较复杂,我们先来看一看具体代码是怎样实现读取数据过程的,然后再根据代码进行分析: import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.hadoop....
读取操作本地或HDFS上的csv、xls文件 for_file/Demo.py 包含:读取本地csv文件、选取指定列、更改列名、数据打印、保存csv文件 for_file/Demo2.py 包含:利用pyspark读取本地或HDFS上的csv文件、选取指定列、更改...
文章目录HDFS4 HDFS的数据流4.1 HDFS写数据流程4.1.1 剖析文件写入4.1.2 网络拓扑-节点距离计算4.1.3 机架感知(副本存储节点选择)4.2 HDFS读数据流程5 NameNode和SecondaryNameNode(面试开发重点)5.1 NN和2NN...
039 HDFS文件系统读写流程及HDFS API两种方式读取文件 040 详解HDFS API之FileSystem方式基本操作二 041 讲解分析Configuration和FileSystem类源代码 042 引出HDFS实际应用场景之合并文件和使用getmerge命令并查看...
- scala、spark读取HDFS文件,整理导入MongoDB数据库 - MongoDB中加载数据,利用sparkRdd统计热门电影、高分电影,统计分年月、分类别的热门、高分电影数据 - 基于ALS协同过滤算法,得到用户电影推荐和相似电影推荐 ...
我将云存储系统的SDK集成到此工具中的原因更像是一个演示如何使用Java从特定存储系统读取文件的演示。 功能列表 打开并查看本地目录中的Parquet,ORC和Avro,HDFS,AWS S3等。 将二进制格式的数据转换为文本格式的...