先丟點問題小結到這里,免得忘記,有空再弄個詳細教程玩,網上的教程要不就是舊版的,要不就是沒說到點子上,隨便搞搞也能碰上結果是對的時候,但是知其然而不知其所以然,沒意思啊。解決問題的方法有很多種,總得找到比較合適的方法才行的。
1.服務器禁用ipV6配置.
2.Could not locate executable null\bin\winutils.exe in the Hadoop binaries
首先,有個exe,要去下載。其次,注意到提示的路徑前面的null,路徑沒有。。。系統變量設置了HADOOP_HOME也不行,程序中直接設定環境變量,還能省去系統配置,更方便。這玩意應該只有windows系統會要了,exe嘛。。。
System.setProperty("hadoop.home.dir","xxxxxxxxx");
3.連接不上服務器的hdfs端口
查看/etc/hosts中,主機名是否綁定到127.0.0.1或127.0.1.1,這樣會有問題,ubuntu中這是主要原因,hosts中主機名要綁定IP。
slaves中去掉localhost,加上所有服務器的主機名,一行一個,/etc/hosts中綁定其它服務器的主機名和對應的IP。
只有一台機器的話,也是直接放主機名,localhost本就是和127.0.0.1綁定的,這就會有前面的綁定ip問題了。就算可以,復制文件到從服務器的時候,還是要改配置的,麻煩。全部用主機名,配置也不用改,hosts綁定都能直接復制。
有的教程中,xml中是用IP的,但是個人認為用主機名好,然后在hosts中綁定一下。用IP的話,服務器的IP一換,要改的地方就多了,用主機名時只要改改hosts就好了。
綜上所述,為了避免亂七八糟的問題,不要用127.0.0.1,不要用localhost,不要用IP,用主機名加hosts配置,省事還不容易出錯。
slaves中的配置是datanode起來的關鍵,列出的機器,才會有datanode服務。
4.windows連接上hdfs服務器后,安全模式關閉后,java程序可讀取但是不能寫操作,這是因為默認是用當前用戶名去通信的,關閉權限校驗?或去改當前用戶名?麻煩,直接一行代碼搞定!
System.setProperty("HADOOP_USER_NAME","xxxxxxxx");
當然,安全模式開啟了的話,肯定是不能寫的了。
查看安全模式狀態
hadoop dfsadmin -safemode get