1.java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
描述: 出現(xiàn)這個問題并不妨礙程序繼續(xù)運行。
原因: HiveContext的創(chuàng)建依賴于本地的hadoop庫壁榕。
解決:
這邊的null其實是環(huán)境變量HADOOP_HOME矩屁,也就是依賴于HADOOP_HOME/bin/winutils.exe
這個文件。
可以參考: https://blog.csdn.net/love666666shen/article/details/78812622
2.Task is not serializable.
任務(wù)不可序列化鳄袍。
原因: 一般是隨意使用Function外的變量展鸡,例如JavaSparkContext等又碌。因為完整main的代碼在Driver中執(zhí)行,而計算分片代碼在Spark的worker節(jié)點執(zhí)行尉咕,因此最好只保證算子數(shù)據(jù)的傳遞只有RDD或者DStream.
3.HiveContext報空指針
在Windows本地調(diào)試叠蝇,用HiveContext報空指針。
這個問題就需要本地的一個測試工具winutils.exe龙考。
因此 問題3 == 問題1.具體問題可以參照問題1解決蟆肆。
參考: https://blog.csdn.net/u011817217/article/details/86593706
如果出現(xiàn)按以上方法依然無法解決或者還存在其他問題矾睦,可以直接把hive-site.xml扔到resources目錄,訪問虛擬機中的hive.
4.ROW_NUMBER() OVER ( PARTITION BY ... ORDER BY ... )
select province,aid,clickCount from (select
date,province,aid,clickCount,ROW_NUMBER() OVER (
PARTITION BY province ORDER BY click_count DESC) as rank
from tmp_date_city_aid_clickCount ) as twhere rank <= 10
原因:
https://www.e-learn.cn/content/wangluowenzhang/422390
Spark >= 2.0 時,HiveContext/SQLContext都支持窗口操作。
Spark <= 1.6 時,只有HiveContext 支持窗口操作蛇损。
解決:
我使用的版本為1.6赁温,SQLContext,因此導(dǎo)致了這個問題淤齐。因此必須使用HiveContext方能夠解決股囊。
5.SQLContext注冊臨時表的目錄無法刪除
ERROR ShutdownHookManager: Exception while deleting Spark temp dir
這是個BUG: [SPAKR-8333] HiveContext創(chuàng)建的臨時目錄無法刪除「模可見任何軟件都有一定的問題和缺陷稚疹,需要我們不斷完善,為世界代碼業(yè)做貢獻祭务。
https://issues.apache.org/jira/browse/SPARK-8333?attachmentSortBy=dateTime
6.HiveContext : java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: ---------
當(dāng)指定hive-site.xml時内狗,會使用線上的HDFS集群存儲本臨時文件,因此需要在resource下放入hdfs的配置文件义锥,還需要將hadoop上/tmp/hive/目錄創(chuàng)建并賦好權(quán)限柳沙。
7.部署問題 Exception in thread "main" java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package
原因: javax.servlet.FilterRegistration 在多個包中重復(fù)產(chǎn)生,導(dǎo)致沖突拌倍。
一般為這個依賴所致:
<!-- hadoop相關(guān) -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.4.1</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
解決就是加上如上的:
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
8.HiveContext連接元數(shù)據(jù)庫mysql時連接數(shù)過多的問題赂鲤,我測試了一下,發(fā)現(xiàn)在DStream的Function中使用DataFrame進行sql查詢時候柱恤,不斷產(chǎn)生于hive元數(shù)據(jù)所在的mysql的連接数初。導(dǎo)致拋出“too many connections"異常。
看來默認的mysql的最大連接數(shù)max_connections=150,我修改/etc/my.cnf中max_connections為1000.觀察這種連接上漲是否有上限膨更。
重啟mysqld: