有多少Spark JavaRDD是处理数千个文件的理想选择?

时间:2015-05-17 18:47:55

标签: hadoop apache-spark hdfs

我要处理数千个文件,它驻留在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,或者即使数百万个文件也可以。我注意到的一件事是没有并行性,即使我在主纱上使用了12个执行器,我也看到它并不会处理文件。请提前指导谢谢。

2 个答案:

答案 0 :(得分:2)

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

给定相同数量的资源(簇大小,mem-cpu),RDD指向小数据集还是大数据集只会影响处理数据所需的时间。如果您预计数据大小会增加,则需要确定是否:

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

简而言之,一个RDD定义很好。根据结果​​的数据集大小和业务要求调整群集资源。

答案 1 :(得分:0)

首先,如果你的HDFS有数以千计的小文件,你的上游应用程序在写作时不会做。在这种情况下,考虑编写一种输入格式来组合文件(或者查看hadoop的输入格式以查看是否适合您)。 其次,如果你有非常大的文件,请访问Sandy Ryza在cloudera网站上关于调整群集资源的真棒blog