Caused by: java.lang.AbstractMethodError: spark.WordCount$1.call(Ljava/lang/Object;)Ljava/lang/Iterable;
Spark編譯版本與運行環境的版本不一致導致
CHDspark1.6升級2.1
1、下載csd安裝包(注意版本及校驗文件一致)
http://archive.cloudera.com/spark2/csd/
2、下載parcels包
http://archive.cloudera.com/spark2/parcels/2.1.0.cloudera1/
3、開始安裝,集羣可以停也可以不停
上傳csd包到集羣所有機器的/opt/cloudera/csd下,如果沒有,就新建;如果有其他安裝包,可以刪掉
# cd /opt/cloudera/csd #目錄下修改文件權限
# chown cloudera-scm:cloudera-scm SPARK2_ON_YARN-2.1.0.cloudera2.jar
# chmod 644 SPARK2_ON_YARN-2.1.0.cloudera2.jar
4、上傳parcel包到主節點機器(master)的/opt/cloudera/parcel-repo下,該目錄下的其他安裝包不可刪除!一般都會有manifest.json,把它改名備份即可。用剛下載的替代,然後SPARK2-2.1.0.cloudera2-1.cdh5.7.0.p0.171658-el7.parcel.sha1一定記得改爲SPARK2-2.1.0.cloudera2-1.cdh5.7.0.p0.171658-el7.parcel.sha
5、在主節點執行重啓命令
# service cloudera-scm-agent restart
# service cloudera-scm-server restart
6、CM主節點啓動後,點擊主機->Parcel頁面,就會有spark2的選項。選擇後點擊分配,等待分配完成後激活
7、如果報一下配置問題,是Jdk版本與快捷方式,這裏簡要說明記錄一下
8、添加spark2服務
此時再看,就會顯示2.1.0
======================啓動配置分割線================================
Spark2的啓動問題:
此時可能啓動會有問題,需要配置相應的環境變量以及依賴關係,大家通過spark2-env.sh文件也能看到依賴的classpath文件的jar包。
# cd /etc/spark2/conf.cloudera.spark2_on_yarn 把classpath文件複製
/opt/cloudera/parcels/SPARK2-2.1.0.cloudera2-1.cdh5.7.0.p0.171658/etc/spark2/conf.dist 目錄下
# cp /etc/spark2/conf.cloudera.spark2_on_yarn/classpath.txt /opt/cloudera/parcels/SPARK2-2.1.0.cloudera2-1.cdh5.7.0.p0.171658/etc/spark2/conf.dist
然後通過spark2-shell啓動
再次執行提交的jar包,
至此,CDH spark1.6 升級爲spark2.1 成功!
====================華麗的補充,spark操作數據庫時的依賴包問題=============
Exception in thread "main" java.sql.SQLException: No suitabledriver
方法1: 修改spark-env.sh 配置環境變量的jar包路徑,根據實際數據庫配,我這裏是oracle的
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/usr/java/ojdbc7.jar
此時再次執行時就可以看到(可以順利運行,警告信息是說過時方式)
方法2: 上面記得應該是把路徑配置文件複製到
/opt/cloudera/parcels/SPARK2-2.1.0.cloudera2-1.cdh5.7.0.p0.171658/etc/spark2/conf.dist 下的
裏面的classpath.txt配置的文件,看加載的信息我們也知道會加載裏面的jar包,在裏面配置也可以(需要注意的是默認路徑,不要隨便放。在classpath.txt裏面有的路徑下放置)
把需要的jar包複製到/opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/jars/ 目錄下並修改 classpath.txt文件
/opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/jars/ojdbc7.jar
在末尾加上jar包路徑即可
這時候執行也沒有警告信息。如果大家仔細看加載的類包就可以看到我們的驅動加進來了的
方法3: 最後一個,就是大傢什麼配置都沒有改,那只有改shell腳本了
這樣配置執行也是沒有警告信息的。
注意:沒事做也不要都設置,2和3同時配置沒問題,但是1和3同時配置就會報錯Found bothspark.driver.extraClassPath and SPARK_CLASSPATH. Use only the former.。這裏也可以看出1的方式是過時的了。
最後,如果spark提交運行的方式是整改集羣,當然jar也要分發到集羣的每一臺機器
好了,關於CDH spark1.6升級爲spark2.1,以及spark2.1的一些配置和依賴包的添加配置都說完了。正式開啓spark2.1的應用吧