java.net.ConnectException: Call *** to master:** failed on connection exception
阿新 • • 發佈:2021-01-22
踩坑 java呼叫hadoop api 連線拒絕
java.net.ConnectException: Call *** to master:** failed on connection exception: java.net.ConnectException: Connection refused: no further information;
##要使用宿主機中的 java 程式碼訪問客戶機中的 hdfs,需要保證以下幾點:
1.確保宿主機與客戶機的網路是互通的
2.確保宿主機和客戶機的防火牆都關閉,因為很多埠需要通過,為了減少防火牆配置,直接關閉
4.宿主機的登入使用者名稱必須與客戶機的使用者名稱一直。比如我們 linux 使用的是 hadoop 使用者,那麼 windows 也要使用 hadoop 使用者,否則會報許可權異常
##問題解決辦法:
1.檢查hadoop安裝路徑下etc/hadoop/core-site.xml
vim etc/hadoop/core-site.xml 檢視fs.defaultFS中配置的名稱和埠是否一致 我的是8020
2. 檢查防火牆是否關閉 root使用者(普通使用者切換sudo root)
service iptables status
#關閉防火牆
service iptables stop
#檢視防火牆開機啟動狀態
chkconfig iptables --list
#關閉防火牆開機啟動
chkconfig iptables off
3.先用windows的cmd視窗 看是否能ping同 不能ping同
檢查C:\Windows\System32\Drivers\etc\hosts 是否配置了依賴
4.解決無許可權訪問 設定Configuration中的屬性 Configuration相當於hadoop的配置檔案
下邊是程式碼配置
public class testUtil { /** * HDFS的路徑,core-site.xml中配置的埠號 */ public static final String HDFS_PATH = "hdfs://master:8020/"; /** * 解決無許可權訪問,設定遠端hadoop的linux使用者名稱稱 */ public static final String USER = "hadoop"; /** * 先執行 * @throws Exception */ Configuration conf =null; FileSystem fs=null; @Before public void init() throws Exception{ //讀取classpath下的xxx-site.xml 配置檔案,並解析其內容,封 裝到conf物件中 conf =new Configuration(); //也可以在程式碼中對conf中的配置資訊進行手動設定,會覆蓋掉配置 檔案中的讀取的值 conf.set("fs.defaultFS", HDFS_PATH); //根據配置資訊,去獲取一個具體檔案系統的客戶端操作例項物件 fs=FileSystem.get(new URI(HDFS_PATH), conf, USER); System.out.println("HDFSApp is setUp....."); } /** * 最後執行 * @throws Exception */ @After public void tearDown() throws Exception { conf= null; fs = null; // 3 關閉資源 fs.close(); System.out.println("HDFSApp is tearDown...."); } /** * 建立目錄 * @throws Exception */ @Test public void mkdir() throws Exception{ fs.mkdirs(new Path(HDFS_PATH+"/999")); System.err.println("HDFS DIR MAKE TURE"); } }