在我通过 CLI 执行配置单元查询后,如下所示:
$ hive -e QUERY > output.txt
- Hive 客户端将编译 QUERY 并将其发送到 Hadoop 集群。
- Hadoop 执行一些作业并将结果输出到 HDFS 的文件(假设只有 1 个减速器)。
- 然后 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 客户端是否检索文件
- 作为流?
- 把它放到一些临时交换文件中?
- 或者是其他东西 ?