1. 程式人生 > >Spark和hbase整合遇到的一些問題

Spark和hbase整合遇到的一些問題

1.Spark計算都轉移到了一個節點上,即只有一個節點在計算。

     搭建好的spark叢集,進行計算的時候發現,所有的slave節點上的task生成後,快速退出,並且生成好多task。檢視spark ui上發現,只有主節點上有正常task執行,其他的slave節點都沒有分到相應的task。如下所示:

主要是找到錯誤日誌,主節點上的work目錄下沒有錯誤輸出,然後找到slave節點下的work目錄下,找到相應的app目錄下,的staerr檔案,發現slave節點一直在報錯,是與主節點的netty通訊異常,結合之前的經驗,發現可能是jar包衝突。進入到spark的SPARK_CLASSPATH目錄下,發現有兩個netty相關的jar包。去掉一個之後,再執行,發現可以正常分發task了。

2.spark讀取hbase資料,regionserver總是莫名其妙的掛掉,並出現以下異常:

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): No lease on /hbase/oldWALs/h2%2C16020%2C1536546484765..meta.1537221095269.meta (inode 4464431): File is not open for writing. Holder DFSClient_NONMAPREDUCE_-162643062_1 does not have any open files.

Detected pause in JVM or host machine (eg GC): pause of approximately 2511ms

網上有的說有下面解決方案:

# vim /etc/security/limits.conf

* soft nofile 65535

* hard nofile 65535

hdfs-site.xml新增或者修改引數

dfs.datanode.max.xcievers值修改為8192(之前為4096)

還有這個:

清空HDFS上的.trash垃圾資料:hadoop fs –expunge

但是發現都不太適應這個問題,後來發現,是我在計算時, sparkMemory這個引數調的太大了(16G),導致gc時間太長,造成假死狀態,調小就好了,regionserver也不掛了。

3.spark報連結zookeeper異常:

Initiating client connection, connectString=localhost:2181 sessionTimeout=90000

發現連結zk異常,配置檔案也正常,為什麼回去找本地zk?那是因為他沒有找到要去哪裡找zk,因為是hbase和spark互動,spark讀取自己的conf目錄下,並沒有找到相應的zk地址,所以就預設本地zk,呢肯定是不對的。需要將hbase的hbase-site.xml檔案複製到spark的conf目錄下,然後spark回去讀取這個檔案,從而得到zk地址。