short-circuit需要libhadoop.so,一個本地庫。該功能使用unix套接字,client和node通過套接字連接,需要對這個套接字設置一個路徑,並且datanode有創建這個路徑的權限,一般建在/var/run或者/var/lib。client和datanode通過共享內在/dev/shm交換數據。
client和datanode都要進行配置;
Example Configuration
Here is an example configuration.
<configuration> <property> <name>dfs.client.read.shortcircuit</name> <value>true</value> </property> <property> <name>dfs.domain.socket.path</name> <value>/var/lib/hadoop-hdfs/dn_socket</value> </property> </configuration>
舊式的short-circuit本地讀依然被支持,但是配置不一樣,要注意其安全性:
<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>