【presto on yarn】問題UnknownHostException和重啓節點

一.java.net.UnknownHostException: seacluster

在presto on yarn啓動之後,在presto-cli控制檯訪問hive的數據庫,不論是show schemas還是show tables都能成功

但是真正用sql去查詢表的時候,卻會報java.net.UnknownHostException: seacluster。原因是上面兩個語句是訪問hive的metadata,而select table是訪問hdfs上的文件,需要訪問hdfs

這裏的seacluster是我的集羣名字nameservers,這個指向我集羣裏面兩個namenode做的HA。

在core-site.xml裏面的設置是

在查詢了各種文章均沒有特別的啓發,自己想應該是哪裏配置問題。在訪問hive的時候需要加載core-site.xml,hdfs-site.xml,啓動presto的主節點引用該文件的地址是/usr/local/share/prestoyarn/slider-0.92.0-incubating-all/hive2

這個地址是配置在appConfig-default.json裏面的site.global.catalog配置項的,這個地址難道存在問題嗎?於是我去查看某個子節點裏面生成的配置/var/lib/presto/etc/catalog/hive2.propertis,地址也是這個,突然間我似乎明白了,子節點的這個目錄和文件是不存在的啊,那麼presto分發任務到這個節點的時候,這個節點去訪問hive是讀取不到這幾個文件的,這樣去訪問肯定是識別不了seacluster域名的,問題就出現了。

於是我將這幾個文件分別拷貝到每個節點的同一目錄下/usr/local/share,並將appConfig-default.json裏面的site.global.catalog訪問hive的地址改爲這個目錄

重啓presto on yarn,select表成功。並且在namenode漂移到standby節點後,再select也是成功的。此問題解決。

ps:當然此問題我最初的解決辦法不是這樣的,當時發現這個問題是覺得子節點沒有訪問域名是因爲無法識別,於是再/etc/hosts裏面去設置這個seacluster的對應主機名,這樣設置後也能訪問了。但是問題是當namenode節點漂移時,需要每次來修改這個對應關係,每個節點都要設置,是很麻煩的。爲了解決這個問題,出現了上面的方案。

 

二.presto節點重啓或掉線後重新加入問題。

修改resources-default.json裏面yarn.component.placement.policy爲2

{
  "schema": "http://example.org/specification/v2.0.0",
  "metadata": {
  },
  "global": {
    "yarn.vcores": "1"
  },
  "components": {
    "slider-appmaster": {
    },
    "COORDINATOR": {
      "yarn.role.priority": "1",
      "yarn.component.instances": "1",
      "yarn.component.placement.policy": "2",
      "yarn.memory": "15360",
      "yarn.label.expression": "coordinator"
    },
    "WORKER": {
      "yarn.role.priority": "2",
      "yarn.component.instances": "7",
      "yarn.component.placement.policy": "2",
      "yarn.memory": "15360",
      "yarn.label.expression": "worker"
    }
  }
}

重啓presto,然後reboot其中一臺節點exmp:t011,此時監控界面會顯示少一個幾點

t011重啓成功後,拉起yarn相關的服務。

在yarn的application界面會顯示該節點lost,且重啓了一個container,t011的container_1584422422428_0009_01_000009是第一次啓動的,container_1584422422428_0009_01_000012是在t011的009container  lost之後,重新啓動的一個container。

ps:拉起presto服務的時候會有個問題,yarn在t011掛了之後,會重新在資源池裏去重新啓動一個container,此時經常會在已經跑了presto任務的的機器上再啓動一個container,再同一個機器上啓動兩個container會失敗,失敗原因可能是端口占用,二此時嘗試了多次之後,會使得yarn的這個presto任務整個掛掉,導致presto集羣掛掉。

有個辦法是在resources-default.json的component配置裏面,將yarn.memory儘量調大,我測試時機器有48G內存,這裏我設置了35G,然後再啓動。後面有worker節點掛掉時,yarn就不會再找已有presto服務的節點再去啓container了,會找新的機器節點。此問題暫且記下,等後續有更好的方案再更新

 

問題二參考:https://groups.google.com/forum/#!topic/presto-users/nlja-IO0GQw

https://github.com/prestodb/presto-yarn/issues/40

 

 

 

欺我無謀?定要爾等血償!

 

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