Hadoop 一个映射器有时无法启动

Hadoop 一个映射器有时无法启动,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,我正在创建一个Hadoop MapReduce作业,并在一个HBase表上使用两次扫描来为我的映射程序提供数据。HBase表有10个区域。我创建了两个扫描仪,在它们上调用setAttribute(Scan.Scan\u ATTRIBUTES\u TABLE\u NAME,tableName),然后执行以下操作: job.setPartitionerClass(NaturalKeyPartitioner.class); job.setGroupingComparatorClass(

我正在创建一个Hadoop MapReduce作业,并在一个HBase表上使用两次扫描来为我的映射程序提供数据。HBase表有10个区域。我创建了两个扫描仪,在它们上调用setAttribute(Scan.Scan\u ATTRIBUTES\u TABLE\u NAME,tableName),然后执行以下操作:

    job.setPartitionerClass(NaturalKeyPartitioner.class);
    job.setGroupingComparatorClass(NaturalKeyGroupingComparator.class);
    job.setSortComparatorClass(CompositeKeyComparator.class);
    TableMapReduceUtil.initTableMapperJob(scans, FaultyRegisterReadMapper.class, MeterTimeKey.class, ReadValueTime.class, job);
出于某些原因,大多数情况下只创建两个贴图器。我希望有更多的制图员,但这并不是什么大问题

真正糟糕的是,有时它创建了三个映射器,当它创建时,前两个映射器完成得相当快,但第三个映射器甚至在五分钟内都没有启动。正是这个地图绘制者花了这么长时间才开始绘制,这才是真正困扰我的地方。:)

这是在一个有大约60个节点的集群上,它并不繁忙

我怀疑地图绘制者的数量可能是由它在表中找到的数据量决定的,但我对此并不乐观


主要问题:你知道为什么一个映射程序需要这么长时间才能启动吗?

除了我节点的硬件资源,我还会检查网络流量。您可能正遭受网络饱和(接口错误、帧错误等)

之后,我将确保以下事项:

  • RegionServer热插销:密钥空间分布不均匀会导致对单个区域的大量请求,从而轰炸RegionServer进程,导致响应时间缓慢。你有由timeseries类数据组成的密钥吗

  • 非本地数据区域:也许您的作业请求的数据不是DataNode的本地数据(RegionServer在DataNodes上运行),因此强制HDFS通过网络从其他服务器请求数据块(也涉及网络流量)


这是热点地区和我对日志的误解的结合。映射器都在启动(我可以通过观察计数器的递增看到这一点),但没有在进度栏中显示“进度”。是的,我现在可以看到映射器的数量就是我正在命中的区域的数量。所以,两个是不好的(