Spark不分发工作

时间:2015-04-07 10:24:41

标签: apache-spark

我设置了两个虚拟机来在分布式设置中测试Spark。似乎我的作业只在一个节点上本地运行,我用它来提交作业。

一个节点作为datanode / worker节点运行,第二个节点另外作为namenode / secondary-namenode运行 我将底层hadoop配置为使用Yarn。 jps命令确认各种服务在我预期hadoop / spark中的起始* -scripts后正确启动并基本可用。

我使用htop来跟踪"跟踪"如果使用另一个节点,但cpu使用率在2和3%之间跳跃 - >可能没用过。我想知道我在这里失踪了什么。

我用这个命令开始工作: ./spark-submit --class com .... DistributedTest --master yarn-client myJar.jar

这是我正在执行的类(data.txt文件大约是1GB纯文本)

  public class DistributedTest
    {
        public static void main(String[] args)
            throws IOException
        {

            SparkConf conf = new SparkConf().setAppName("Simple Application");
            JavaSparkContext sc = new JavaSparkContext(conf);
            JavaRDD<String> logData = sc.textFile("hdfs://woodpecker:10001/husr/data.txt");// .persist(StorageLevel.DISK_ONLY());

            long numAs = logData.filter(new Function<String, Boolean>()
            {
                public Boolean call(String s)
                {
                    return s.contains("a");
                }
            }).count();

            long numBs = logData.filter(new Function<String, Boolean>()
            {
                public Boolean call(String s)
                {
                    return s.contains("b");
                }
            }).count();

            sc.close();

            String s = "Lines with a: " + numAs + ", lines with b: " + numBs;
            System.out.println(s);


        }
    }

任何想法为什么我的设置不分发

2 个答案:

答案 0 :(得分:0)

filter操作肯定是分布式的,count部分是在工作人员上计算的,而总计数是在主人计算的。计数的结果也在主人身上。

过滤掉一GB的数据并不会给Spark带来压力,所以你应该只看到工作人员的短CPU峰值。而是看看I / O使用情况。

您的应用很好,您的设置一定有问题。

答案 1 :(得分:0)

首先,您浏览Spark UI并确保您有多个工作人员,这也取决于您在Rdd中拥有多少分区。