【问题标题】:oozie - Using archive file in hive actionoozie - 在配置单元操作中使用存档文件
【发布时间】: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 &lt;archive&gt; 指令的工作方式类似于 Hadoop 命令行 -archives 选项或 Hive add archives 命令。它旨在提供打包的库和/或配置文件。不是数据文件。
  • Hadoop 不支持数据文件的 ZIP,因为它主要是一种 归档 格式,许多文件打包在同一个 ZIP 中。这打破了整个 MapReduce 范式。所以你必须先解压缩你的东西,然后再将它加载到 HDFS (注意你可以 GZip 单个文件,.gz 扩展名会被自动识别)
  • 感谢您的回复。仅仅因为 oozie Shell 操作能够读取存档中的 *.csv,我确信它应该同样适用于 Hive。

标签: csv hadoop hive oozie unzip


【解决方案1】:

由于 Oozie hive 操作在集群中而不是在边缘节点上运行,所有支持文件都需要在 hdfs 路径中。也就是说,hive 操作本身将在 Oozie 在运行时选择的任何节点中运行。将文件上传到 hdfs 路径,以便从集群中的任何节点都可以访问它

【讨论】:

    【解决方案2】:

    Shell 操作会将文件本地复制到运行脚本的容器中。这就是它起作用的原因。

    蜂巢2:

    LOAD DATA [LOCAL] INPATH
    

    将文件移入容器后,您必须使用 LOCAL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      相关资源
      最近更新 更多