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的更多相关文章

  1. HDFS: The short-circuit local reads feature cannot be used

    问题: method:org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:69) The ...

  2. HBase查询优化之Short-Circuit Local Reads

    1.概述 在<HBase查询优化>一文中,介绍了基于HBase层面的读取优化.由于HBase的实际数据是以HFile的形式,存储在HDFS上.那么,HDFS层面也有它自己的优化点,即:Sh ...

  3. Short Circuit Protection Circuit

    http://www.daycounter.com/Circuits/Short-Circuit-Protection/Short-Circuit-Protection.phtml Short cir ...

  4. Husky or C++ API - HDFS Short-Circuit Local Reads

    hdfs-site.xml added: <property> <name>dfs.client.read.shortcircuit</name> <valu ...

  5. 十:HDFS Short-Circuit Local Reads 短路本地读取

    当client请求数据时,datanode会读取数据然后通过TCP协议发送给client.short-circuit绕过了datanode直接读取数据.short-circuit的前提是client和 ...

  6. 初识HDFS原理及框架

    目录 HDFS是什么 HDFS的优缺点 HDFS的框架 HDFS的读写流程 HDFS命令 HDFS参数 1. HDFS是什么 HDFS(Hadoop Distributed File System)是 ...

  7. HBase读延迟的12种优化套路

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

  8. hbase读的性能优化

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

  9. HBase读延迟的12种优化套

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少. 总 ...

  10. HBase最佳实践-读性能优化策略

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

随机推荐

  1. NC14522 珂朵莉的数列

    题目链接 题目 题目描述 珂朵莉给了你一个序列,有 \(\frac{n\times(n+1)}2\) 个子区间,求出她们各自的逆序对个数,然后加起来输出 输入描述 第一行一个数 n 表示这个序列 a ...

  2. NC16666 [NOIP2006]开心的金明

    题目链接 题目 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只 ...

  3. MySQL 幻象行

    当同一个查询在不同的时间产生不同的行集时,就会出现所谓的幻像问题.例如,如果执行了两次SELECT,但是第二次返回了第一次没有返回的行,那么该行就是一个"幻象"行. 假设在表chi ...

  4. 使用BP神经网络实现函数逼近

    1 一元函数逼近 1.1 待逼近函数 1.2 代码 clear,clc p=[-4:0.1:4]; %神经网络输入值 t=sin(0.5*pi*p)+sin(pi*p); %神经网络目标值 n=15; ...

  5. Oracle ascii函数

    一  简介 Oracle ascii函数用于返回单个字符的数字代号. 二  语法 ASCII( single_character ) 参数说明: 代表只能输入单个字符,如果输入多个,oracle只会返 ...

  6. vue+jsPlumb制成的流程图项目

    本项目参考:https://github.com/wangduanduan/visual-ivr 主页面如下:

  7. 工作中django的应用路径配置

    1.通常工作中都会把所有的应用放在一个主目录中 比如:主项目文件夹为luffyapi 在luffyapi下创建一个apps文件夹,用来存放所有的app应用 2.创建应用 先创建一个应用,需要cd到ap ...

  8. 【LeetCode哈希表#1】有效的字母异位词+赎金信(数组)

    有效的字母异位词 力扣题目链接(opens new window) 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagr ...

  9. 全面掌握Directory.Build.props

    为什么需要集中管理版本号? 1)同一个产品包含多个模块,对同一个包指定了不同的版本 比如A模块用了"Serilog.Sinks.Async"的"1.1.2"版本 ...

  10. DataGear 制作基于Vue2、Element UI前端框架的数据可视化看板

    DataGear 数据可视化看板内置了一些基本.简单的页面交互组件,当它们无法满足实际看板需求时,可以引入更流行和强大的前端框架. 本文以Vue2.Element UI前端框架为例,介绍如何制作具有更 ...