combineinputformat在hive中如何工作?

yyyllmsg  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(358)

我有一个具有以下属性的配置单元表
文本文件格式
未分区
解开的
有50个文件,每个3.5 mb
遵循“描述格式化”命令中的表参数
表参数:

COLUMN_STATS_ACCURATE   true
    numFiles                50
    totalSize               170774650

我正在这个表上执行计数(*)操作,它正在运行
aws集群上有4个Map器和1个还原器
我的独立集群上有1个Map器和1个缩减器。[伪集群模式安装]
两个配置单元会话的最大拆分大小均为256mb
我想知道联合输入格式是如何工作的?
在一台机器上,由于所有文件/块都在同一台机器上,并且由于组合在一起的文件的总大小小于最大拆分大小,因此需要单个拆分,因此需要单个Map器。
在另一种情况下,aws集群产生了4个Map器。我读到combineinputformat使用机架/机器位置,但具体是如何使用的?
谢谢你提前回答。

ljo96ir5

ljo96ir51#

只是想跟进一下。
拆分不能有来自不同池的文件。
可能还有其他因素,但每个分区只有一个池。如果两个小文件存在于同一个分区中,它们将被合并,并且只需要一个Map器;如果相同的文件存在于不同的分区中,则需要两个Map器来处理。

6ss1mwsb

6ss1mwsb2#

好 啊!没有回复!!!随着时间的推移,我发现了它,今天访问我的堆栈溢出帐户,发现这个不幸的问题没有得到回答。下面是细节。
拆分是从输入路径下的文件构造的。拆分不能有来自不同池的文件。返回的每个分割可能包含来自不同文件的块。如果指定了maxsplitsize,则将同一节点上的块组合起来形成单个拆分。剩余的块然后与同一机架中的其他块合并。如果未指定maxsplitsize,则来自同一机架的块组合在单个拆分中;未尝试创建节点本地拆分。如果maxsplitsize等于块大小,那么这个类类似于hadoop中的默认拆分行为:每个块都是本地处理的拆分。子类实现inputformat.createrecordreader(inputsplit,taskattemptcontext)为combinefilesplit构造recordreader。
希望对有类似问题的人有所帮助!

相关问题