Hive CLI如何从HDFS中检索大量结果文件?

时间:2016-03-31 02:13:53

标签: hadoop hive beeline

通过CLI执行hive查询后,如下所示:

$ hive -e QUERY > output.txt
  1. Hive客户端将编译QUERY并将其发送到Hadoop集群。
  2. Hadoop执行一些作业并将结果输出到文件(仅假设 1个减速机)在HDFS。
  3. 然后Hive客户端将检索此单个文件, 提取它,并输出到本地STDOUT。
  4. 流程如下图所示:

    ==============
    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客户端如何处理它?<​​/ p>

    Hive客户端是否检索文件

    1. 作为流?
    2. 把它放到一些临时交换文件中?
    3. 或其他什么?

1 个答案:

答案 0 :(得分:2)

您将结果作为流获取,因此如果您尚未重定向输出,则过程中不会包含任何临时文件。您可以将其想象为hadoop fs -cat /THE/RESULT/FILE/OF/YOUR/HIVE/REQUEST

如果结果是大数据,您可以将它们放在hdfs位置:

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

但在这里你应该注意网络,因为它可能已经饱和

另一种选择是将数据永久存储到另一个Hive表中,这样Hive将为您完成所有工作,并且不会将重新传输/复制到本地计算机