HDFS 短路本地读取(HDFS Short-Circuit Local Reads)

Posted 程序猿码码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS 短路本地读取(HDFS Short-Circuit Local Reads)相关的知识,希望对你有一定的参考价值。

Apache Hadoop 2.9.0

请查看原文:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html

(如果转发,请标明出处)

短路本地读取(Short-Circuit Local Reads

背景

HDFS中,读取操作都是通过DataNode来进行的。当客户端向DataNode 发起读取文件请求时,DataNode 从磁盘读取文件,并且通过TCP socket来发送给客户端。所谓的短路就是不通过DataNode,允许客户端直接读取文件。显然,这仅在客户端与数据位于同一位置的情况下才有可能。短路读取能让许多应用性能显著提升

Setup

配置短路本地读取,需要启用 libhadoop.so。启用 libhadoop.so可以查看 Native Libraries来获得更多详细信息。

短路读取使用UNIX域套接字。在文件系统中,这是一个允许客户端和DataNodes 通信的特殊路径。我们需要为这个socket设置一个路径,DataNode需要能够创建此路径。另一方面,除了HDFS用户和root以外,其他任何用户都不能创建此路径,因此,经常使用 /var/run或者/var/lib

客户端和DataNode 通过/dev/shm上的共享内存段交换信息。

短路本地读取需要在DataNode 和客户端都进行配置。

配置样例

下面是一个配置样例。

<configuration>

  <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>

</configuration>

 

传统的HDFS短路本地读取Legacy HDFS Short-Circuit Local Reads

客户端直接打开HDFS块文件进行读取的短路本地读取的传统实现方式对于Linux以外的平台依然可用。除了dfs.client.read.shortcircui以外,还需要将dfs.client.use.legacy.blockreader.local设置为true 才能允许使用这一特征。

需要设置dfs.datanode.data.dir.perm 750而不是默认的700,并且使用chmod/chown命令将 dfs.datanode.data.dir 下的目录树设置为客户端和DataNode可读,这个地方必须非常小心,因为这就意味着客户端可以绕过HDFS权限来读取所有块文件。

因为传统的短路本地读取是不安全的,因此这项特征仅限于 dfs.block.local-path-access.user值中列出的用户列表才能使用。

<configuration>

  <property>

    <name>dfs.client.read.shortcircuit</name>

    <value>true</value>

  </property>

  <property>

    <name>dfs.client.use.legacy.blockreader.local</name>

    <value>true</value>

  </property>

  <property>

    <name>dfs.datanode.data.dir.perm</name>

    <value>750</value>

  </property>

  <property>

    <name>dfs.block.local-path-access.user</name>

    <value>foo,bar</value>

  </property>

</configuration>

 

------------ 全文完 --------------------

备注:

短路本地读取:Short-Circuit Local Reads

传统短路本地读取:Legacy HDFS Short-Circuit Local Reads

 

 

 

 

 

 

 

 

 

 

 

 


以上是关于HDFS 短路本地读取(HDFS Short-Circuit Local Reads)的主要内容,如果未能解决你的问题,请参考以下文章

HDFS短路读详解

十:HDFS Short-Circuit Local Reads 短路本地读取

Greenplum PXF 是不是支持 HDFS 短路读取?

用Java读取HDFS和本地文件

sc.textFile()默认读取本地系统文件还是HDFS系统文件?

从 hdfs vs 本地目录读取文件