iTurn 小栈

impala 优化 - hdfs配置本地短路读和文件块追踪

|  view  

参考官方文档

CDH和CDP托管的集群会自动配置,不需要用户关心

1 概述

启用短路读可以使 Impala 直接从文件系统读取 Hadoop 服务中 DataNode 的本地数据。这跳过了与 DataNodes的通信过程 ,从而提高了性能。此设置还可以最大限度地减少额外的数据副本的数量。

启用文件块位置追踪,可以使 Impala 知道每个块位于哪些磁盘,从而提高磁盘的访问效率。

2 配置

impala运行依赖hadoop的配置文件,所以需要保证以下修改的hadoop配置文件能够被impala访问到

在hadoop集群的所有节点配置文件 hdfs-site.xml 中添加以下配置

<!--开启客户端段路读-->
<property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
</property>
<!--socket文件位置-->
<property>
    <name>dfs.domain.socket.path</name>
    <value>/var/run/hdfs-sockets/dn</value>
</property>
<property>
    <name>dfs.client.file-block-storage-locations.timeout.millis</name>
    <value>10000</value>
</property>
<!--启用文件块追踪-->
<property>
  <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
  <value>true</value>
</property> 

⚠️ 需要注意的

  • dfs.domain.socket.path 是文件位置,所以需要保证其父目录是组内可读的,即权限为 755。如本配置中文件为 /var/run/hdfs-sockets/dn , 则要用设置设置其父目录/var/run/hdfs-sockets权限为755。
  • 还需要保证 impala服务运行的用户属于 hdfs 运行用户的组,比如impala服务以 impala 用户启动,hdfs服务以hadoop用户启动,此时需要将 impala 用户添加到 hadoop用户组。

以上两点设置的命令示例:

# socket文件的父目录
mkdir -p  /var/run/hdfs-sockets
# 设置文件夹用户组和权限
chown hadoop.hadoop /var/run/hdfs-sockets
chmod 755 /var/run/hdfs-sockets
# impala用户添加到hadoop用户组
usermod -G hadoop impala

⚠️ libhadoop.so

短路读需要 libhadoop.so 库的支持,该文件位于hadoop的lib目录,需要保证 impala 的运行环境中有该文件,比如可以直接将该文件添加到impala的lib目录。

3 重启服务

滚动重启 Hadoop 的 DataNode 服务和 Impalad 的 impalad 服务即可