A HostProvider may not be empty --記一次線上配置問題的來龍去脈和解決方案

起源

公元XXX年,新上線的mapreduce任務在線上執行時遇到問題,主要報錯如下:

A HostProvider may not be empty,

根據報錯信息,定位到如下代碼:

org.apache.zookeeper.client.StaticHostProvider#StaticHostProvider,截圖如下:

image2020-3-4_10-14-45.png?version=1&modificationDate=1583288087281&api=v2uploading.4e448015.gif轉存失敗重新上傳取消

經過判斷,發現是zkClient最終解析到的ip地址列表爲空導致的問題,但是zkClient爲什麼解析不了zk地址呢,帶着疑惑,點開了java.net.InetAddress#getAllByName(java.lang.String)方法,簽名如下:

image2020-3-4_10-17-24.png?version=1&modificationDate=1583288246599&api=v2uploading.4e448015.gif轉存失敗重新上傳取消

映入眼簾的第一個就是該方法可能拋出UnknownHostException異常,看到這裏,筆者心中已經有了個大概的推斷,跟同事拿到最終執行的Jar包以及執行的命令,再次進行分析。

 

爲了區分線上環境和測試環境,在啓動任務時帶上了spring配置文件的路徑,-Dspring.xxxx=xxxx , 並且配置文件中會指定zk的鏈接地址,如下

image2020-3-4_10-25-15.png?version=1&modificationDate=1583288717469&api=v2uploading.4e448015.gif轉存失敗重新上傳取消

線上的配置文件格式相同,地址不同。

hadoop屬於典型的單線程多進程應用,爲了讓應用能在多臺機器上運行,hadoop會進行jar包的分發,但是不會將配置文件一併分發過去。

Main方法只會執行一次,mapper 以及reduce分別屬於不同的進程,無法獲取main方法的配置

 

 

 

 

image2020-3-4_10-34-20.png?version=1&modificationDate=1583289262641&api=v2uploading.4e448015.gif轉存失敗重新上傳取消

終結

 

未來

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章