2016-05-03 10 views
3

私はsparkとscalaの新人です.YARNクライアントとしてSparkの仕事を提出するのは苦労しています。 (火花提出)スパークシェル経由でこれを行うと、同じ問題ありませんのために行く:eclipseからscalaを使用した糸クライアントへのsparkジョブの送信

しかしEclipseを使用して
spark-submit --class ebicus.WordCount /u01/stage/mvn_test-0.0.1.jar 

:最初のように、瓶にそれをコンパイルし、火花がカーネルシェル経由で提出する使用、その後日食にスパークジョブを作成します直接コンパイルしてYARNに提出するのは難しいようです。

プロジェクトの設定は次のとおりです。クラスタでCDH cloudera 5.6が実行されています。私は次のようにMy classpath/which is in sinc with my pom.xml

私のコードは、スカラ座を使用して、Mavenプロジェクトを持っている:

package test 

import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.apache.hadoop.conf.Configuration; 
import org.apache.spark.deploy.yarn.Client; 
import org.apache.spark.TaskContext; 
import akka.actor 
import org.apache.spark.deploy.yarn.ClientArguments 
import org.apache.spark.deploy.ClientArguments 

object WordCount { 

    def main(args: Array[String]): Unit = { 
// val workaround = new File("."); 
    System.getProperties().put("hadoop.home.dir", "c:\\winutil\\"); 
    System.setProperty("SPARK_YARN_MODE", "true"); 

    val conf = new SparkConf() 
     .setAppName("WordCount") 
     .setMaster("yarn-client") 
     .set("spark.hadoop.fs.defaultFS", "hdfs://namecluster.com:8020/user/username") 
     .set("spark.hadoop.dfs.nameservices", "namecluster.com:8020") 
     .set("spark.hadoop.yarn.resourcemanager.hostname", "namecluster.com") 
     .set("spark.hadoop.yarn.resourcemanager.address", "namecluster:8032") 
     .set("spark.hadoop.yarn.application.classpath", 
       "/etc/hadoop/conf," 
      +"/usr/lib/hadoop/*," 
      +"/usr/lib/hadoop/lib/*," 
      +"/usr/lib/hadoop-hdfs/*," 
      +"/usr/lib/hadoop-hdfs/lib/*," 
      +"/usr/lib/hadoop-mapreduce/*," 
      +"/usr/lib/hadoop-mapreduce/lib/*," 
      +"/usr/lib/hadoop-yarn/*," 
      +"/usr/lib/hadoop-yarn/lib/*," 
      +"/usr/lib/spark/*," 
      +"/usr/lib/spark/lib/*," 
      +"/usr/lib/spark/lib/*" 
    ) 
     .set("spark.driver.host","localhost"); 

    val sc = new SparkContext(conf); 

    val file = sc.textFile("hdfs://namecluster.com:8020/user/root/testdir/test.csv") 
    //Count number of words from a hive table (split is based on char 001) 
    val counts = file.flatMap(line => line.split(1.toChar)).map(word => (word, 1)).reduceByKey(_ + _) 

    //swap key and value with count value and sort from high to low 
    val test = counts.map(_.swap).sortBy(word =>(word,1), false, 5) 

    test.saveAsTextFile("hdfs://namecluster.com:8020/user/root/test1") 

    } 

} 

私はHadoopのリソースマネージャのログファイルに次のエラーメッセージを受信して​​い

YARN executor launch context: 
    env: 
    CLASSPATH -> {{PWD}}<CPS>{{PWD}}/__spark__.jar<CPS>/etc/hadoop/conf<CPS>/usr/lib/hadoop/*<CPS>/usr/lib/hadoop/lib/*<CPS>/usr/lib/hadoop-hdfs/*<CPS>/usr/lib/hadoop-hdfs/lib/*<CPS>/usr/lib/hadoop-mapreduce/*<CPS>/usr/lib/hadoop-mapreduce/lib/*<CPS>/usr/lib/hadoop-yarn/*<CPS>/usr/lib/hadoop-yarn/lib/*<CPS>/usr/lib/spark/*<CPS>/usr/lib/spark/lib/*<CPS>/usr/lib/spark/lib/*<CPS>$HADOOP_MAPRED_HOME/*<CPS>$HADOOP_MAPRED_HOME/lib/*<CPS>$MR2_CLASSPATH 
    SPARK_LOG_URL_STDERR -> http://cloudera-002.fusion.ebicus.com:8042/node/containerlogs/container_1461679867178_0026_01_000005/hadriaans/stderr?start=-4096 
    SPARK_YARN_STAGING_DIR -> .sparkStaging/application_1461679867178_0026 
    SPARK_YARN_CACHE_FILES_FILE_SIZES -> 520473 
    SPARK_USER -> hadriaans 
    SPARK_YARN_CACHE_FILES_VISIBILITIES -> PRIVATE 
    SPARK_YARN_MODE -> true 
    SPARK_YARN_CACHE_FILES_TIME_STAMPS -> 1462288779267 
    SPARK_LOG_URL_STDOUT -> http://cloudera-002.fusion.ebicus.com:8042/node/containerlogs/container_1461679867178_0026_01_000005/hadriaans/stdout?start=-4096 
    SPARK_YARN_CACHE_FILES -> hdfs://cloudera-003.fusion.ebicus.com:8020/user/hadriaans/.sparkStaging/application_1461679867178_0026/spark-yarn_2.10-1.5.0.jar#__spark__.jar 

    command: 
    {{JAVA_HOME}}/bin/java -server -XX:OnOutOfMemoryError='kill %p' -Xms1024m -Xmx1024m -Djava.io.tmpdir={{PWD}}/tmp '-Dspark.driver.port=49961' -Dspark.yarn.app.container.log.dir=<LOG_DIR> org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url akka.tcp://[email protected]:49961/user/CoarseGrainedScheduler --executor-id 4 --hostname cloudera-002.fusion.ebicus.com --cores 1 --app-id application_1461679867178_0026 --user-class-path file:$PWD/__app__.jar 1> <LOG_DIR>/stdout 2> <LOG_DIR>/stderr 
=============================================================================== 

16/05/03 17:19:58 INFO impl.ContainerManagementProtocolProxy: Opening proxy : cloudera-002.fusion.ebicus.com:8041 
16/05/03 17:20:01 INFO yarn.YarnAllocator: Completed container container_1461679867178_0026_01_000005 (state: COMPLETE, exit status: 1) 
16/05/03 17:20:01 INFO yarn.YarnAllocator: Container marked as failed: container_1461679867178_0026_01_000005. Exit status: 1. Diagnostics: Exception from container-launch. 
Container id: container_1461679867178_0026_01_000005 
Exit code: 1 
Stack trace: ExitCodeException exitCode=1: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:561) 
    at org.apache.hadoop.util.Shell.run(Shell.java:478) 
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:738) 
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:210) 
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302) 
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

ヒントやアドバイスをお待ちしております。

+1

食い物はあなたの瓶を糸に送りません。これは 'bin/spark-submit'によって呼び出されるSparkSubmitで行われます。 – zsxwing

答えて

2

私の過去の経験から、私はあなたがJARを渡していないことに気付き、この非常にわかりやすいないエラーを引き起こしている可能性があります2つのシナリオ(Iは、Eclipseからジョブを送信が、Javaを使用しています)

  1. がありますSparkContextの設定に変更します。 Eclipseから送信するときにJARを渡した行を削除した場合、コードはまったく同じエラーで失敗します。そのため、基本的には、まだ存在していないJARのパスをコードに設定してから、プロジェクトをRunnable JARとしてエクスポートします。これにより、推移的な依存関係がすべてコード内に設定されているパスにパッケージされます。これは、Javaでの表示方法です。

    SparkConf sparkConfiguration = new SparkConf();
    sparkConfiguration.setJars(新しいString [] {"あなたのjarへのパス"});

  2. クラスタが正常かどうかを確認すると、tmpディレクトリがいっぱいになっている可能性があります。 hadoopロギングファイルをすべて確認してください。そのうちいくつかは(残念なことに、どれが覚えていないのか分からない)詳細が表示されます(警告が表示されます)。

関連する問題