Hadoop運維記錄系列(十七)

上個月經過email,幫朋友的朋友解決了一個Cloudera的Spark-SQL沒法訪問HBase作數據分析的問題,記錄一下。
sql


首先,對方已經作好了Hive訪問HBase,因此spark-sql原則上能夠經過調用Hive的元數據來訪問Hbase。可是執行極慢,並且日誌無報錯。中間都是郵件溝通,先問了幾個問題,是否啓用了Kerberos,是否Hive訪問Hbase正常,HBase shell訪問數據是否正常等等,回答說沒有用Kerberos,Hive訪問Hbase正常,spark-sql讀取Hive元數據也正常,Hbase shell也正常,就是spark-sql跑不了。shell


其次,對方有兩套環境,實驗室環境能夠跑,可是生產環境不能跑,而後實驗室和生產環境版本和各類xml配置都徹底同樣,因此實在找不到不能跑的緣由了。apache


前期看日誌,因爲沒有任何WARN或ERROR,因此很難排查,初步推斷是因爲配置錯誤形成的,可是哪裏配置錯誤,由於都是郵件,沒法肯定。後來對方又發過來一個日誌,說約3小時後報錯,顯示以下。bash

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版的,都是預先就已經作好兼容性了,因此能夠排除因兼容性問題致使的沒法訪問,那麼只能有一個緣由就是配置錯誤。ide


接着對比了一下實驗室環境和生產環境的spark啓動日誌,發現兩邊所加載的jar包不一致,推斷是spark-env或者是hbase-env配置有出入致使的,將這一推斷告知對方,並建議將hbase/lib/*和hbase-site.xml等文件寫入到spark的SPARK_DIST_CLASSPATH中。因而對方將hbase/lib和/etc/hbase/conf路徑添加到SPARK_DIST_CLASSPATH中,問題解決。oop


這個排錯是個特別小的問題,可是本着可能會對他人有幫助,同時本身別忘了的原則,仍是記錄一下。spa

相關文章
相關標籤/搜索