我使用的是hive。
所有的數據也是在hive中 load data inpath 導入的
導入的數據時保存到虛擬路徑 hdfs:////user/hive/warehouse
以一個表一個文件夾的形式
兩天來一直面對着一個困惑
從hive中load進去的數據只有600G但是頁面顯示的DFS Used卻爲4.2T
這個數據時很不正常的
因爲簡單地算一下 600G dfs.replication = 3 那麼也在1.4T左右的空間。
通過查看 browse the file system 看到三個文件夾
/data 對應於 dfs.data.dir
/system
/user 對應於 hive.metastore.warehouse.dir
問題已經解決,空間容量已經下降到正常值了,可以正常使用運算了。
原因是:
運算過程產生的中間的數據並沒有刪除掉。因爲有些操作產生的結果並沒有放到warehouse中,那麼這部分數據就放到了/data目錄下,系統沒能夠自動刪除這部分數據,所以導致空間上漲很快。
例如;
create table test( ip string );
insert overwrite table test select ip from blog;
這樣結果是保存到hive中的;
但如果直接
select ip from blog;
那麼結果是臨時放在/data目錄下的,但是最終卻沒有釋放。
這個dfs.data.dir 默認目錄本爲/tmp由liunx系統定期自動刪除,路徑被覆蓋爲/data/hadoop-0.19.1/dfsdata後系統就找不到了,所以無法自動刪除。
不可以直接刪除這個目錄,否則會導致全部數據塊丟失。
必須進入hdfs刪除
方法如下
hadoop fs -rmr hdfs:////data/
hive中的操作並不是 實時執行的,會有一定的延遲,所以有時執行操作,並不會立即看的到。