HDFS Short-Circuit Local Reads

1、背景

HDFS中,读取操作通常是通过DataNode。因此,当客户端要读取文件时,DataNode 会从磁盘上读取文件,然后通过TCP套接字将数据发送给客户端。如果我们的客户端和数据在同一台机器上的时候, 那么是否可以绕过DataNode,允许客户端直接读取数据呢?通过Short-Circuit Local Reads可以实现这一功能。

2、配置

2.1 检测是否启用libhadoop.so

如果我们要使用Short-Circuit Local Reads,那么需要保证我们的 hadoop启用了libhadoop.so,可以通过hadoop checknative命令来执行检查。

HDFS Short-Circuit Local Reads
检测是否启用libhadoop.so

2.2 设置套接字路径

  • Short-Circuit Local Reads 利用 Unix domain socket,这是文件系统中的一个特殊路径,允许客户端和 DataNodes 进行通信。您需要设置到此套接字的路径,并且DataNode 需要能够创建此路径。另一方面,除了 hdfs 用户或 root 用户之外,任何用户都不可能创建这个路径。因此,通常使用/var/run 或/var/lib 下的路径。

  • 客户端和 DataNode 通过/dev/shm 上的共享内存段交换信息,短路本地读取需要在 DataNode 和客户机上配置。

2.3 配置示例

vim hdfs-site.xml

<configuration>
  <!-- 开启 Short-Circuit Local Reads --> 
  <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
  </property>
  <!-- 可选。这是UNIX domain socket的路径,用于DataNode和本地HDFS客户端之间的通信。如果此路径中存在字符串“_PORT”,它将被DataNode的TCP端口替换。 -->
  <property>
    <name>dfs.domain.socket.path</name>
    <value>/var/lib/hadoop-hdfs/dn_socket</value>
  </property>
</configuration>

2.4.1 /var/lib/hadoop-hdfs目录未创建

/var/lib/hadoop-hdfs 这个目录需要提前创建,否则可能出现如下错误。HDFS Short-Circuit Local Reads

2.4.2 创建 /var/lib/hadoop-hdfs

[hadoopdeploy@hadoop01 ~]$ sudo mkdir /var/lib/hadoop-hdfs
[hadoopdeploy@hadoop01 hadoop]$ sudo chown hadoopdeploy:hadoopdeploy -R /var/lib/hadoop-hdfs

需要注意目录权限问题

2.4 重启hdfs,观察日志看Short-Circuit Local Reads是否启用

HDFS Short-Circuit Local Reads观察日志,发现出现了2023-03-23 21:41:42,321 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Listening on UNIX domain socket: /var/lib/hadoop-hdfs/dn_socket说明 Short-Circuit Local Reads 启用了。

3、测试下载文件是否是 Short-Circuit Local Reads

3.1 上传文件

# 上传文件
[hadoopdeploy@hadoop01 logs]$ hadoop fs -put /etc/profile /profile.txt

3.2 检测刚上传的文件分布在那几个机器上

HDFS Short-Circuit Local Reads
检测刚上传的文件分布在那几个机器上

3.3 下载文件

从上图中可以,我们的文件分别存储在 140和141上,此处我们从140上下载文件并观察日志HDFS Short-Circuit Local Reads

4、参考链接

1、https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html


原文始发于微信公众号(huan1993的编程coding):HDFS Short-Circuit Local Reads

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207335.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!