【发布时间】:2016-08-26 13:13:23
【问题描述】:
在 Oozie Hive2 操作中,我正在尝试从压缩的“.zip”文件中的“.csv”文件加载配置单元表。为了通过 Oozie Hive 操作工作流程读取 *.zip 中的文件,Hive 操作提供了“存档”标签元素。只需在 'archive' 标记元素中声明 Zip 文件,如下所示,
<archive>${ZipfilePath}#unzipFile</archive>
'archive' 元素中'#' 之后的引用是用于读取解压缩文件的临时文件夹的名称。 .zip里面的.csv文件可以通过引用路径'unzipFile/.csv'
来读取问题是 - Hive 操作无法找到归档元素中引用的路径。默认情况下,Hive 在“hdfs://nameservice1/user/hive/”位置查找解压缩文件夹,错误为
"Error: Error while compiling statement: FAILED: SemanticException Line 1:17 Invalid path ''unzipFile/file.csv'': No files matching path hdfs://nameservice1/user/hive/unzipFile/file.csv (state=42000,code=40000"
但是,我能够使用 shell 操作成功测试“归档”标签 并将文件“cat”为
cat unzipFile/file.csv
【问题讨论】:
-
天哪。 Oozie
<archive>指令的工作方式类似于 Hadoop 命令行-archives选项或 Hiveadd archives命令。它旨在提供打包的库和/或配置文件。不是数据文件。 -
Hadoop 不支持数据文件的 ZIP,因为它主要是一种 归档 格式,许多文件打包在同一个 ZIP 中。这打破了整个 MapReduce 范式。所以你必须先解压缩你的东西,然后再将它加载到 HDFS (注意你可以 GZip 单个文件,
.gz扩展名会被自动识别) -
感谢您的回复。仅仅因为 oozie Shell 操作能够读取存档中的 *.csv,我确信它应该同样适用于 Hive。
标签: csv hadoop hive oozie unzip