[英]How Hive stores the data (loaded from HDFS)?
我對Hadoop(HDFS和Hbase)和Hadoop生態系統(Hive,Pig,Impala等)很陌生。 我對Hadoop組件(例如NamedNode,DataNode,Job Tracker,Task Tracker)以及它們如何協同工作以高效地存儲數據有很好的了解。
在嘗試了解Hive等數據訪問層的基礎時,我需要了解在Hive中創建的表數據到底存儲在哪里? 我們可以在Hive中創建外部和內部表。 由於外部表可以位於HDFS或任何其他文件系統中,因此Hive不會在倉庫中存儲此類表的數據。 內部表呢? 該表將被創建為Hadoop集群上數據節點之一上的目錄。 一旦從本地或HDFS文件系統將數據加載到這些表中,是否還會創建其他文件來將數據存儲在Hive中創建的表中?
例如說:
Hive是否要在emp_feedback目錄中創建文件副本? 會導致數據冗余嗎?
創建托管表將在Hive倉庫目錄中創建一個與表名相同的目錄(通常位於/ user / hive / warehouse / dbname / tablename ),並且在metastore(RDBMS / HCat)中創建表結構(Hive Metadata) )。
在將數據加載到表上之前,此目錄(與配置單元倉庫中的表名相同)為空。
可能有2種情況。
如果表是外部表,則數據根本不會復制到倉庫目錄。
如果該表是托管表(非外部表),則在將數據加載到表時,會將其從當前HDFS位置移動( 而不是復制 )到Hive倉庫目錄9 / user / hive / warehouse //。 因此,這不會復制數據。
警告:始終建議創建外部表,除非該數據僅由配置單元使用。 刪除托管表將刪除HDFS(HIVE倉庫)中的數據。
這不會導致數據冗余。 對於托管(非外部)表,Hive將數據移入其倉庫目錄。 在您的示例中,數據將從HDFS上的原始位置移至“ / users / big_data / hive / emp_feedback”。 小心刪除托管表,這也會導致HDFS上的數據刪除。
您可以在兩天內發送數據
A)使用LOAD DATA INPATH'file_location_of_csv'INTO TABLE emp_feedback; 請注意,此命令將刪除源目錄中的內容並創建一個內部表
要么)
B)使用copyFromLocal或put命令將本地文件復制到HDFS,然后創建外部表並將數據復制到表中。 現在,數據不會從源中移出。 您可以刪除外部表,但仍然可以使用源數據。
例如
create external table emp_feedback (
emp_id int,
emp_name string
)
location '/location_in_hdfs_for_csv file';
當您刪除外部表時,它只會刪除HIVE表的元數據。 HDFS文件位置中仍然存在數據。
回答您的問題:
對於外部表:
Hive不會將數據移到其倉庫目錄中。 如果刪除了外部表,那么將刪除表元數據,但不會刪除數據。
對於內部表
Hive將數據移動到其倉庫目錄中。 如果刪除了表,則表元數據和數據將被刪除。
供你參考
內部和外部表之間的區別:
對於外部表
外部表將文件存儲在HDFS服務器上,但表未完全鏈接到源文件。
如果刪除外部表,該文件仍保留在HDFS服務器上。
例如,如果您使用HIVE-QL在HIVE中創建一個名為“ table_test”的外部表並將該表鏈接到文件“ file”,則從HIVE中刪除“ table_test”不會從HDFS中刪除“ file”。
有權訪問HDFS文件結構的任何人都可以訪問外部表文件,因此需要在HDFS文件/文件夾級別管理安全性。
元數據保留在主節點上,從HIVE中刪除外部表只會刪除元數據,而不會刪除數據/文件。
對於內部表
根據hive.metastore.warehouse.dir中的設置存儲在目錄中,默認情況下,內部表存儲在以下目錄/user/hive/warehouse
您可以通過更新配置文件中的位置來更改它。
刪除表將分別從主節點和HDFS中刪除元數據和數據。 內部表文件安全性僅通過HIVE控制。 需要在HIVE內部管理安全性,可能需要在架構級別(取決於組織)進行管理。
Hive可能具有內部或外部表,這是一個會影響數據加載,控制和管理方式的選擇。
在以下情況下使用EXTERNAL表:
該數據還用於Hive之外。 例如,數據文件由不鎖定文件的現有程序讀取和處理。 即使在放置DROP TABLE之后,數據也需要保留在底層位置。 如果您將多個模式(表或視圖)指向單個數據集,或者正在遍歷各種可能的模式,則可以應用此方法。 Hive不應擁有數據和控件設置,目錄等,否則您可能會有另一個程序或進程來執行這些操作。 您不是基於現有表(AS SELECT)創建表。
在以下情況下使用INTERNAL表:
數據是臨時的。 您希望Hive完全管理表和數據的生命周期。
資源:
HDInsight:Hive內部和外部表簡介
Hadoop- HIVE中的內部和外部表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.