我在蜂巢上工作,我是新手。我正面临一些关于hive查询性能的问题。
分配给我的工作的地图制作者数量非常低,即使有
有数百个地图制作者可用。我试过设置
mapred.map.tasks=200
。但它只需要20到30个映射器。一世
理解,映射器的数量取决于inputsplit。在那儿
增加映射器的任何其他选项?如果没有那么为什么是
引入参数(mapred.map.tasks
)?
是否有任何我可以理解的资源来关联蜂巢 查询到map-reduce作业,即不同部分 查询是执行的吗?
答案 0 :(得分:2)
有关设置地图任务的详细信息,请查看以下链接:http://wiki.apache.org/hadoop/HowManyMapsAndReduces。基本上,mapred.map.tasks只是一个提示;它通常不会控制任何东西。
要查看如何执行Hive查询,只需在查询前加上explain
。例如:explain select foo from bar;
。如果您需要更多信息,还可以explain extended
。
答案 1 :(得分:1)
我很久以前就已经问过这个问题了,我会尽量回答这个问题,即使在提出问题的时候,这里的一些建议也不可用。
优化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;
在提问时尚未提供:
使用优化的文件格式来存储您的表,而不是使用文本文件或序列文件,您可以使用ORC(配置单元0.11 +),例如(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
使用其他引擎执行查询,而不是MapReduce,您可以使用Tez甚至Spark.To使用tez for example:
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
要进一步优化,您可以参考here
答案 2 :(得分:0)
你可以减少mapreduce.input.fileinputformat.split.maxsize&#39;增加映射器的数量(更多分裂)。