Bug死磕之hue整合的oozie+pig出現資源任務死鎖問題
阿新 • • 發佈:2019-02-20
這兩天,打算給現有的Apache Hadoop2.7.1的叢集裝個hue,方便業務人員使用hue的視覺化介面,來做一些資料分析任務,這過程遇到不少問題,不過大部分最終都一一擊破,收穫經驗若干,折騰的過程,其實也是一個學習的過程,一個歷練的過程,我相信優秀的人,都是經歷過無數磨難成就的,並且有著堅持不放棄的心態,迎接各種挑戰,如果你總是遇到困難就放棄,那麼你永遠也不能成為最優秀的人,廢話不多說了,下面開始進入正題:
一安裝hue
1,到官網下載 http://gethue.com/categ
2,解壓到某個目錄hue
3,安裝依賴:yum install -y asciidoc cyrus-sasl-deve++ krb5-devel libtidy libxml2-devel libxslt-devel make mysql mysql-devel openldap-devel python-devel sqlite-devel openssl-devel gmp-devel
4,進入hue目錄,執行make apps編譯
5,配置desktop/conf/hue.ini
6,啟動build/env/bin/supervisor 殺死指令碼(ps -ef | grep hue- | gawk '{print $2}' | xargs kill -9)
倫理片http://www.dotdy.com/
如果你的hue只是用來操作hive的,那麼沒必要安裝oozie了,那麼整個流程就簡單了,進入hive目錄啟動memstore和hiveserver2服務即可:bin/hive --service metastore
bin/hiveserver2
一個使用hue查詢的hive的查詢如下:
很漂亮,用來除錯sql非常方便,如果你想使用工作流或者pig功能,那麼就需要安裝oozie了
oozie安裝編譯比較坑,這裡需要注意一下,目前最新的版本oozie的最新版本是4.2.0,但是依賴的
hive只支援0.13.1
hbase支援到0.94.2
spark,hadoop,pig均可支援當然最新版本
而且pom檔案裡面用到的codehash映象已經失效,如果不去掉,則會編譯失敗:
Java程式碼
- <repository>
- <id>Codehaus repository</id>
- <url>http://repository.codehaus.org/</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
(二) 安裝oozie
1,下載oozie
wget http://archive.apache.org/dist/oozie/4.2.0/oozie-4.2.0.tar.gz
2,解壓至某個碟符,修改其根目錄下的pom檔案裡面的pig(載入類是h2,代表hadoop2.x),hadoop,hbase,hive,spark等版本,hbase和hive使用最新的可能會編譯失敗,這一點需要注意,經測試hbase0.94.2和hive0.13.1可正常編譯通過,
3,修改完畢後,執行編譯
bin/mkdistro.sh -P hadoop-2 -DskipTests
或
mvn clean package assembly:single -P hadoop-2 -DskipTests
4,執行成功後,拷貝oozie-4.2.0/distro/target/oozie-4.2.0-distro.tar.gz 至安裝目錄,
具體請參考我的這篇文章:
(三)在hue裡面測試pig指令碼:
寫一個簡單的pig指令碼:
點選執行,發現oozie會啟動兩個任務,一個是launcher,一個pig指令碼,lancher任務一直卡著95%進度,不再有任何變化,而主體的pig指令碼,則一直在初始化階段,不能被執行,看日誌log無任何錯誤,就是一直列印
Heart beat
Heart beat
Heart beat
......
經過查資料,發現在叢集小的時候,如果叢集資源不充足,導致RM無法分配多個MR的資源,就會一直等待,然後整個任務就會處於假死狀態,一直死鎖不執行,其實就是多個MR任務,搶佔資源,導致最後誰也執行不了造成的,如何解決?
方案一:
切換haodop叢集預設使用的容量排程器為公平排程器,允許當前佇列最多隻能執行一個MR任務,多了就阻塞等待。
方案二:
切換haodop叢集預設使用的容量排程器為公平排程器,建立多個佇列把任務提交到不同的佇列裡面,避免資源搶佔
Xml程式碼
- <property>
- <name>yarn.resourcemanager.scheduler.class</name>
- <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
- </property>
- <property>
- <name>yarn.scheduler.fair.allocation.file</name>
- <value>file:/%HADOOP_HOME%/etc/hadoop/fair-scheduler.xml</value>
- lt;/property>
fair-scheduler.xml配置:
Xml程式碼
- <?xml version="1.0"?>
- <allocations>
- <queue name="test">
- <minResources>1000 mb, 1 vcores</minResources>
- <maxResources>5000 mb, 1 vcores</maxResources>
- <maxRunningApps>1</maxRunningApps>
- <aclSubmitApps>webmaster</aclSubmitApps>
- <weight>2.0</weight>
- <schedulingPolicy>fair</schedulingPolicy>
- <queue name="test-sub">
- <aclSubmitApps>webmaster</aclSubmitApps>
- <minResources>500 mb, 1 vcores</minResources>
- </queue>
- </queue>
- <user name="root">
- <maxRunningApps>1</maxRunningApps>
- </user>
- <user name="webmaster">
- <maxRunningApps>1</maxRunningApps>
- </user>
- <!--
- <user name="gpadmin">
- <maxRunningApps>5</maxRunningApps>
- </user>-->
- <userMaxAppsDefault>1</userMaxAppsDefault>
- <fairSharePreemptionTimeout>30</fairSharePreemptionTimeout>
- </allocations>
關於hadoop的資源排程,請參考下面
影音先鋒電影http://www.iskdy.com/
修改完成後同步分發所有的hadoop節點,並拷貝一份到oozie/conf/hadoop-conf/下面一份,重啟hadoop叢集和oozie服務,再次執行指令碼,發現執行沒有問題:
如果還想配置,solr,hbase,只要在hue.ini裡面配置即可,注意hbase的服務,需要啟動hbase的thrift端口才行,
bin/hbase-daemon.sh start thrift
然後在hue.ini裡面配置: hbase_clusters=(Cluster|h1:9090),必須是這種格式,否則hue不會識別
配置solr比較簡單,支援寫上solr的url即可:
掃碼關注微信公眾號:我是攻城師(woshigcs),我們一起學習,進步和交流!(woshigcs)
本公眾號的內容是有關搜尋和大資料技術和網際網路等方面內容的分享,也是一個溫馨的技術互動交流的小家園,有什麼問題隨時都可以留言,歡迎大家來訪!