Impala的Short-Circuit Reads

时间:2022-05-06
本文章向大家介绍Impala的Short-Circuit Reads,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢

1.HDFS的Short-Circuit Local Reads


我们知道读取HDFS的数据需要通过DataNode。当客户端找DataNode读取数据时,DataNode会首先从磁盘中读取文件,然后通过TCP socket将数据传送给客户端。短回路(short-circuit)数据可以绕过DataNode,从而允许客户端直接读取文件。所以当客户端和数据在同一个节点时,短回路(short-circuit)可以明显为很多应用程序提升性能。

要配置short-circuit本地读,你需要libhadoop.so。short-circuit本地读利用Linux的domain socket,它是文件系统的一个特别的路径,可以允许客户端和DataNode进行通信。我们需要在socket中设置这个路径,然后DataNode需要能够创建这个路径。但需要注意,除了HDFS和root用户,其他任何用户都不能创建这个路径。这个路径一般会使用/var/run或/var/lib。客户端和DataNode通过/dev/shm上的共享内存段(shared memory segment)交换信息。Short-circuit本地读需要在DataNode和客户端都配置。

2.Impala的Short-Circuit Local Reads


Impala默认开启了Short-Circuit,并会利用HDFS中配置的那个路径,默认是/var/run/hadoop-hdfs/dn._PORT。该功能同样可以明显提升Impala的性能。

按照上文说的,Short-Circuit需要安装libhadoop.so,而在CDH的安装中,你如果使用tarbal安装,默认是没有安装libhadoop.so的。所以你必须使用rpm或者parcel安装,才能启用该功能。当然parcel本来也是Cloudera官方建议的安装方式。

本文Fayson会分析因为Short-Circuit目录问题导致Impala服务无法正常启动的一个异常。

3.问题描述


在启动Impala集群时部分Impala Daemon节点启动失败,异常日志如下:

Invalid short-circuit reads configuration:
  - Impala cannot read or execute the parent directory of dfs.domain.socket.path
Aborting Impala Server startup due to improper configuration. Impalad exiting.

(可左右滑动)

4.问题解决


1.登录CM管理界面进入HDFS服务搜索"dfs.domain.socket.path"

根据dfs.domain.socket.path配置的路径,登录到启动失败的Impala节点,查看该路径是否存在。

2.登录到启动失败节点的上查看/var/run目录下是否有hdfs-sockets目录

[root@ip-172-31-30-69 run]# ll /var/run/

(可左右滑动)

3.在/var/run目录下创建hdfs-sockets目录

[root@ip-172-31-30-69 run]# mkdir /var/run/hdfs-sockets
[root@ip-172-31-30-69 run]# chown hdfs:hadoop /var/run/hdfs-sockets/
[root@ip-172-31-30-69 run]# ll /var/run/

(可左右滑动)

注意:在有的Impala节点该目录存在,但目录的权限或属主异常,也需要进行相应的修改。

4.创建/var/run/hdfs-sockets目录后重启异常的Impala节点

服务启动成功,异常解决

提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操