wholeTextFiles()如何在Spark-Hadoop集群中运行?

时间:2016-09-02 10:58:56

标签: scala hadoop apache-spark yarn

我创建的RDD如下:

JavaPairRDD<String,String> inputDataFiles = sparkContext.wholeTextFiles("hdfs://ip:8020/user/cdhuser/inputFolder/");

在此RDD上,我执行map处理单个文件并调用foreach来触发相同的map

JavaRDD<Object[]> output = inputDataFiles.map(new Function<Tuple2<String,String>,Object[]>()
{

        private static final long serialVersionUID = 1L;

        @Override
        public Object[] call(Tuple2<String,String> v1) throws Exception 
        { 
          System.out.println("in map!");
           //do something with v1. 
          return Object[]
        } 
});

output.foreach(new VoidFunction<Object[]>() {

        private static final long serialVersionUID = 1L;

        @Override
        public void call(Object[] t) throws Exception {
            //do nothing!
            System.out.println("in foreach!");

        }
    }); 

此代码适用于本地笔记本电脑上的独立设置,同时访问本地文件和远程HDFS文件。

在群集中,相同的代码不会产生任何结果。我的直觉是数据没有到达单个执行者,因此mapforeach都不起作用。这可能是猜测。但我无法弄清楚为什么这在集群中不起作用。我甚至看不到mapforeach中的打印语句以集群执行模式打印。

我注意到在集群执行中没有看到的独立输出中的特定行。

16/09/07 17:35:35 INFO WholeTextFileRDD: Input split: Paths:/user/cdhuser/inputFolder/data1.txt:0+657345,/user/cdhuser/inputFolder/data10.txt:0+657345,/user/cdhuser/inputFolder/data2.txt:0+657345,/user/cdhuser/inputFolder/data3.txt:0+657345,/user/cdhuser/inputFolder/data4.txt:0+657345,/user/cdhuser/inputFolder/data5.txt:0+657345,/user/cdhuser/inputFolder/data6.txt:0+657345,/user/cdhuser/inputFolder/data7.txt:0+657345,/user/cdhuser/inputFolder/data8.txt:0+657345,/user/cdhuser/inputFolder/data9.txt:0+657345

我有一个类似于textFile()的代码,它早先适用于群集上的单个文件。问题仅在于wholeTextFiles()

请告知使用此工作或其他替代方法的最佳方法。

我的设置是使用Spark Service分发cloudera 5.7。我将主人用作yarn-client

action可以是任何东西。它只是调用map的虚拟步骤。我也尝试了System.out.println("Count is:"+output.count());,因为我在10得到了正确答案,因为文件夹中有10个文件,但地图仍然无法正常工作。

感谢。

0 个答案:

没有答案