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命令来执行检查。

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 这个目录需要提前创建,否则可能出现如下错误。

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是否启用

观察日志,发现出现了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 检测刚上传的文件分布在那几个机器上

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

4、参考链接
1、https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html
HDFS Short-Circuit Local Reads的更多相关文章
- HDFS: The short-circuit local reads feature cannot be used
问题: method:org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:69) The ...
- HBase查询优化之Short-Circuit Local Reads
1.概述 在<HBase查询优化>一文中,介绍了基于HBase层面的读取优化.由于HBase的实际数据是以HFile的形式,存储在HDFS上.那么,HDFS层面也有它自己的优化点,即:Sh ...
- Short Circuit Protection Circuit
http://www.daycounter.com/Circuits/Short-Circuit-Protection/Short-Circuit-Protection.phtml Short cir ...
- Husky or C++ API - HDFS Short-Circuit Local Reads
hdfs-site.xml added: <property> <name>dfs.client.read.shortcircuit</name> <valu ...
- 十:HDFS Short-Circuit Local Reads 短路本地读取
当client请求数据时,datanode会读取数据然后通过TCP协议发送给client.short-circuit绕过了datanode直接读取数据.short-circuit的前提是client和 ...
- 初识HDFS原理及框架
目录 HDFS是什么 HDFS的优缺点 HDFS的框架 HDFS的读写流程 HDFS命令 HDFS参数 1. HDFS是什么 HDFS(Hadoop Distributed File System)是 ...
- HBase读延迟的12种优化套路
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
- hbase读的性能优化
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
- HBase读延迟的12种优化套
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少. 总 ...
- HBase最佳实践-读性能优化策略
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
随机推荐
- 2023sdut_python实验
7-1 sdut-温度转换 n = input() n = float(n) c = 5.0*(n-32.0)/9.0 print("%.2f" %(c)) #其中,c为变量 ...
- Springboot+Freemarker+Boostrap实现用户增删改查实战
说明 做java web用的2大模板语言分别是:thymeleaf和freemarker,thymeleaf前面已经用了很多了,所以今天用一下这个freemarker. 技术栈 springboot ...
- Java集合框架学习(十五) ListIterator接口详解
ListIterator介绍 一个为list对象设计的迭代器,允许开发人员在2个方向上迭代,修改和获得list迭代位置. ListIterator 没有所谓当前元素. 它的游标位置总是位于previo ...
- 编译 windows 上的 qt 静态库
记录命令行编译过程: 针对 Qt 5.15.2 版本, 只需要 Source 文件就行 打开 x86 Native Tools Command Prompt for VS 2019,如果需要编译 x6 ...
- python selenium list index out of range
常见错误原因 常见错误原因 其他错误原因 场景 使用selenium循环打开并跳转到新的网页,然后关闭新的窗口,然后回到原来窗口,这时候获取list中的值,报错: list index out of ...
- 在矩池云使用Llama2-7B的方法
今天给大家分享如何在矩池云服务器使用 Llama2-7b模型. 硬件要求 矩池云已经配置好了 Llama 2 Web UI 环境,显存需要大于 8G,可以选择 A4000.P100.3090 以及更高 ...
- 【Azure Logic App】使用Outlook.com发送邮件遇到429报错
问题描述 在Logic App中使用 Outlook.com组件发送邮件,遇见了outlook connection报429的错误 {"error":{"code&quo ...
- 代码随想录算法训练营第三十天| 51. N皇后 37. 解数独 总结
卡哥建议:今天这三道题都非常难,那么这么难的题,为啥一天做三道? 因为 一刷 也不求大家能把这么难的问题解决,所以 大家一刷的时候,就了解一下题目的要求,了解一下解题思路,不求能直接写出 ...
- 二十: MySql 事务日志
MySql 事务日志 事务有4种特性:原子性.一致性.隔离性和持久性.那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由 锁机制 实现. 而事务的原子性.一致性和持久性由事务的 redo 日 ...
- MySql变量说明
1 #变量 2 /* 3 系统变量: 4 全局变量 5 会话变量 6 7 自定义变量: 8 用户变量 9 局部变量 10 11 */ 12 #一.系统变量 13 /* 14 说明:变量由系统定义,不是 ...