大數據開發的測試環境,不少人不覺得然,其實重複的打包,上傳,測試雖然每次時間大概也就幾分鐘,可是積累起了每每會花費不少的時間,可是一個完整的測試環境在生產環境下每每難造成閉環,拋開堡壘機權限不說,hadoop,hive,spark等服務端的權限也會難倒一羣英雄好漢,主要是太繁瑣了,測試環境的搭建,我這裏採用Docker容器,適合多端遷移,並且容器的鏡像大小也比虛擬機小不少,難度上說,也只須要掌握幾個基礎的命令便可,除非想引入K8s等技術,但測試環境徹底不必,Docker環境搭建大數據平臺的系列從這裏大數據開發-Docker-使用Docker10分鐘快速搭建大數據環境,Hadoop、Hive、Spark、Hue、Kafka、ElasticSearch.....[https://blog.csdn.net/hu_lichao/article/details/112125800](https://blog.csdn.net/hu_lichao/article/details/112125800)
,環境搭建好了,可能仍是會有一些特殊的問題java
在Win操做系統,idea下開發hadoop程序或者Spark程序,那麼你確定會遇到下面的問題apache
之因此出現上面的問題,Spark程序和Hadoop在idea寫編寫的程序是依賴hadoop的環境的,因此要提早配置好,而且設定HADOOP_HOME
,不必定須要$HADOOP_HOME/bin
到PATH
,後者是給快捷方式用的閉包
注意:配置完環境變量後要將idea,退出後重進,不能Restart
ide
錯誤以下圖oop
出現這個問題的緣由是版本衝突,即便看起來不那麼明顯,多是spark依賴的包中的hadoop和hadoop依賴的版本不一致https://stackoverflow.com/questions/45470320/what-is-the-kerberos-method,具體不一致的問題,可能各有不一樣,解決難易程度因人而異😁😁😁,個人解決方式就是exclude
掉spark
的低版本hadoop
測試
這個問題,我是這麼遇到的,以下程序:大數據
// results.foreach(System.out::println); //輸出沒有序列化 results.foreach(x -> System.out.println(x));
首先foreach
是action算子,須要將task上的數據拉到driver上來遍歷顯示,就須要序列化,若是習慣了Java的lambda寫法,可能會寫第一種,第一種寫法的問題是沒有序列化,序列化是在閉包裏完成的,而使用靜態方法調用的方式,沒有閉包化,因此會報序列化的問題,寫成第二種就能夠了,System.out是一個final static
對象。人工智能
public final static PrintStream out = null;
吳邪,小三爺,混跡於後臺,大數據,人工智能領域的小菜鳥。
更多請關注
idea