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

背景

在 HDFS 中,读操作通常要经过 DataNode。因此,当客户端请求 DataNode 读取文件时,DataNode 从磁盘读取该文件并通过 TCP 套接字将数据发送给客户端。所谓的“短路”读取就是绕过 DataNode,允许客户端直接读取文件。当然,这只有在客户端与数据共存的情况下才可能实现。短路读取为许多应用程序提供了实质性的性能提升。

设置

要配置短路本地读操作,您需要启用libhadoop.so,有关启用此库的详细信息,请参阅https://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-common/NativeLibraries.html

短路读数利用 Unix domain socket,这是文件系统中的一个特殊路径,允许客户端和 DataNodes 进行通信。您需要设置到此套接字的路径,并且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 短路本地读取

老版本的短路本地读操作的实现,客户端直接打开 HDFS 块文件,对于 Linux 以外的平台仍然可用。将 dfs.client.use.legacy.blockreader.local 和 dfs.client.read.shortccircuit 的值设置为 true 可以启用这个特性。

您还需要将 dfs.datanode.data.dir.perm 的值设置为750,而不是默认的700,并将 dfs.datanode.data.dir 下的目录树 chmod/chown 设置为客户端和 DataNode 可读权限。您必须小心,因为这意味着客户机可以绕过 HDFS 权限读取所有块文件。

因为传统的短路本地读操作是不安全的,所以只有 dfs.block.local-path-access 值中列出的用户才能访问这个特性。用户。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值