2015-11-06 46 views
2

我有一个大的日志文件,我加载到HDFS。根据机架感知,HDFS将复制到不同的节点。Hive是否重复数据?

现在我将同一个文件加载到配置单元表中。这些命令如下:

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; 

现在,当我去看看“/用户/蜂巢/仓储/”目录下有一个表文件,并将其复制到本地,它拥有所有的日志文件数据。

我的问题是:在HDFS现有文件被复制。然后将该文件加载到存储在HDFS的配置单元表中也会被复制。

是不是相同的文件存储6次(假设复制因子是3)?那会浪费资源。

+0

这是正确的。因此,您必须明智地选择您希望保留在HDFS中的数据。 – raunakjhawar

+0

如果要选择性地更改日志文件(或Hive表)的复制因子,请查看http://stackoverflow.com/questions/33292277/how-to-change-hdfs-replication-factor-for-蜂房独 –

回答

2

从你的问题来看,它表示你已经使用配置单元创建了一个INTERNAL表,并且你正在将数据从HDFS位置加载到HIVE表中。

当使用LOAD DATA INPATAH命令数据加载到内部表中,将其移动从主位置数据到另一个位置。你的情况应该是/user/hive/warehouse/log_analysis。所以基本上它提供了数据的新地址和新的HDFS位置,并且您不会在以前的位置看到任何东西。

将数据从一个位置移动到HDFS上的另一个位置时。 NameNode接收数据的新位置,并删除该数据的所有旧元数据。因此,不会有任何重复的数据和数据信息,只有3个复制,它将只存储3次。

我希望它对你很清楚。

2

正确,如果您正在从HDFS加载数据,数据从HDFS移动到/user/hive/warehouse/yourdatabasename/tablename