【问题标题】:How many Spark JavaRDDs are ideal to process thousands of files?多少个 Spark JavaRDD 最适合处理数千个文件?
【发布时间】:2015-07-29 05:21:39
【问题描述】:

我有数千个文件要处理,它们驻留在 HDFS 中。我有如下所示的工作解决方案,但我想知道想法 RDD 计数的最佳实践。目前我只使用一个 RDD,它指向 HDFS 中的数千个文件。

    //the following line contains comma separated files to process
        String fileToProcessList = "/user/server1/server.dat,/user/server2/server2.dat";
    JavaRDD<Record> rdd_records = sc.textFile(filetoProcessList).map(
      new Function<String, Record>() {
          public Record call(String line) throws Exception {
             String[] fields = line.split(",");
             Record sd = new Record(fields[0], fields[1], fields[2].trim(), fields[3]);
             return sd;
      }
});

在上述情况下我是否需要使用更多 JavaRDD,或者即使在数百万个文件的情况下也可以使用一个?我注意到的一件事是没有并行性:即使我在 master yarn 上使用 12 个执行程序,我也看到它按顺序处理文件。

【问题讨论】:

  • HI user449355,只需要1个RDD。当RDD的大小增加时,rdd中的分区数也会增加。

标签: hadoop apache-spark hdfs


【解决方案1】:

RDD 可以被看作是一个指向数据的指针,它允许定义对该数据的操作。这些操作安排在集群中的执行程序上。

给定相同数量的资源(集群大小、内存 - cpu),无论您的 RDD 指向小数据集还是大数据集,都只会影响处理数据所需的时间。如果您预见到数据量会增加,您需要确定是否:

  • 等待结果的时间更长是可以接受的 => 然后什么都不做
  • 分配的时间是固定的 => 然后增加集群资源

简而言之,一个 RDD 定义就可以了。根据结果​​的数据集大小和业务需求调整集群资源。

【讨论】:

    【解决方案2】:

    首先,如果您的 HDFS 有数千个小文件,那么您的上游应用程序在写入时不会做任何事情。在这种情况下,请考虑编写输入格式来组合文件(或查看 hadoop 的输入格式,看看是否适合您)。 其次,如果您有非常大的文件,请在 cloudera 网站上查看 Sandy Ryza 的 blog,了解如何调整集群资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多