【Hadoop学习】HDFS 短路本地读

Hadoop版本:2.6.0

本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接:

http://www.cnblogs.com/zhangningbo/p/4146296.html

背景



在HDFS中,通常是通过DataNode来读取数据的。但是,当客户端向DataNode请求读取文件时,DataNode就会从磁盘读取该文件并通过TCP socket将数据发送到客户端。所谓“短路”是指旁路DataNode来读取文件,也就是说,允许客户端直接读取文件。很明显,这种情况只在客户端与数据放在同一地点(译者注:同一主机)时才有可能发生。短路读对于许多应用程序会带来重大的性能提升。

创建



要配置短路本地读,你需要使能libhadoop.so。详见Native Libraries。

短路读利用UNIX域套接字。这是文件系统中的特殊路径,可以让客户端和DataNode通信。你需要设置一个路径给该套接字,而且DataNode要能够创建该路径。另一方面,除了HDFS用户和root用户,其他用户不可能创建该路径。正因如此,所以,通常才使用在/var/run或者/var/lib下的路径。

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

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

所有相关的配置参数



此功能相关的参数主要有以下5个:

属性名称 默认值 描述
dfs.client.read.shortcircuit false 该参数打开short-circuit local reads 功能。
dfs.domain.socket.path   可选。该参数是一个指向UNIX域套接字的路径,用于DataNode和本地HDFS客户端通信。如果在该路径中出现了字符串"_PORT",会被替换成DataNode的TCP端口。
dfs.client.read.shortcircuit.skip.checksum false 如果设置了该参数,short-circuit local reads功能将跳过checksums校验。通常不推荐这么做,但是该参数对于特殊场合可能有用。如果你在HDFS之外自己做checksum校验,那么就该考虑设置该参数。
dfs.client.read.shortcircuit.streams.cache.size 256 DFSClient维护着一个用于保存最近已打开的文件描述符的缓存。该参数控制着此缓存的容量。增大该缓存的容量就可以使用更多文件描述符,但是,在涉及大量seek操作的负载上可能带来更好的性能。
dfs.client.read.shortcircuit.streams.cache.expiry.ms 300000 该参数控制着文件描述符因为长期不活跃而被关闭之前需要在客户端缓存上下文中驻留的最小时间。

以下是示例配置。

<configuration>
  <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
  </property>

<property>
    <name>dfs.domain.socket.path</name>
    <value>/var/run/hadoop-hdfs/dn._PORT</value>                 #官网示例为/var/lib/hadoop-hdfs/dn_socket
  </property>

<property>
    <name>dfs.client.read.shortcircuit.skip.checksum</name>
    <value>false</value>
  </property>

<property>
    <name>dfs.client.read.shortcircuit.streams.cache.size</name>
    <value>1000</value>
  </property>

<property>
    <name>dfs.client.read.shortcircuit.streams.cache.expiry.ms</name>
    <value>10000</value>
  </property>
</configuration>

旧版本中的HDFS短路本地读特性



旧版本中实现的短路本地读特性(客户端可以直接在哪个短路本地读套接字上打开HDFS块文件)对于除了linux以外的平台依然可用。通过设置属性dfs.client.use.legacy.blockreader.local和dfs.client.read.shortcircuit为true来使能该特性。

你还需要设置属性dfs.datanode.data.dir.perm为750以替代默认的700,并使用chmod/chown命令改变dfs.datanode.data.dir下的目录树权限为对客户端和DataNode可读。你必须小心谨慎一些,因为这么做就意味着客户端可以旁路HDFS权限来读取所有的块文件。

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

时间: 2024-10-13 10:48:31

【Hadoop学习】HDFS 短路本地读的相关文章

hadoop学习;hdfs操作;运行抛出权限异常: Permission denied;api查看源码方法;源码不停的向里循环;抽象类通过debug查找源码

eclipse快捷键alt+shift+m将选中的代码封装成方法:alt+shift+l将选中的代码添加对应类型放回参数 当调用一个陌生方法时,进入源码不停的向里循环,当找不到return类似方法的时候,可以看到最原始的方法 package com.kane.hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org

Hadoop 学习 HDFS

1.HDFS的设计 HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网络中跨多台计算机存储的文件系统. HDFS不适合用在:要求低时间延迟数据访问的应用,存储大量的小文件,多用户写入,任意修改文件. 2.HDFS的概念 HDFS数据块:HDFS上的文件被划分为块大小的多个分块,作为独立的存储单元,称为数据块,默认大小是64MB. 使用数据块的好处是: 一个文件的大小可

Hadoop学习-hdfs安装及其一些操作

hdfs:分布式文件系统 有目录结构,顶层目录是:  /,存的是文件,把文件存入hdfs后,会把这个文件进行切块并且进行备份,切块大小和备份的数量有客户决定. 存文件的叫datanode,记录文件的切块信息的叫namenode Hdfs的安装 准备四台linux服务器 先在hdp-01上进行下面操作 配置域名映射 vim /etc/hosts 主机名:hdp-01  对应的ip地址:192.168.33.61 主机名:hdp-02  对应的ip地址:192.168.33.62 主机名:hdp-0

hadoop学习---hdfs

hdfs默认基本存储单元为64mb,hdfs的块比磁盘的块大得多,是为了减少寻址开销.如块大小是100mb,寻址时间在10ms,传输速率是100mb/s,则寻址时间是传输时间的1% hdfs的三个重要角色:client,datanode,namenode namenode相当于hdfs中的管理者,管理文件系统的命名空间.它维护着这个文件系统树以及树内所有的文件和索引目录.它会存储文件系统的metadata在内存中. datdanode相当于hdfs中的工作者,是文件存储的基本单元.周期性地向na

hadoop学习笔记-HDFS的REST接口

在学习HDFS的过程中,重点关注了HDFS的REST访问接口.以前对REST的认识非常笼统,这次通过对HDFS的REST接口进行实际操作,形成很直观的认识. 1? 写文件操作 写文件操作分为两个命令,第一个命令先产生一个重定向(TEMPORARY_REDIRECT)响应报文,响应报文中的Location字段即为重定向的目标地址,这个目标地址指向的就是分配的datanode,用以存储后面写入的内容.第二个命令的URL写的就是第一个命令重定向的目标地址.(注意:在路径前面需要加"/webhdfs/v

Hadoop学习笔记_5_分布式文件系统HDFS --shell操作

分布式文件系统HDFS --shell操作 分布式文件系统[Distributed File System]概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 . 分布式文件系统特点: 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. 通透性.让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般

Hadoop学习笔记_6_分布式文件系统HDFS --NameNode体系结构

分布式文件系统HDFS --NameNode体系结构 NameNode 是整个文件系统的管理节点. 它维护着整个文件系统的文件目录树[为了使得检索速度更快,该目录树放在内存中], 文件/目录的元信息和每个文件对应的数据块列表. 接收用户的操作请求. Hadoop确保了NameNode的健壮性,不容易死亡.文件目录树以及文件/目录的元信息等归根到底是存放在硬盘中的,但是在Hadoop运行时,需要将其加载到内存中. 文件包括: fsimage:元数据镜像文件.存储某一时段NameNode内存元数据信

Hadoop学习之路(2)Hdfs分布式文件系统

@[TOC] 1.Hadoop架构 Hadoop由三个模块组成:分布式存储HDFS.分布式计算MapReduce.资源调度引擎Yarn 2.HDFS体系架构 2.1NameNode    NameNode负责:文件元数据信息的操作以及处理客户端的请求   NameNode管理:HDFS文件系统的命名空间NameSpace.   NameNode维护:文件系统树(FileSystem)以及文件树中所有的文件和文件夹的元数据信息(matedata)维护文件到块的对应关系和块到节点的对应关系   Na

学习Hadoop生态系统最值得一读的书籍

学习大数据的处理,有必要读一下有关大数据的书籍.这里,我列举了几本书,仅供参考. 1 ZooKeeper: Distributed Process Coordination 这本书针对的是初级或者高级的开发,面向Zookeeper编程的工程师们.如果你的工程中(如HBase)涉及到Zookeeper的应用,有必要了解一下Zookeeper的管理知识和一些基本解决Zookeeper问题的能力.这本书里,鼓励读者查阅Zookeeper的源码,并给予有价值的反馈. 2 Apache Sqoop Coo