2013-10-17 61 views
1

我在名爲hadoop的計算機上安裝了NameNode服務。配置單元不完全遵守core-site.xml中的fs.default.name/fs.defaultFS值

core-site.xml文件具有fs.defaultFS(相當於fs.default.name)設置爲以下:

<property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://hadoop:8020</value> 
</property> 

我有一個非常簡單的表稱爲當前存在於對HDFS蜂房服務器test_table。也就是說,它存儲在/user/hive/warehouse/test_table之下。它是在蜂巢用一個非常簡單的命令創建:

CREATE TABLE new_table (record_id INT); 

如果我試圖將數據加載到表本地(即使用LOAD DATA LOCAL),一切都進行預期。但是,如果數據存儲在HDFS上並且我想從那裏加載,則會出現問題。

我運行一個非常簡單的查詢嘗試此負載:

hive> LOAD DATA INPATH '/user/haduser/test_table.csv' INTO TABLE test_table; 

這樣做會導致以下錯誤:

FAILED: SemanticException [Error 10028]: Line 1:17 Path is not legal ''/user/haduser/test_table.csv'': 
Move from: hdfs://hadoop:8020/user/haduser/test_table.csv to: hdfs://localhost:8020/user/hive/warehouse/test_table is not valid. 
Please check that values for params "default.fs.name" and "hive.metastore.warehouse.dir" do not conflict. 

由於錯誤狀態,它正試圖從hdfs://hadoop:8020/user/haduser/test_table.csv移到hdfs://localhost:8020/user/hive/warehouse/test_table。第一條路是正確的,因爲它引用了hadoop:8020;第二條路徑不正確,因爲它引用了localhost:8020

core-site.xml文件明確指出要使用hdfs://hadoop:8020hive-site.xml中的hive.metastore.warehouse值正確指向/user/hive/warehouse。因此,我懷疑這個錯誤信息是否有真正的價值。

如何在創建表時使Hive服務器使用正確的NameNode地址?

回答

4

我發現Hive metastore跟蹤每張表的位置。您可以在Hive控制檯中看到該位置正在運行以下內容。

hive> DESCRIBE EXTENDED test_table; 

因此,如果core-site.xml中的NameNode,而metastore服務仍在運行改爲出現此問題。因此,要解決此問題的服務應該是機器上重新啓動:

$ sudo service hive-metastore restart 

然後,metastore將使用新fs.defaultFS爲新創建這樣的表。

已經存在的表

對於已經存在的可以通過運行下面的命令集來校正表中的位置。這些是從Cloudera documentation獲得的,以配置Hive Metastore使用高可用性。

$ /usr/lib/hive/bin/metatool -listFSRoot 
... 
Listing FS Roots.. 
hdfs://localhost:8020/user/hive/warehouse 
hdfs://localhost:8020/user/hive/warehouse/test.db 

更正NameNode的位置:

$ /usr/lib/hive/bin/metatool -updateLocation hdfs://hadoop:8020 hdfs://localhost:8020 

現在上市的NameNode是正確的。

$ /usr/lib/hive/bin/metatool -listFSRoot 
... 
Listing FS Roots.. 
hdfs://hadoop:8020/user/hive/warehouse 
hdfs://hadoop:8020/user/hive/warehouse/test.db