Hadoop运维记录系列(十七)
上個月通過email,幫朋友的朋友解決了一個Cloudera的Spark-SQL無法訪問HBase做數據分析的問題,記錄一下。
首先,對方已經做好了Hive訪問HBase,所以spark-sql原則上可以通過調用Hive的元數據來訪問Hbase。但是執行極慢,而且日志無報錯。中間都是郵件溝通,先問了幾個問題,是否啟用了Kerberos,是否Hive訪問Hbase正常,HBase shell訪問數據是否正常等等,回答說沒有用Kerberos,Hive訪問Hbase正常,spark-sql讀取Hive元數據也正常,Hbase shell也正常,就是spark-sql跑不了。
其次,對方有兩套環境,實驗室環境可以跑,但是生產環境不能跑,然后實驗室和生產環境版本和各種xml配置都完全一樣,所以實在找不到不能跑的原因了。
前期看日志,由于沒有任何WARN或ERROR,所以很難排查,初步推斷是由于配置錯誤造成的,但是哪里配置錯誤,因為都是郵件,無法確定。后來對方又發過來一個日志,說約3小時后報錯,顯示如下。
Job?aborted?due?to?stage?failure:?Task?0?in?stage?0.0?failed?4?times,?most?recent?failure:?Lost?task?0.3?in?stage?0.0?(TID?3,?BData-h2):?org.apache.hadoop.hbase.client.NoServerForRegionException:?Unable?to?find?region?for?in?xxxxxxxx?after?35?tries.spark界面中的這段報錯證明了確實是配置錯誤的這個推斷,這個報錯通常是由于Spark無法通過API訪問Hbase的Region造成的。那么,如果是cloudera版的,都是預先就已經做好兼容性了,所以可以排除因兼容性問題導致的無法訪問,那么只能有一個原因就是配置錯誤。
接著對比了一下實驗室環境和生產環境的spark啟動日志,發現兩邊所加載的jar包不一致,推斷是spark-env或者是hbase-env配置有出入導致的,將這一推斷告知對方,并建議將hbase/lib/*和hbase-site.xml等文件寫入到spark的SPARK_DIST_CLASSPATH中。于是對方將hbase/lib和/etc/hbase/conf路徑添加到SPARK_DIST_CLASSPATH中,問題解決。
這個排錯是個特別小的問題,但是本著可能會對他人有幫助,同時自己別忘了的原則,還是記錄一下。
總結
以上是生活随笔為你收集整理的Hadoop运维记录系列(十七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 装了Ubuntu后将默认启动项修改为wi
- 下一篇: 星际战甲仲裁是什么