当我运行配置单元查询时,如何减少映射器的数量?

时间:2016-07-19 12:53:32

标签: hadoop mapreduce hive cloudera hadoop-partitioning

我正在使用hive,

我有24个json文件,总大小为300MB(在一个文件夹中),所以我创建了一个外部表(即table1),并将数据(即24个文件)加载到外部表中。

当我在该外部表(即table1)之上运行select查询时,我观察到3个映射器和1个reducer正在运行。

之后我又创建了一个外部表(即table2)。

我压缩了我的输入文件(包含24个文件的文件夹)。

示例:BZIP2

所以它压缩数据但是用扩展名“.BZiP2”创建的24个文件 (i.e..file1.bzp2,... ..file24.bzp2)。

之后,我将压缩文件加载到外部表中。

现在,当我运行select查询时,它需要24个映射器和1个reducer。与未压缩数据(即文件)相比,观察到的CPU时间花费的时间更多。

如果数据是压缩格式(即table2选择查询),如何减少映射器的数量?

如果数据是压缩格式(即table2选择查询),如何减少CPU时间? CPU时间如何影响性能?

3 个答案:

答案 0 :(得分:1)

仅当文件位于同一数据节点上时,映射器的数量才能小于文件数。如果文件位于不同的datanode上,则映射器的数量永远不会少于文件数。连接所有/某些文件并将它们放入表位置。使用cat命令连接非压缩文件。你有24个映射器,因为你有24个文件。参数mapreduce.input.fileinputformat.split.minsize / maxsize用于分割更大的文件。

答案 1 :(得分:0)

如果文件大小为200000字节,则设置

的值
set mapreduce.input.fileinputformat.split.maxsize=100000;
set mapreduce.input.fileinputformat.split.minsize=100000;

将触发地图缩减作业的200000/100000 = 2映射器

设置

的值
set mapreduce.input.fileinputformat.split.maxsize=50000;
set mapreduce.input.fileinputformat.split.minsize=50000;

将触发200000/50000 = 4映射器执行相同的工作。

读:

splittable-gzip

set-mappers-in-pig-hive-and-mapreduce

how-to-control-the-number-of-mappers-required-for-a-hive-query

答案 2 :(得分:0)

为了在TEZ是执行引擎时手动设置Hive查询中的映射器数量,可以使用配置tez.grouping.split-count

登录HIVE CLI时设置它:set tez.grouping.split-count=4将创建4个映射器 可以通过Ambari添加hive-site.xml中的条目。如果通过hive-site.xml设置,则需要重新启动HIVE。