-
在阿里云服務(wù)器搭建完Hadoop環(huán)境后澜汤,在服務(wù)器上用shell命令可以讀取寫(xiě)入文件,但是本地java程序可以連接hadoop創(chuàng)建路徑械筛,上傳文件失敗。有文件名稱侦鹏,內(nèi)容為0诡曙。
image.png
1.既然是偽分布式集群,所以文件中的所有配置都要留內(nèi)網(wǎng)ip略水,方便namenode與datanode相通信价卤。
2.在客戶端通過(guò)代碼連接時(shí),需要指定namenode通過(guò)hostname去連接datanode渊涝,按第一條來(lái)說(shuō)慎璧,hostname要留內(nèi)網(wǎng)ip。所以直接通過(guò)外網(wǎng)ip是沒(méi)有辦法連接hadoop集群的所以會(huì)導(dǎo)致報(bào)這種錯(cuò)跨释。
/hdfsapi/test/a.txt could only be replicated to 0 nodes instead of minReplication (=1)
問(wèn)題原因:
1.阿里云服務(wù)器Shell 可以正常操作胸私,排除集群搭建和進(jìn)程沒(méi)有啟動(dòng)的問(wèn)題。
2.HDFS 中的文件夾和文件名都是存放在 NameNode 上鳖谈,操作不需要和 DataNode 通信岁疼,因此可以正常創(chuàng)建文件夾和創(chuàng)建文件說(shuō)明本地和遠(yuǎn)程 NameNode 通信沒(méi)有問(wèn)題。
3.那么很可能是本地和遠(yuǎn)程 DataNode 通信有問(wèn)題缆娃。
4.猜測(cè)問(wèn)題原因?yàn)椋何募A和文件名都是存放在 NameNode 上的捷绒,我本地可以通過(guò)公網(wǎng)訪問(wèn) NameNode,所以創(chuàng)建文件夾和文件都可以龄恋,但是當(dāng)我寫(xiě)數(shù)據(jù)的時(shí)候疙驾,NameNode 和DataNode 是通過(guò)內(nèi)網(wǎng)通信的,NameNode 會(huì)返回給我 DataNode 的內(nèi)網(wǎng) IP郭毕,我本地就訪問(wèn)不了了它碎。
還有一種可能,云服務(wù)器沒(méi)有開(kāi)放 DataNode 用于數(shù)據(jù)傳輸服務(wù)端口 默認(rèn)是 50010。
解決問(wèn)題:
1.構(gòu)造HDFS客戶端的時(shí)候加如下配置扳肛,使 NameNode 返回 DataNode 的主機(jī)名而不是 IP
configuration = new Configuration();
configuration.set("dfs.client.use.datanode.hostname", "true");
- 配置 hdfs-site.xml
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
3.阿里云服務(wù)器的host配置如下:
/etc/hosts
172.xx.xx.xx master
4.阿里云服務(wù)器開(kāi)放50010端口
問(wèn)題解決了I倒摇!
作者:大雄的學(xué)習(xí)筆記
鏈接:http://www.reibang.com/p/dd52b6d989b2
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有挖息。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)金拒,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。