蜂巢表现

时间:2012-12-11 18:43:56

标签: hadoop hive

我在蜂巢上工作,我是新手。我正面临一些关于hive查询性能的问题。

  1. 分配给我的工作的地图制作者数量非常低,即使有 有数百个地图制作者可用。我试过设置 mapred.map.tasks=200。但它只需要20到30个映射器。一世 理解,映射器的数量取决于inputsplit。在那儿 增加映射器的任何其他选项?如果没有那么为什么是 引入参数(mapred.map.tasks)?

  2. 是否有任何我可以理解的资源来关联蜂巢 查询到map-reduce作业,即不同部分 查询是执行的吗?

3 个答案:

答案 0 :(得分:2)

有关设置地图任务的详细信息,请查看以下链接:http://wiki.apache.org/hadoop/HowManyMapsAndReduces。基本上,mapred.map.tasks只是一个提示;它通常不会控制任何东西。

要查看如何执行Hive查询,只需在查询前加上explain。例如:explain select foo from bar;。如果您需要更多信息,还可以explain extended

答案 1 :(得分:1)

我很久以前就已经问过这个问题了,我会尽量回答这个问题,即使在提出问题的时候,这里的一些建议也不可用。

优化Hive性能:

  • 调整Hive请求使用的映射器和缩减器的数量;这可以通过调整每个映射器mapreduce.input.fileinputformat.split.maxsize的输入大小以及每个reducer的输入大小来完成:hive.exec.reducers.bytes.per.reducer
记住,"越多越好"并非总是如此。所以你需要根据需要调整这些数字。

  • 优化连接,将连接转换为地图连接,如果其中一个表是小表(如果可能的话)... (https://cwiki.apache.org/confluence/display/Hive/LanguageManual+JoinOptimization

  • 将您的表分区为条件(WHERE)中经常使用的列 例如,如果您经常请求SELECT * from myTable WHERE someColumn = 'someValue',则建议您将表格划分为列“某些列”'
    这将让您的查询只搜索分区文件someColumn = SomePartition,而不是搜索整个表文件。

  • 压缩中间结果可能会在某些情况下提高性能(取决于您的硬件配置,网络和CPU /内存)。这可以通过设置属性来完成:hive.intermediate.compression.codec

  • 选择正确的压缩编解码器,例如使用Snappy(as in here):

    SET hive.exec.compress.output=true;
    SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    SET mapred.output.compression.type=BLOCK;
    

在提问时尚未提供:

要进一步优化,您可以参考here

答案 2 :(得分:0)

你可以减少mapreduce.input.fileinputformat.split.maxsize'增加映射器的数量(更多分裂)。