spark-shell啟動spark報錯


前言

  離線安裝好CDH、Coudera Manager之后,通過Coudera Manager安裝所有自帶的應用,包括hdfs、hive、yarn、spark、hbase等應用,過程很是波折,此處就不抱怨了,直接進入主題。

描述

  在安裝有spark的節點上,通過spark-shell啟動spark,滿懷期待的啟動spark,but,來了個晴天霹靂,報錯了,報錯了!錯誤信息如下:

18/06/11 17:40:27 ERROR spark.SparkContext: Error initializing SparkContext.
java.lang.IllegalArgumentException: Required executor memory (1024+384 MB) is above the max threshold (1024 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
    at org.apache.spark.deploy.yarn.Client.verifyClusterResources(Client.scala:281)
    at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:140)
    at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:57)
    at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:158)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:538)
    at org.apache.spark.repl.SparkILoop.createSparkContext(SparkILoop.scala:1022)
    at $line3.$read$$iwC$$iwC.<init>(<console>:15)
    at $line3.$read$$iwC.<init>(<console>:25)
    at $line3.$read.<init>(<console>:27)
    at $line3.$read$.<init>(<console>:31)
    at $line3.$read$.<clinit>(<console>)
    at $line3.$eval$.<init>(<console>:7)
    at $line3.$eval$.<clinit>(<console>)
    at $line3.$eval.$print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:1045)
    at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1326)
    at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:821)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:852)
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:800)
    at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:857)
....................后面還有很多錯誤信息
spark啟動錯誤提示1

     仔細查看錯誤信息之后發現,原來是yarn配置的內存不夠,spark啟動需要1024+384 MB的內存,但是我的yarn配置僅有1024 MB,不夠滿足spark啟動要求,所以拋出異常,關鍵錯誤信息如下圖所示:

解決方法

  登錄Cloudera Manager,找到YARN (MR2 Included),點擊進如(不要在意我的集群有那么多警告和報錯,解決spark問題是關鍵),如下圖所示:

  在導航欄找到 配置 選項,如下圖所示:

  點擊進入 配置 頁面,在搜索欄中輸入yarn.scheduler.maximum-allocation-mb,如下圖所示:

   可以看到,該配置參數的值正如spark啟動時拋出的異常所示,為1GB,將其修改為2GB即可,點擊保存更改,如下圖所示:

   按照上述的步驟,繼續修改yarn.nodemanager.resource.memory-mb 參數的值為2GB,如下圖所示,點擊保存更改,重啟yarn使設置生效。

   返回到spark節點命令行里面執行spark-shell命令,奇怪,仍然報錯,但錯誤為其他,不再是上面的錯誤,錯誤信息為

18/06/11 17:46:46 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:279)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:260)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:240)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:162)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:152)
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:3530)
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:3513)
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:3495)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:6649)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:4420)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInt(FSNamesystem.java:4390)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:4363)
...........................后面還有很多不重要的
spark啟動報錯2

  關鍵錯誤信息如下圖所示:

   原因是啟動spark的用戶權限不夠,我是使用root命令啟動spark,需要hdfs用戶啟動spark(注:hdfs是hadoop的超級用戶),所以報錯,切換到hdfs用戶下,再次啟動是spark,成功。

 

 

補充

  yarn.scheduler.maximum-allocation-mb 參數的作用:該參數在yarn-site.xml配置文件中配置,設置yarn容器的最大分配內存,以MB為單位,如果yarn資源管理器(RM/ResourceManager)中的容器請求的資源大於此處設置的值,就會拋出無效資源請求異常(InvalidResourceRequestException)。
  yarn.nodemanager.resource.memory-mb參數的作用:該參數在yarn-site.xml配置文件中配置,設置yarn節點上可用的物理內存,默認大小為8192(MB),該內存可用於分配給yarn容器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM