无法远程访问hdfs

时间:2016-09-11 15:51:58

标签: hadoop hdfs

我有一台运行一台机器的hdfs(namenode,secodnarynamenode和datanode)。我可以在同一台机器上运行hdfs操作,例如'put',但它不能远程工作,尽管其他操作如'ls'可以正常工作。

我认为我的远程hdfs客户端能够连接到namenode,但不能连接到datanode。 Namenode Web控制台显示在localhost上运行了一个datanode,这可能是问题 - 它应该绑定到ip地址,以便我的htfs客户端可以访问它。 我试图改变与datanode相关的属性:

  <property>
<name>dfs.datanode.address</name>
<value>192.168.1.128:50010</value>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>192.168.1.128:50075</value>
</property>
 <property>
<name>dfs.datanode.ipc.address</name>
<value>192.168.1.128:50020</value>
</property>

但它没有帮助。有趣的是,我可以使用192.168.1.128:50075访问datanode UI,并且显示datanode运行在192.168.1.128:50075,任何想法?

1 个答案:

答案 0 :(得分:0)

端口50075用于dfs.datanode.address;还有一个用于ls(用于数据传输的datanode服务器地址和端口),默认值为50010,请参阅hdfs-default.xml reference

请检查它是否是正在收听的端口以及是否可以访问。

您对datanode问题的猜测看起来是正确的:put操作仅由namenode提供;对于int equalPairOfBits(int n, int m) { String theN = Integer.toBinaryString(n); String theM = Integer.toBinaryString(m); int pos = 0; int nLen = theN.length(); int mLen = theN.length(); char[] nArray = new char[nLen]; char[] mArray = new char[mLen]; for(int i = nLen - 1; i > -1; i--){ nArray[i] = theN.charAt(i); } for(int i = mLen - 1; i > -1; i--){ mArray[i] = theM.charAt(i); } boolean isSame = false; for(int i = nLen - 1; i > -1; i--){ if(nArray[i] == mArray[i] && isSame == false) { pos = i; isSame = true; } } pos = nLen - pos; int mult = 1; for(int i = 1; i < pos; i++){ if(pos == 0) mult = 1; else mult = mult * 2; } return mult; } ,您需要直接连接到datanode。