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地址。