Hadoop HDFS Short-Circuit Local Reads

本文固定链接:https://www.askmaclean.com/archives/hdfs-short-circuit-local-reads.html

原文地址:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html

 

1.本地读

1.1背景

在HDFS,读一般是通过DataNode。因此,当客户端请求DataNode来读取一个文件时,DataNode从磁盘读取文件,然后通过TCP socket发送给客户端。所谓的本地读(短路读),是通过DataNode ,允许客户端直接去读取文件。短路读为很多应用提供了优秀的性能。

 

1.2设置

要配置短路本地读,你需要启用libhadoop.so。参考本地库来获得启用这个库的详细信息。

短路读是利用的UNIX socket。这是文件系统允许客户端和DataNode 通信的一个特殊路径。你需要为这个socket设置一个路径。DataNode需要能够创建这个路径。换句话说,不应该使用除了HDFS用户之外的用户或root来创建这个路径。因此这个路径一般在/var/run或/var/lib目录下(www.askmaclean.com)。

 

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

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

 

1.3 配置例子

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

 

2.传统的HDFS本地读

在HDFS块文件上实施传统本地读也适合其他linux平台。设置 dfs.client.use.legacy.blockreader.local 和dfs.client.read.shortcircuit为true来开启这个特性。

你还需要设置dfs.datanode.data.dir.perm 为750,其默认值是700.并且修改dfs.datanode.data.dir下面的组权限,让客户端和DataNode可读。你必须小心,因为这意味着客户端可以绕过HDFS权限读取所有的块文件(www.askmaclean.com)。

 

由于传统的本地读是不安全的,访问这个特性的用户限制列表的值在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>

 

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号