Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

短路本地读

背景

HDFS中,读取通常通过DataNode进行。因此,当客户端要求DataNode读取文件时,DataNode将从磁盘上读取该文件,然后通过TCP套接字将数据发送给客户端。所谓的“短路”读取绕过了DataNode,从而允许客户端直接读取文件。显然,这仅在客户端与数据位于同一位置的情况下才可行。短路读取为许多应用提供了显着的性能提升。

设定

要配置本地短路读取,您需要启用libhadoop.so。请参见本机库的启用此库的详细信息。

短路读取利用UNIX域套接字。这是文件系统中的一条特殊路径,它允许客户端和DataNode进行通信。您将需要为此套接字设置一个路径。该数据节点需要能够创建此路径。另一方面,除HDFS用户或root之外,任何其他用户都不可能创建该路径。因此,通常使用/ var / run/ var / lib下的路径。

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

短路本地读取需要同时在DataNode和客户端上配置。

配置示例

这是一个示例配置。

<配置>
  <属性>
    <name> dfs.client.read.shortcircuit </ name>
    <value> true </ value>
  </ property>
  <属性>
    <name> dfs.domain.socket.path </ name>
    <值> / var / lib / hadoop-hdfs / dn_socket </值>
  </ property>
</ configuration>

旧版HDFS短路本地读取

客户端可以直接打开HDFS块文件的短路本地读取的传统实现仍可用于Linux以外的平台。除dfs.client.read.shortcircuit之外,将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值中列出的用户访问此功能。

<配置>
  <属性>
    <name> dfs.client.read.shortcircuit </ name>
    <value> true </ value>
  </ property>
  <属性>
    <name> dfs.client.use.legacy.blockreader.local </ name>
    <value> true </ value>
  </ property>
  <属性>
    <name> dfs.datanode.data.dir.perm </ name>
    <value> 750 </ value>
  </ property>
  <属性>
    <名称> dfs.block.local-path-access.user </名称>
    <value> foo,bar </ value>
  </ property>
</ configuration>