我想了解在标准hadoop map reduce和spark中收集作业执行统计信息的最佳实践是什么。
给予
1hdfs中的许多文件(每个控制器,即dataset1、dataset2等,是第3点的数据集的名称)
/user/tester/dataset1/part-0000*.avro
/user/tester/dataset2/part-0000*.avro
/user/tester/dataset3/part-0000*.avro
/user/tester/dataset4/part-0000*.avro
2每个文件都包含一个具有~1000个属性的avro记录
| id | attr_1 | attr_2 | attr_3 | ... | attr_N |
----------------------------------------------------
| 1 | val_1_1 | val_1_2 | val_1_3 | ... | val_1_N |
| 2 | val_2_1 | val_2_2 | val_2_3 | ... | val_2_N |
| 3 | val_M_1 | val_M_2 | val_M_3 | ....| val_M_N |
三。有一个配置文件,其中包含需要从哪个数据集中获取哪些属性/列,以及给定的数据集应该如何像那样过滤掉的信息
<datasets>
<dataset>
<id>dataset1</id>
<attributes>
<attribute>attr_1</attribute>
<attribute>attr_3</attribute>
</attributes>
<filter>attr_1 gt 50 and attr_3 eq 100</filter>
</dataset>
<dataset>
<id>dataset2</id>
<attributes>
<attribute>attr_2</attribute>
<attribute>attr_5</attribute>
<attribute>attr_8</attribute>
</attributes>
<filter>attr_2 gteq 71</filter>
</dataset>
...
</datasets>
问题
过滤所有数据集,根据第2点的配置仅获取必要的属性,然后根据属性id对数据集进行分组,并将结果数据集保存到文件中(这里的实现非常清楚)。
作业结束时,确定从每个数据集读取的记录总数
作业结束时,确定每个数据集中已过滤的记录数
作业结束时,根据点2的配置确定每个数据集中每个非空属性出现的次数。
作业结束时,确定每个非空属性在最终数据集中出现的次数。
所以呢
什么是最好的方法来计算这样的统计数字,如果
hadoop保证在作业完成时,计数器的更新将执行一次,即使
相应的任务将重新启动
已启用推测执行
hadoop计数器不用于统计。
关于spark,
仅在操作内部执行累加器更新,spark保证每个任务对累加器的更新只应用一次,即重新启动的任务不会更新值。
在转换中,用户应该知道,如果任务或作业阶段被重新执行,每个任务的更新可能会被应用多次?
暂无答案!
目前还没有任何答案,快来回答吧!