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

How to reduce number of mappers, when I am running hive query?

我正在使用配置单元,

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

当我在外部 table(即 table1)之上 运行 select 查询时,我观察到 3 个映射器和 1 个减速器是 运行.

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

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

示例:BZIP2

因此它压缩了数据,但创建了 24 个扩展名为“.BZiP2”的文件 (即..file1.bzp2,.....file24.bzp2)。

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

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

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

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

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

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

将为 map reduce 作业触发 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

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

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

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