問題1:scala版本不一致導(dǎo)致報錯 (java.lang.ClassNotFoundException: scala.Serializable)
????解決辦法:
? ? ? 1. 通過spark-shell查看遠(yuǎn)程spark依賴的scala版本:(圖-1.1)

2. 在本地maven項目中添加對應(yīng)版本的依賴:(圖-1.2)

3.pom中的scala版本也保持一致?(圖-1.3)

問題2:無法連接遠(yuǎn)程spark
解決辦法:
? ? ? 1. SparkConf配置master為遠(yuǎn)程地址?(圖-2.1)

2.從遠(yuǎn)程服務(wù)器上拷貝hive-site.xml到項目resources目錄下(圖-2.2)

3. 修改hive-site.xml中的配置,把metastore相關(guān)的配置改為遠(yuǎn)端配置?(圖-2.3)

問題3:沒有權(quán)限訪問hdfs
解決辦法:
1.?指定HADOOP_USER_NAME為hadoop的啟動用戶,參見 (圖-2.1)代碼
2. 在遠(yuǎn)端使用?hdfs dfs -chmod -R 777 /xxx 修改hdfs訪問權(quán)限
問題4:運行報錯:protocol message end-group tag did not match expected tag
解決辦法:
1. 遠(yuǎn)端執(zhí)行:hdfs getconf -confKey fs.default.name 結(jié)果如圖(圖-4.1)

2. 查看第一步返回的結(jié)果和本地hive-seite.xml中的端口是否一致,有的用戶使用的是8020,如果不一致,修改為何第一步的一致的端口
3.參見 (圖-2.1)代碼,如果遠(yuǎn)端使用了hostname配置的hadoop集群,本地電腦設(shè)置/etc/host,
比如:172.100.200.76 hadoop01
然后把配置的遠(yuǎn)端地址172.100.200.76替換成 hadoop01,如圖(圖-2.1)代碼把spark地址也使用hostname
問題5:遠(yuǎn)端使用hive查詢正常,但是本地spark-sql返回?zé)o結(jié)果
? ??解決辦法:
? ?1. 可能是hive表創(chuàng)建的時候指定的格式問題,比如我的日志表用的jsonDer,關(guān)閉spark的convertMetastoreParquet和convertMetastoreOrc (圖-5.1)

問題6:運行報異常,內(nèi)存溢出或者越界之類的信息
解決辦法:
1.在遠(yuǎn)端spark的conf目錄下分別配置spark-defaults.conf和spark-env.sh
? ? ? ?spark -defaults.conf :? ?spark.driver.memory? ? ? ? ? ? ? 4g
? ? ? ?spark-env.sh :?SPARK_EXECUTOR_MEMORY=4G
2. 代碼中指定內(nèi)存?spark.executor.memory 參見圖 (圖-5.1)
其他注意點:
1.jdk版本問題,可以在pom中和scala_compiler.xml(位置在.idea目錄下)中指定target:jvm-1.8
2.遠(yuǎn)端hadoop全家桶和spark啟動最好是用同一個用戶,比如筆者是用的hadoop
3.運行報錯:Unable to create log directory /xxx/xxx/xx/${user.name},筆者開始還以為是hdfs權(quán)限問題,因為報錯路徑和hdfs的路徑一致,但是hdfs設(shè)置777依然報錯,實際上是本地?zé)o法創(chuàng)建這個目錄(筆者mac系統(tǒng)),自己手動創(chuàng)建這個目錄并給予寫權(quán)限就可以了
4.依賴版本一定要和系統(tǒng)的環(huán)境版本注意保持一致,依賴從maven倉庫中能搜到各種版本,
5.本地開發(fā)完成后,maven打包成jar包,上傳到遠(yuǎn)端服務(wù)器,運行命令:
spark-submit --master yarn --class sparkKafka.App? /home/hadoop/sparkKafka01-1.0.jar
最后附上筆者最后的調(diào)試結(jié)果,執(zhí)行sparksql從hive數(shù)據(jù)倉中撈出日志數(shù)據(jù),如圖(圖-6.1),看到你,整個世界瞬間變美好了,哈哈哈
