spark常見錯誤彙總
原文地址:https://my.oschina.net/tearsky/blog/629201
摘要:
1、Operation category READ is not supported in state standby
2、配置spark.deploy.recoveryMode選項為ZOOKEEPER
3、多Master如何配置
4、No Space Left on the device(Shuffle臨時檔案過多)
5、java.lang.OutOfMemory, unable to create new native thread
6、Worker節點中的work目錄佔用許多磁碟空間
7、spark-shell提交Spark Application如何解決依賴庫
8、Spark在釋出應用的時候,出現連線不上master問題
9、開發spark應用程式(和Flume-NG結合時)釋出應用時可能出現org.jboss.netty.channel.ChannelException:Failedtobindto:/192.168.10.156:18800
10、spark-shell找不到hadoop so問題解決
11、ERROR XSDB6: Another instance of Derby may have already booted the database /home/bdata/data/metastore_db.
12、java.lang.IllegalArgumentException: java.net.UnknownHostException: dfscluster
13、Exception in thread "main" java.lang.Exception: When running with master 'yarn-client' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.
14、Job aborted due to stage failure: Task 3 in stage 0.0 failed 4 times, most recent failure: Lost task 3.3 in
15、長時間等待無反應,並且看到伺服器上面的web介面有記憶體和核心數,但是沒有分配
16、記憶體不足或資料傾斜導致Executor Lost(spark-submit提交)
17、java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.(spark sql on hive 任務引發HiveContextNullPointerException)
18、The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx------
19、Exception in thread "main"org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/data":bdata:supergroup:drwxr-xr-x
20、執行Spark-SQL報錯:org.apache.spark.sql.AnalysisException: unresolved operator 'Project‘
21、org.apache.spark.shuffle.MetadataFetchFailedException:Missingan output locationfor shuffle0/Failed to connect to hostname/192.168.xx.xxx:50268
22、spark error already tried 45 time(s); maxRetries=45
23.cloudera 更改spark高階配置
24、spark Exception in thread "Thread-2" java.lang.OutOfMemoryError: PermGen space
注意:如果Driver寫好了程式碼,eclipse或者程式上傳後,沒有開始處理資料,或者快速結束任務,也沒有在控制檯中列印錯誤,那麼請進入spark的web頁面,檢視一下你的任務,找到每個分割槽日誌的stderr,檢視是否有錯誤,一般情況下一旦驅動提交了,報錯的情況只能在任務日誌裡面檢視是否有錯誤情況了
1、Operation category READ is not supported in state standby
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException):Operation category READ is not supported in state standby
此時請登入Hadoop的管理介面檢視執行節點是否處於standby
如登入地址是:
http://192.168.50.221:50070/dfshealth.html#tab-overview
如果是,則不可在處於StandBy機器執行spark計算,因為該臺機器為備分機器
2、配置spark.deploy.recoveryMode選項為ZOOKEEPER
如果不設定spark.deploy.recoveryMode的話,那麼叢集的所有執行資料在Master重啟是都會丟失,可參考BlackHolePersistenceEngine的實現。
3、多Master如何配置
因為涉及到多個Master,所以對於應用程式的提交就有了一點變化,因為應用程式需要知道當前的Master的IP地址和埠。這種HA方案處理這種情況很簡單,只需要在SparkContext指向一個Master列表就可以了,如spark://host1:port1,host2:port2,host3:port3,應用程式會輪詢列表。
4、No Space Left on the device(Shuffle臨時檔案過多)
由於Spark在計算的時候會將中間結果儲存到/tmp目錄,而目前linux又都支援tmpfs,其實就是將/tmp目錄掛載到記憶體當中。
那麼這裡就存在一個問題,中間結果過多導致/tmp目錄寫滿而出現如下錯誤
No Space Left on the device
解決辦法
第一種:修改配置檔案spark-env.sh,把臨時檔案引入到一個自定義的目錄中去即可
export SPARK_LOCAL_DIRS=/home/utoken/datadir/spark/tmp
第二種:偷懶方式,針對tmp目錄不啟用tmpfs,直接修改/etc/fstab
cloudera manager新增引數配置:篩選器=>高階=>搜尋“spark_env”字樣,新增引數export SPARK_LOCAL_DIRS=/home/utoken/datadir/spark/tmp到所有配置項
5、java.lang.OutOfMemory, unable to create new native thread
Caused by: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:640)
上面這段錯誤提示的本質是Linux作業系統無法建立更多程序,導致出錯,並不是系統的記憶體不足。因此要解決這個問題需要修改Linux允許建立更多的程序,就需要修改Linux最大程序數。
[utoken@nn1 ~]$ulimit -a
臨時修改允許開啟的最大程序數
[utoken@nn1 ~]$ulimit -u 65535
臨時修改允許開啟的檔案控制代碼
[utoken@nn1 ~]$ulimit -n 65535
永久修改Linux最大程序數量
[utoken@nn1 ~]$ vim /etc/security/limits.d/90-nproc.conf
* soft nproc 60000
root soft nproc unlimited
永久修改使用者開啟檔案的最大控制代碼數,該值預設1024,一般都會不夠,常見錯誤就是not open file
[utoken@nn1 ~]$ vim /etc/security/limits.conf
bdata soft nofile 65536
bdata hard nofile 65536
6、Worker節點中的work目錄佔用許多磁碟空間
目錄地址:/home/utoken/software/spark-1.3.0-bin-hadoop2.4/work
這些是Driver上傳到worker的檔案,需要定時做手工清理,否則會佔用許多磁碟空間
7、spark-shell提交Spark Application如何解決依賴庫
spark-shell的話,利用--driver-class-path選項來指定所依賴的jar檔案,注意的是--driver-class-path後如果需要跟著多個jar檔案的話,jar檔案之間使用冒號(:)來分割。
8、Spark在釋出應用的時候,出現連線不上master問題,如下
15/11/19 11:35:50 INFO AppClient$ClientEndpoint: Connecting to master spark://s1:7077...
15/11/19 11:35:50 WARN ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkMaster@s1:7077] has failed, address is now gated for [5000] ms. Reason: [Disassociated]
解決方式
檢查所有機器時間是否一致、hosts是否都配置了對映、客戶端和伺服器端的Scala版本是否一致、Scala版本是否和Spark相容
檢查是否相容問題請參考官方網站介紹:
9、開發spark應用程式(和Flume-NG結合時)釋出應用時可能出現org.jboss.netty.channel.ChannelException:Failedtobindto:/192.168.10.156:18800
15/11/2710:33:44ERRORReceiverSupervisorImpl:Stoppedreceiverwitherror:org.jboss.netty.channel.ChannelException:Failedtobindto:/192.168.10.156:18800
15/11/2710:33:44ERRORExecutor:Exceptionintask0.0instage2.0(TID70)
org.jboss.netty.channel.ChannelException:Failedtobindto:/192.168.10.156:18800
atorg.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:272)
Causedby:java.net.BindException:Cannotassignrequestedaddress
由於spark通過Master釋出的時候,會自動選取傳送到某一臺的worker節點上,所以這裡繫結埠的時候,需要選擇相應的worker伺服器,但是由於我們無法事先了解到,spark釋出到哪一臺伺服器的,所以這裡啟動報錯,是因為在192.168.10.156:18800的機器上面沒有啟動Driver程式,而是釋出到了其他伺服器去啟動了,所以無法監聽到該機器出現問題,所以我們需要設定spark分發包時,釋出到所有worker節點機器,或者釋出後,我們去尋找釋出到了哪一臺機器,重新修改繫結IP,重新發布,有一定機率釋出成功。詳情可見《印象筆記-戰5渣系列——Spark Streaming啟動問題 - 推酷》
10、spark-shell找不到hadoop so問題解決
[main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在Spark的conf目錄下,修改spark-env.sh檔案,加入LD_LIBRARY_PATH環境變數,值為HADOOP的native庫路徑即可.
11、ERROR XSDB6: Another instance of Derby may have already booted the database /home/bdata/data/metastore_db.
在使用Hive on Spark模式操作hive裡面的資料時,報以上錯誤,原因是因為HIVE採用了derby這個內嵌資料庫作為資料庫,它不支援多使用者同時訪問,解決辦法就是把derby資料庫換成mysql資料庫即可
變更方式
12、java.lang.IllegalArgumentException: java.net.UnknownHostException: dfscluster
解決辦法:
找不到hdfs叢集名字dfscluster,這個檔案在HADOOP的etc/hadoop下面,有個檔案hdfs-site.xml,複製到Spark的conf下,重啟即可
如:執行指令碼,分發到所有的Spark叢集機器中,
[bdata@bdata4 hadoop]