Hive CLI 如何从 HDFS 中检索巨大的结果文件?
How does Hive CLI retrieve huge result files from HDFS?
在我通过 CLI 执行配置单元查询后,如下所示:
$ hive -e QUERY > output.txt
- Hive 客户端将编译 QUERY 并将其发送到 Hadoop 集群。
- Hadoop 执行一些作业并将结果输出到文件(假设仅
1 个减速机)在 HDFS。
- 然后 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 client怎么处理?
Hive 客户端是否检索文件
- 作为流?
- 将其放入某个临时交换文件?
- 或其他什么?
您正在以流的形式获取结果,因此如果您没有重定向输出,则您的过程中不会包含任何临时文件。你可以把它想象成 hadoop fs -cat /THE/RESULT/FILE/OF/YOUR/HIVE/REQUEST
如果结果将是一个大数据,您可以将它们重新放在一个 hdfs 位置:
$ hive -e QUERY | hadoop fs -put - /HDFS/LOCATION
不过这里要注意网络,可能已经饱和了
另一种选择 是将数据立即存储到另一个 Hive table,这样 Hive 将为您完成所有工作并且不会有任何结果 streamed/copied 到您的本地计算机
在我通过 CLI 执行配置单元查询后,如下所示:
$ hive -e QUERY > output.txt
- Hive 客户端将编译 QUERY 并将其发送到 Hadoop 集群。
- Hadoop 执行一些作业并将结果输出到文件(假设仅 1 个减速机)在 HDFS。
- 然后 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 client怎么处理?
Hive 客户端是否检索文件
- 作为流?
- 将其放入某个临时交换文件?
- 或其他什么?
您正在以流的形式获取结果,因此如果您没有重定向输出,则您的过程中不会包含任何临时文件。你可以把它想象成 hadoop fs -cat /THE/RESULT/FILE/OF/YOUR/HIVE/REQUEST
如果结果将是一个大数据,您可以将它们重新放在一个 hdfs 位置:
$ hive -e QUERY | hadoop fs -put - /HDFS/LOCATION
不过这里要注意网络,可能已经饱和了
另一种选择 是将数据立即存储到另一个 Hive table,这样 Hive 将为您完成所有工作并且不会有任何结果 streamed/copied 到您的本地计算机