使用spark的任务调度

093gszye  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(336)

我正在我的4节点集群上运行相当大的任务。我从一个表中读取大约4GB的过滤数据并运行naï贝伊的训练和预测。我在一台机器上运行hbase region服务器,它与在公平调度模式下运行的spark集群是分开的,尽管hdfs在所有机器上都运行。
在执行时,我遇到了奇怪的任务分布,即集群上活动任务的数量。我观察到,在任何时间点,只有一个活动任务或最多两个任务在一台/两台机器上运行,而另一个任务处于空闲状态。我的期望是rdd中的数据将在所有节点上进行分割和处理,以进行count和distinct等操作。为什么不将所有节点用于单个作业的大型任务?在单独的机器上安装hbase与此有关吗?

nnsrf1az

nnsrf1az1#

需要检查的事项:
假设您正在使用 hadoopFile() 或者 hadoopRDD() :考虑设置[可选] minPartitions 参数以确保分区数等于要使用的节点数。
当你创造其他 RDD 在应用程序中,检查这些分区的分区数 RDD 以及数据在它们之间分布的均匀性(有时一个操作可以创建一个 RDD 使用相同数量的分区,但会使其中的数据严重失衡。)您可以通过调用 glom() 方法,打印生成的元素数 RDD (分区的数量),然后循环通过它并打印每个数组的元素数量(这将引入通信,因此不要将其留在生产代码中。)
上的许多api调用 RDD 有可选的参数来设置分区的数量,然后有如下调用 repartition() 以及 coalesce() 这会改变分区。使用它们来解决使用上述技术发现的问题(但有时会暴露出重新思考算法的需要)
检查你是否真的在使用 RDD 它代表所有的大数据,并且不会意外地在主数据上产生一些大数据结构。
所有这些都假设您存在数据倾斜问题,而不是更危险的问题。这并不能保证是真的,但是在寻找复杂的东西之前,您需要检查数据倾斜的情况。特别是考虑到spark的灵活性,数据倾斜很容易出现,而且会造成真正的混乱。

相关问题