【问题标题】:Error Processing Large Data With Spark使用 Spark 处理大数据时出错
【发布时间】:2018-08-31 08:24:28
【问题描述】:

我正在尝试在 AWS 上使用 Spark 进行字数统计。我创建了一个 spark 集群,我在 s3 中存储了大文件。我总共有 100 个文件,每个文件 50GB。我可以一次成功地对其中一个文件进行字数统计,但是如果我尝试将它们全部一起完成,则会失败。此外,如果我尝试对大于约 60GB 的单个文件进行字数统计,则会失败。我得到的错误是:

ERROR org.apache.spark.executor.Executor (Executor task launch worker for task 2): Exception in task 2.0 in stage 0.0 (TID 2)
java.lang.NoSuchMethodError: org.roaringbitmap.RoaringBitmap.runOptimize()Z
    at org.apache.spark.scheduler.HighlyCompressedMapStatus$.apply(MapStatus.scala:234)
    at org.apache.spark.scheduler.MapStatus$.apply(MapStatus.scala:54)
    at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:74)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:96)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53)
    at org.apache.spark.scheduler.Task.run(Task.scala:108)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:338)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

这是我的字数统计代码

public class WordCount {

    public static void main(String[] args) throws Exception {
        SparkConf sparkConf = new SparkConf().setAppName("WordCount").setMaster("local[5]").set("spark.executor.memory","32g");
        JavaSparkContext spark = new JavaSparkContext(sparkConf);
        System.out.println(MessageFormat.format("Starting word count for {0}", args[0]));
        JavaRDD<String> textFile = spark.textFile(MessageFormat.format("s3a://my_bucket/{0}*", args[0]));
        JavaPairRDD<String, Integer> counts = textFile.flatMap(s -> Arrays.asList(s.split(" ")).iterator())
                .mapToPair(word -> new Tuple2<>(word, 1)).reduceByKey((a, b) -> a + b);
        counts.saveAsTextFile(MessageFormat.format("{0}_output", args[0]));

        spark.close();
        System.exit(0);
    }
}

我读到这可能是版本不匹配错误,并且我已确保我的编译代码中的 spark 版本和集群上的 spark 版本相同。

我的集群有 1 个主节点和 5 个核心节点。每个节点有 8 个内核和 64GB 内存和 1690GB 存储空间。

为了运行代码,我将上面的 java 代码导出到一个 jar 文件中。我将jar文件保存到s3。然后在 AWS 控制台中单击“添加步骤”并选择我上传到 s3 的 jar 文件。然后代码运行。

【问题讨论】:

  • @RameshMaharjan 我的 spark 版本在亚马逊集群上是 2.2.1,在我上传的 jar 中是 2.2.1 以运行字数统计。您认为还有哪些罐子可能不匹配?
  • @RameshMaharjan 没有命令。但是我在问题中添加了如何运行代码
  • 那么我对此不是很有帮助,但我仍然怀疑您在单击运行时运行了错误的命令
  • 这可能是由您的依赖项版本之间的冲突引起的。尝试寻找提供该类的依赖项并排除一些传递依赖项
  • Ofc 有一个命令!您是否阅读过 AWS EMR 文档?

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


【解决方案1】:

@ErnestKiwele 评论对我帮助最大。当您在 AWS 中创建集群时,请选择高级选项。默认情况下,会选择 Hadoop、Pig、Hive 和 Hue。我将所有这些都选中并添加到 Spark 中。当我只使用 Hadoop 和 Spark(这就是我所需要的)时,我不再收到错误消息。一定是火花和其他人之间存在一些冲突。谢谢!

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多