1. 程式人生 > 其它 >java.net.ConnectException: Call *** to master:** failed on connection exception

java.net.ConnectException: Call *** to master:** failed on connection exception

技術標籤:hadoophdfs大資料

踩坑 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.確保宿主機和客戶機的防火牆都關閉,因為很多埠需要通過,為了減少防火牆配置,直接關閉

 3.確保宿主機與客戶機使用的 jdk 版本一致。如果客戶機使用 jdk7,宿主機使用 jdk8,那麼程式碼執行時會報不支援的版本的錯誤
 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");
    }
}