困扰我的2个基本问题:
我如何确定hive用于存储表的32个文件中的每一个都位于其独特的机器上?
如果发生这种情况,我怎么能确定如果hive创建了32个映射器,它们中的每一个都可以处理其本地数据?hadoop/hdfs是否能保证这种魔力,或者作为智能应用程序确实会发生这种情况?
背景:我有一台32台机器的蜂巢集群,并且:
我的所有表都是用 "CLUSTERED BY(MY_KEY) INTO 32 BUCKETS"
我用 hive.enforce.bucketing = true;
我验证了,确实每个表都存储在用户/配置单元/仓库中的32个文件中
我正在使用HDFS复制因子2
谢谢!
数据放置由HDFS确定.它将尝试在机器上平衡字节.由于复制,每个文件将在两台机器上,这意味着您有两台候选机器用于本地读取数据.
HDFS知道每个文件的存储位置,Hadoop使用此信息将映射器放置在与存储数据相同的主机上.您可以查看作业的计数器,以查看"本地数据"和"机架本地"映射任务计数.这是Hadoop的一个功能,您无需担心.