Hadoop 一个映射器有时无法启动
我正在创建一个Hadoop MapReduce作业,并在一个HBase表上使用两次扫描来为我的映射程序提供数据。HBase表有10个区域。我创建了两个扫描仪,在它们上调用setAttribute(Scan.Scan\u ATTRIBUTES\u TABLE\u NAME,tableName),然后执行以下操作: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(
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通过网络从其他服务器请求数据块(也涉及网络流量)