我有一个大型日志文件,我已加载到HDFS
。 HDFS
将根据机架感知复制到不同的节点。
现在我将同一个文件加载到配置单元表中。命令如下:
create table log_analysis (logtext string) STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/';
LOAD DATA INPATH '/user/log/apache.log' OVERWRITE INTO TABLE log_analysis;
现在,当我去查看'/ user / hive / warehouse /'目录时,有一个表文件并将其复制到本地,它包含所有日志文件数据。
我的问题是:HDFS
中的现有文件已被复制。然后,在HDFS
中存储的hive表中加载该文件也会被复制。
这是不是同一个文件存储6次(假设复制因子是3)?这将浪费资源。
答案 0 :(得分:3)
您的问题表明您已使用配置单元创建了INTERNAL
表格,并且您正在将数据加载到HIVE
位置的HDFS
表格中。
使用LOAD DATA INPATAH
命令将数据加载到内部表时,它会将数据从主位置移动到另一个位置。在您的情况下,它应该是/user/hive/warehouse/log_analysis
。所以基本上它提供了新的地址和数据的新HDFS位置,你不会在以前的位置看到任何东西。
将数据从一个位置移动到HDFS上的另一个位置时。 NameNode接收数据的新位置,并删除该数据的所有旧元数据。因此,不存在任何数据和数据的重复信息,并且将只有3个复制,并且它将仅存储3次。
我希望你能清楚。
答案 1 :(得分:3)
正确,如果您要加载HDFS
的数据,数据会从HDFS
移至/user/hive/warehouse/yourdatabasename/tablename
。