我设置了两个虚拟机来在分布式设置中测试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);
}
}
任何想法为什么我的设置不分发
答案 0 :(得分:0)
filter
操作肯定是分布式的,count
部分是在工作人员上计算的,而总计数是在主人计算的。计数的结果也在主人身上。
过滤掉一GB的数据并不会给Spark带来压力,所以你应该只看到工作人员的短CPU峰值。而是看看I / O使用情况。
您的应用很好,您的设置一定有问题。
答案 1 :(得分:0)
首先,您浏览Spark UI并确保您有多个工作人员,这也取决于您在Rdd中拥有多少分区。