combineInputFormat 在 Hive 中如何工作?
How does combineInputFormat works in Hive?
我有一个具有以下属性的 Hive table
- 文本文件格式
- 未分区
- 未存储
- 有 50 个文件,每个文件大小为 3.5 MB
遵循 "DESCRIBE FORMATTED" 命令中的 table 参数
Table 参数:
COLUMN_STATS_ACCURATE true
numFiles 50
totalSize 170774650
我正在对此 table 执行计数 (*) 操作,它是 运行
- AWS 集群上的 4 个映射器和 1 个缩减器
- 我的独立集群上有1个mapper和1个reducer。[伪集群模式安装]
两个 Hive 会话的最大拆分大小为 256MB
我想知道组合输入格式是如何工作的?
在一台机器上,数据被组合在一起,因为所有 files/blocks 都在同一台机器上,并且由于合并在一起的文件的总大小小于最大拆分大小,因此进行一次拆分,因此需要一个映射器。
在另一种情况下,AWS 集群产生了 4 个映射器。我读到 CombineInputFormat 使用 rack/machine 位置,但具体如何使用?
提前感谢您的所有回答。
好的!无回复!!!随着时间的推移,我弄明白了,今天访问我的 Stack Overflow 帐户时,发现这个倒霉的问题没有得到解答。所以下面是细节。
拆分是根据输入路径下的文件构建的。拆分不能包含来自不同池的文件。返回的每个拆分可能包含来自不同文件的块。如果指定了 maxSplitSize,则同一节点上的块将组合以形成单个拆分。剩下的块然后与同一机架中的其他块组合。如果未指定 maxSplitSize,则来自同一机架的块将合并为一个拆分;没有尝试创建 node-local 拆分。如果 maxSplitSize 等于块大小,那么这个 class 类似于 Hadoop 中的默认拆分行为:每个块都是本地处理的拆分。 Subclasses 实现 InputFormat.createRecordReader(InputSplit, TaskAttemptContext) 为 CombineFileSplit 构造 RecordReader。
希望对有类似问题的人有所帮助!
只是想跟进此事。
A split cannot have files from different pools.
可能还有其他因素,但每个分区只有一个池。如果两个小文件存在于同一个分区,则将它们合并,只需要一个Mapper,如果相同文件存在于不同分区,则需要两个Mapper来处理。
我有一个具有以下属性的 Hive table
- 文本文件格式
- 未分区
- 未存储
- 有 50 个文件,每个文件大小为 3.5 MB
遵循 "DESCRIBE FORMATTED" 命令中的 table 参数
Table 参数:
COLUMN_STATS_ACCURATE true
numFiles 50
totalSize 170774650
我正在对此 table 执行计数 (*) 操作,它是 运行
- AWS 集群上的 4 个映射器和 1 个缩减器
- 我的独立集群上有1个mapper和1个reducer。[伪集群模式安装]
两个 Hive 会话的最大拆分大小为 256MB
我想知道组合输入格式是如何工作的?
在一台机器上,数据被组合在一起,因为所有 files/blocks 都在同一台机器上,并且由于合并在一起的文件的总大小小于最大拆分大小,因此进行一次拆分,因此需要一个映射器。
在另一种情况下,AWS 集群产生了 4 个映射器。我读到 CombineInputFormat 使用 rack/machine 位置,但具体如何使用?
提前感谢您的所有回答。
好的!无回复!!!随着时间的推移,我弄明白了,今天访问我的 Stack Overflow 帐户时,发现这个倒霉的问题没有得到解答。所以下面是细节。
拆分是根据输入路径下的文件构建的。拆分不能包含来自不同池的文件。返回的每个拆分可能包含来自不同文件的块。如果指定了 maxSplitSize,则同一节点上的块将组合以形成单个拆分。剩下的块然后与同一机架中的其他块组合。如果未指定 maxSplitSize,则来自同一机架的块将合并为一个拆分;没有尝试创建 node-local 拆分。如果 maxSplitSize 等于块大小,那么这个 class 类似于 Hadoop 中的默认拆分行为:每个块都是本地处理的拆分。 Subclasses 实现 InputFormat.createRecordReader(InputSplit, TaskAttemptContext) 为 CombineFileSplit 构造 RecordReader。
希望对有类似问题的人有所帮助!
只是想跟进此事。
A split cannot have files from different pools.
可能还有其他因素,但每个分区只有一个池。如果两个小文件存在于同一个分区,则将它们合并,只需要一个Mapper,如果相同文件存在于不同分区,则需要两个Mapper来处理。