我正在使用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时间如何影响性能?
答案 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
映射器执行相同的工作。
读:
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。