hadoop - 使用 spark 进行任务调度

标签 hadoop mapreduce apache-spark hadoop-yarn hadoop2

我在我的 4 节点集群上运行相当大的任务。我正在从一个表中读取大约 4 GB 的过滤数据并运行 Naïve Baye 的训练和预测。我的 HBase 区域服务器在一台机器上运行,它与以公平调度模式运行的 spark 集群分开,尽管 HDFS 在所有机器上运行。

执行时,我在集群上的事件任务数量方面遇到了奇怪的任务分配。我观察到,在任何时间点,只有一个事件任务或最多两个任务在一台/两台机器上运行,而另一台则处于空闲状态。我的期望是 RDD 中的数据将在所有节点上进行划分和处理,以进行计数和不同等操作。为什么所有节点都不用于单个作业的大型任务?在单独的机器上安装 HBase 与此有什么关系吗?

最佳答案

一些要检查的东西:

  1. 假设您正在使用 hadoopFile()hadoopRDD() 读取您的数据:考虑设置 [optional] minPartitions 参数使确保分区数等于您要使用的节点数。
  2. 当您在应用程序中创建其他 RDD 时,请检查这些 RDD 的分区数以及数据在它们之间的分布情况。 (有时一个操作可以创建具有相同分区数的 RDD,但会使其中的数据严重不平衡。)您可以通过调用 glom() 方法来检查这一点,打印结果 RDD 的元素数(分区数),然后遍历它并打印每个数组的元素数。 (这会引入通信,所以不要将其留在您的生产代码中。)
  3. RDD 上的许多 API 调用都有用于设置分区数的可选参数,然后是 repartition()coalesce() 等调用 可以改变分区。使用它们来解决您使用上述技术发现的问题(但有时它会暴露需要重新考虑您的算法。)
  4. 检查您是否确实为所有大数据使用了 RDD,并且没有意外地在 master 上使用一些大数据结构。

所有这些都假设您遇到的是数据倾斜问题,而不是更严重的问题。这不能保证是真的,但在寻找复杂的东西之前,你需要检查你的数据倾斜情况。数据倾斜很容易蔓延,特别是考虑到 Spark 的灵 active ,它会造成真正的困惑。

关于hadoop - 使用 spark 进行任务调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26100082/

相关文章:

java - 有没有办法可以在Windows开发盒上开发和测试MapReduce程序

Hadoop 洗牌/合并时间总计 : average vs.

java - 如何从设置方法中停止 map task ?

eclipse - Hadoop:Filenotfound异常-Windows

hadoop - Spark/Hadoop 为大型 LZO 文件抛出异常

hadoop - 我们可以通过多列组合拆分 Sqoop 作业吗

mongodb - 从 MongoDB 迁移到 HBase

apache-spark - df.show()在hdfs中显示不为空的结果

hadoop - 如何使用bzip2输入格式增加MapReduce的 map task

java - Spark Java语言加载数据集的最佳方式