2015-11-06 174 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