从Hadoop MapReduce输入格式中传递其他值

huus2vyu  于 2022-12-03  发布在  Hadoop
关注(0)|答案(2)|浏览(230)

bounty将在4天后过期。回答此问题可获得+50的声望奖励。ariels希望吸引更多人关注此问题:这要求一种可行的方法来报告InputFormat中的计数器,以便与其他作业指标一起显示。这应该是可能的!这是一个由文档支持的响应,并且在编写InputFormat时将在一般情况下工作,该InputFormat将与我们无法控制的第三方客户端代码一起工作。

我的Hadoop MapReduce自定义InputFormat用于拆分输入,它执行了一些额外的工作,我想知道这些工作何时完成。本质上,我需要知道我的InputFormat实现执行的某些操作的数量的一些指标。
InputFormat中的附加信息传递回MapReduce作业的最佳方式是什么?如果InputFormat被传递了一个Job示例,我可以只更新计数器;不幸的是,JobContext Hadoop通道(我使用的是v2.10.x)不提供对计数器的访问。
我是否应该将这些信息存储在配置中(可以通过JobContext访问),并允许作业稍后访问它?这似乎有点像组装。

eimct9ow

eimct9ow1#

我认为正确的方法是使用timeline service
它是为存储application specific data而设计的。

  1. // Create and start the Timeline client
  2. TimelineClient client = TimelineClient.createTimelineClient();
  3. client.init(conf);
  4. client.start();
  5. TimelineEntity entity = null;
  6. // Compose the entity
  7. try {
  8. TimelinePutResponse response = client.putEntities(entity);
  9. } catch (IOException e) {
  10. // Handle the exception
  11. } catch (YarnException e) {
  12. // Handle the exception
  13. }
  14. // Stop the Timeline client
  15. client.stop();

要提取信息,可以使用rest API。
时间线实体时间线实体包含概念实体及其相关事件的 meta信息。
实体可以是应用程序、应用程序尝试、容器或任何用户定义的对象。
它包含将用于索引时间线存储中的实体的主筛选器。因此,用户/应用程序应仔细选择要存储为主筛选器的信息。
其余数据可以存储为未索引信息。每个实体都由EntityId和EntityType唯一标识。

展开查看全部
lg40wkob

lg40wkob2#

我最终修改了通过JobContext访问的配置,它工作了,但不太理想,因为它扭曲了配置的目的。

相关问题