6

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

  1. 即使有数百个可用的映射器,分配给我的工作的映射器数量也非常少。我试过设置 mapred.map.tasks=200。但它只需要 20 到 30 个映射器。我了解,映射器的数量取决于输入拆分。有没有其他选择来增加映射器?如果不是,那么为什么要mapred.map.tasks引入 parameter()?

  2. 是否有任何资源可以让我理解将 hive 查询与 map-reduce 作业相关联,即查询的不同部分在哪里执行?

4

3 回答 3

2

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

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

于 2012-12-11T19:00:09.520 回答
1

我看到这个问题很久以前就被问过了,我会尝试回答它,即使这里的一些建议在被问到问题时不可用。

要优化 Hive 性能:

  • 调整 Hive 请求使用的映射器和减速器的数量;这可以通过调整每个 mappermapreduce.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”列上对表进行分区,
    这将使您的查询仅搜索分区文件 someColumn=SomePartition 而不是搜索整个表文件。

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

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

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

在提问时不可用:

如需进一步优化,您可以参考此处

于 2016-04-17T10:19:23.790 回答
0

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

于 2015-01-17T22:16:10.937 回答