【问题标题】:Submitting Spark application on standalone cluster在独立集群上提交 Spark 应用程序
【发布时间】:2016-10-15 10:12:55
【问题描述】:

我在使用 Spark 方面相当陌生,但在独立集群上运行简单的字数统计应用程序时遇到问题。我有一个由一个主节点和一个工作节点组成的集群,使用 spark-ec2 脚本在 AWS 上启动。当我使用本地运行代码时,一切正常 ./bin/spark-submit --class com.spark.SparkDataAnalysis --master local[*] ./uber-ingestion-0.0.1-SNAPSHOT.jar file:///root/textfile.txt s3n://bucket/wordcount

这会将输出保存到指定的目录中。

当我尝试使用 ./bin/spark-submit --class com.spark.SparkDataAnalysis --master spark://server-ip:7077 ./uber-ingestion-0.0.1-SNAPSHOT.jar file:///root/textfile.txt s3n://bucket/wordcount

它只是继续运行,永远不会产生最终结果。该目录已创建,但仅存在一个 0 字节的临时文件。

根据 Spark UI,它会无限期地运行 mapToPair 函数。 Here is a picture of the Spark UI

有谁知道为什么会发生这种情况以及如何解决?

代码如下:

public class SparkDataAnalysis {
    public static void main(String args[]){
        SparkConf conf = new SparkConf().setAppName("SparkDataAnalysis");
        JavaSparkContext sc = new JavaSparkContext(conf);

        JavaRDD<String> input = sc.textFile( args[0] );

        JavaRDD<String> words = input.flatMap( s -> Arrays.asList( s.split( " " ) ) );

        JavaPairRDD<String, Integer> counts = words.mapToPair( t -> new Tuple2<String, Integer>( t, 1 ) ).reduceByKey( (x, y) -> x + y );

        counts.saveAsTextFile( args[1] );
    }
}

【问题讨论】:

  • 您的存储桶是否受到 aws 访问密钥和密钥的保护?如果是这样,你是如何提供的?
  • 存储桶受到保护。我通过在每个 Spark 节点将密钥导出为 export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= 来提供密钥。
  • 你可以尝试在代码中明确设置它吗? val hadoopConf = sc.hadoopConfiguration; hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") hadoopConf.set("fs.s3.awsAccessKeyId", myAccessKey) hadoopConf.set("fs.s3.awsSecretAccessKey ", mySecretKey)
  • 我在代码中添加了配置,可惜问题依旧。

标签: java amazon-web-services apache-spark


【解决方案1】:

我跳过了通过 spark-ec2 脚本使用独立集群,而是使用了 Amazon EMR。那里一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    相关资源
    最近更新 更多