2017-03-31 54 views
2

我在hdfs-site.xml和hbase-site.xml上都配置了短路設置。我運行hbase上的importtsv將數據從HDFS導入Hbase集羣上的HBase。我查看每個datanode上的日誌,並且所有的datanode都有我對標題說的ConnectException。ConnectException:連接錯誤:嘗試使用hbase上的importtsv連接到'50010'時沒有此文件或目錄

2017-03-31 21:59:01,273 WARN [main] org.apache.hadoop.hdfs.shortcircuit.DomainSocketFactory: error creating DomainSocket 
java.net.ConnectException: connect(2) error: No such file or directory when trying to connect to '50010' 
    at org.apache.hadoop.net.unix.DomainSocket.connect0(Native Method) 
    at org.apache.hadoop.net.unix.DomainSocket.connect(DomainSocket.java:250) 
    at org.apache.hadoop.hdfs.shortcircuit.DomainSocketFactory.createSocket(DomainSocketFactory.java:164) 
    at org.apache.hadoop.hdfs.BlockReaderFactory.nextDomainPeer(BlockReaderFactory.java:753) 
    at org.apache.hadoop.hdfs.BlockReaderFactory.createShortCircuitReplicaInfo(BlockReaderFactory.java:469) 
    at org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.create(ShortCircuitCache.java:783) 
    at org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.fetchOrCreate(ShortCircuitCache.java:717) 
    at org.apache.hadoop.hdfs.BlockReaderFactory.getBlockReaderLocal(BlockReaderFactory.java:421) 
    at org.apache.hadoop.hdfs.BlockReaderFactory.build(BlockReaderFactory.java:332) 
    at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:617) 
    at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:841) 
    at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:889) 
    at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:696) 
    at java.io.DataInputStream.readByte(DataInputStream.java:265) 
    at org.apache.hadoop.io.WritableUtils.readVLong(WritableUtils.java:308) 
    at org.apache.hadoop.io.WritableUtils.readVIntInRange(WritableUtils.java:348) 
    at org.apache.hadoop.io.Text.readString(Text.java:471) 
    at org.apache.hadoop.io.Text.readString(Text.java:464) 
    at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:358) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:751) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1656) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
2017-03-31 21:59:01,277 WARN [main] org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache: ShortCircuitCache(0x34f7234e): failed to load 1073750370_BP-642933002-"IP_ADDRESS"-1490774107737 

編輯

的Hadoop 2.6.4 HBase的1.2.3

HDFS-site.xml中

<property> 
    <name>dfs.namenode.dir</name> 
    <value>/home/hadoop/hdfs/nn</value> 
</property> 
<property> 
    <name>dfs.namenode.checkpoint.dir</name> 
    <value>/home/hadoop/hdfs/snn</value> 
</property> 
<property> 
    <name>dfs.datanode.data.dir</name> 
    <value>file:///home/hadoop/hdfs/dn</value> 
</property> 
<property> 
    <name>dfs.namenode.http-address</name> 
    <value>hadoop1:50070</value> 
</property> 
<property> 
    <name>dfs.namenode.secondary.http-address</name> 
    <value>hadoop1:50090</value> 
</property> 
<property> 
    <name>dfs.namenode.rpc-address</name> 
    <value>hadoop1:8020</value> 
</property> 
<property> 
    <name>dfs.namenode.handler.count</name> 
    <value>50</value> 
</property> 
<property> 
    <name>dfs.datanode.handler.count</name> 
    <value>50</value> 
</property> 
<property> 
    <name>dfs.client.read.shortcircuit</name> 
    <value>true</value> 
</property> 
<property> 
    <name>dfs.block.local-path-access.user</name> 
    <value>hbase</value> 
</property> 
<property> 
    <name>dfs.datanode.data.dir.perm</name> 
    <value>775</value> 
</property> 
<property> 
    <name>dfs.domain.socket.path</name> 
    <value>_PORT</value> 
</property> 
<property> 
    <name>dfs.client.domain.socket.traffic</name> 
    <value>true</value> 
</property> 

HBase的-site.xml中

<property> 
    <name>hbase.rootdir</name> 
    <value>hdfs://hadoop1/hbase</value> 
</property> 
<property> 
    <name>hbase.zookeeper.quorum</name> 
     <value>hadoop1,hadoop2,hadoop3,hadoop4,hadoop5,hadoop6,hadoop7,hadoop8</value> 
</property> 
<property> 
    <name>hbase.cluster.distributed</name> 
    <value>true</value> 
</property> 
<property> 
    <name>dfs.client.read.shortcircuit</name> 
    <value>true</value> 
</property> 
<property> 
    <name>hbase.regionserver.handler.count</name> 
    <value>50</value> 
</property> 
<property> 
    <name>hfile.block.cache.size</name> 
    <value>0.5</value> 
</property> 
<property> 
    <name>hbase.regionserver.global.memstore.size</name> 
    <value>0.3</value> 
</property> 
<property> 
    <name>hbase.regionserver.global.memstore.size.lower.limit</name> 
    <value>0.65</value> 
</property> 
<property> 
    <name>dfs.domain.socket.path</name> 
    <value>_PORT</value> 
</property> 
+0

讓我們看看你的'hdfs-site.xml' – franklinsijo

+0

@franklinsijo我添加了配置 – chatterboy

回答

1

短 - 電路讀取使使用UNIX域套接字。這是文件系統中的一個特殊路徑,它允許客戶端和DataNode進行通信。你將需要設置一個路徑(不是端口)到這個套接字。 DataNode應該能夠創建這個路徑。

路徑值的父目錄(例如:/var/lib/hadoop-hdfs/)必須存在並且應該由hadoop超級用戶擁有。還要確保除HDFS用戶或root以外的任何用戶都無法訪問此路徑。

mkdir /var/lib/hadoop-hdfs/ 
chown hdfs_user:hdfs_user /var/lib/hadoop-hdfs/ 
chmod 750 /var/lib/hadoop-hdfs/ 

將此屬性添加到所有數據節點和客戶端的hdfs-site.xml

<property> 
    <name>dfs.domain.socket.path</name> 
    <value>/var/lib/hadoop-hdfs/dn_socket</value> 
</property> 

進行更改後重新啓動服務。

注意:通常使用/var/run/var/lib下的路徑。

相關問題