簡體   English   中英

Hive CLI 如何從 HDFS 檢索巨大的結果文件?

[英]How does Hive CLI retrieve huge result files from HDFS?

通過 CLI 執行 hive 查詢后,如下所示:

$ hive -e QUERY > output.txt
  1. Hive 客戶端將編譯 QUERY 並將其發送到 Hadoop 集群。
  2. Hadoop 執行一些作業並將結果輸出到 HDFS 上的文件(假設只有 1 個減速器)。
  3. 然后 Hive 客戶端將檢索這個單個文件,提取它,並輸出到本地 STDOUT。

流程如下圖所示:

==============
Hadoop Cluster
==============
  |         |
  |         |
  |     2. output RESULT as a single .gz file at HDFS because of 1 reducer
  |         |
  |         |
1. QUERY    |
  |         |
  |     3. Hive retrieves the RESULT as stream or a whole file ?
  |        If as a whole file, what happens when file size > memory size ?
  |         |
  |         |
  ===========
  Hive Client
  ===========
      |
      |
  4. Client outputs RESULT to stdout which is redirected to a file
      |
      |
 ===========
 Output File
 ===========

我的問題是:如果 HDFS 上的單個結果文件超大,甚至比我的本地物理內存還大,那么 Hive 客戶端如何處理?

Hive 客戶端是否檢索文件

  1. 作為一個流?
  2. 把它放到一些臨時交換文件中?
  3. 或者是其他東西 ?

您正在以流的形式獲取結果,因此如果您沒有重定向輸出,則您的過程中不會包含任何臨時文件。 你可以把它想象成在做hadoop fs -cat /THE/RESULT/FILE/OF/YOUR/HIVE/REQUEST

如果結果將是一個大數據,您可以將它們重新放在 hdfs 位置:

$ hive -e QUERY | hadoop fs -put - /HDFS/LOCATION

但是這里你應該注意網絡,因為它可能已經飽和了

另一種選擇是將數據立即存儲到另一個 Hive 表中,這樣 Hive 將為您完成所有工作,並且不會將任何結果流式傳輸/復制到您的本地機器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM