hadoop一直以来认为是本地读写文件的,但是其实也是通过TCP端口去获取数据,只是都在同一台机器。在hivetuning调优hive的文档中看到了ShortCircuit的HDFS配置属性,查看了ShortCircuit的来由,真正的实现了本地读取文件。蒙查查表示看的不是很明白,最终大致就是通过linux的文件描述符来实现功能同时保证文件的权限。
由于仅在自己的机器上面配置来查询hbase的数据,性能方面提升感觉不是很明显。等以后整到正式环境再对比对比。
- 2016-1 添加测试方法数据是否通过short-circuit读取
配置如下。
1 修改hdfs-site.xml
1 2 3 4 5 6 7 8 9 |
|
注意:socket路径的权限控制的比较严格。dn_socket所有的父路径要么仅有当前启动用户的写权限,要么仅root可写。
2 修改hbase的配置,并添加HADOOP_HOME(hbase查找hadoop-native)
hbase的脚本找到hadoop命令后,会把hadoop的java.library.path配置加入到hbase的启动脚本中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
3 同步到其他节点,然后重启hdfs,hbase
测试
在datanode读取该机器上的block(fsck命令可以查看文件的块在哪些机器)。通过查看日志,或者通过HdfsDataInputStream.getReadStatistics().getTotalShortCircuitBytesRead()来获取从ShortCircuit读取数据量。
1 2 3 4 5 6 7 8 9 10 11 |
|
参考
- hive-tuning
- How Improved Short-Circuit Local Reads Bring Better Performance and Security to Hadoop
- HDFS–Apache HBase Performance Tuning
- HDFS Short-Circuit Local Reads
–END