Performance Idea&x27;s用于平衡HDFS->;HBase映射减少作业

Performance Idea&x27;s用于平衡HDFS->;HBase映射减少作业,performance,configuration,hadoop,mapreduce,hbase,Performance,Configuration,Hadoop,Mapreduce,Hbase,对于一个客户,我一直在研究在AWSEC2上运行Cloudera风格的hadoop集群的短期可行性。在大多数情况下,结果是预期的,逻辑卷的性能大多不可靠,也就是说,尽我所能使集群在这种情况下运行得相当好 昨晚,我对他们的导入器脚本进行了全面测试,从指定的HDFS路径提取数据并将其推送到Hbase中。他们的数据有些不寻常,因为这些记录少于1KB的一个片段,并被压缩成9MB的压缩块。总共有大约500K条文本记录从GZIP中提取出来,检查是否正常,然后推送到reducer阶段 作业在环境的预期范围内运行

对于一个客户,我一直在研究在AWSEC2上运行Cloudera风格的hadoop集群的短期可行性。在大多数情况下,结果是预期的,逻辑卷的性能大多不可靠,也就是说,尽我所能使集群在这种情况下运行得相当好

昨晚,我对他们的导入器脚本进行了全面测试,从指定的HDFS路径提取数据并将其推送到Hbase中。他们的数据有些不寻常,因为这些记录少于1KB的一个片段,并被压缩成9MB的压缩块。总共有大约500K条文本记录从GZIP中提取出来,检查是否正常,然后推送到reducer阶段

作业在环境的预期范围内运行(溢出记录的数量是我预期的),但一个真正奇怪的问题是,当作业运行时,它使用8个减速机运行,而2个减速机完成99%的工作,而其余6个减速机只完成部分工作

我目前尚未验证的假设是,我在作业配置中缺少了一个关键的无序排列或块大小设置,这会导致大多数数据被推送到块中,而这些块只能由2个还原器使用。不幸的是,上次我在Hadoop上工作时,另一个客户端的数据集位于物理托管集群上的256GB lzo文件中


澄清一下,我的问题;是否有一种方法可以调整M/R作业,通过降低映射的输出大小或使每个减速机减少其将解析的数据量,来实际利用更多可用的减速机。即使是在目前的2个减速机基础上改进4个减速机,也将是一个重大改进。

看起来您的减速机出现了热点。这可能是因为某个特定的键非常流行。作为映射器输出的键是什么

您在这里有几个选项:

  • 尝试更多的减速器。有时,在散列的随机性中会出现奇怪的伪影,因此拥有一个素数的减数器有时会有所帮助。这可能无法解决问题
  • 编写一个自定义分区器,以更好地展开工作
  • 找出为什么你的一堆数据被分成两个键。有没有一种方法可以使您的密钥更独特,以分割工作
  • 您是否可以使用合并器来减少流向合并器的通信量

我需要深入研究客户的参考地图/Reduce应用程序,但我认为(希望)键控问题可能是罪魁祸首。启动集群并使其稳定(namenode safemode,等等)大约需要半个小时,然后再运行/测试/验证几个小时,但如果结果是这样的话,我将返回进行答案检查。最后编写了一个快速定制M/R来解决问题。客户机的导入使用的是一个identity reducer(来自hbase mapreduce包,不带扩展名),实际上它们的主键只有2个值。否则,记录中所有其他值的基数为二进制或等于总记录集。我知道这是另一个问题,但是您知道默认的hbase导入类是否可以将不同的键聚合到reduce任务中吗?