【问题标题】:Create Hive ORC table from ORC files of other server从其他服务器的 ORC 文件创建 Hive ORC 表
【发布时间】:2017-08-25 00:53:40
【问题描述】:

我们有 2 个集群,一个是 Map R,另一个是我们自己的。我们希望使用 Map R 数据在我们自己的硬件中创建新设置。

  1. 我已经从 Map R 集群中复制了所有的 orc 文件并遵循相同的文件夹结构
  2. 创建了一个位置为 #1 的兽人格式表
  3. 然后执行这个命令“MSCK REPAIR TABLE ”

上述步骤顺利通过,但当我查询分区时,作业失败并出现以下错误

java.lang.IllegalArgumentException: Buffer size too small. size = 262144 needed = 4958903
    at org.apache.hadoop.hive.ql.io.orc.InStream$CompressedStream.readHeader(InStream.java:193)
    at org.apache.hadoop.hive.ql.io.orc.InStream$CompressedStream.read(InStream.java:238)

谁能告诉我我们可以直接从 orc 文件创建 HIVE ORC 分区表吗?

我的存储是 Azure 数据湖。

【问题讨论】:

    标签: azure hadoop hive mapreduce hiveql


    【解决方案1】:

    根据您的描述,根据我的理解,我认为您想将所有orc文件从一个集群复制到另一个集群并将这些orc文件加载为hive表。

    为此,请尝试按照以下命令创建用于加载 orcfile 数据的外部表。

    CREATE EXTERNAL TABLE IF NOT EXSISTS <table name> (<column_name column_type>, ...)
        ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
        STORED AS ORC 
        LOCATION '<orcfile path>'
    

    如果不知道orc文件的列列表,可以参考Hive手册ORC File Dump Utility通过hive --orcfiledump -j -p &lt;location-of-orc-file-or-directory&gt;以JSON格式打印ORC文件元数据。

    【讨论】:

    • 是的。你的理解是正确的。但我不是通过“hadoop distcp”命令复制的。因为我的新存储帐户是 Azure Data Lake。当我执行小数据集计数(*)时,我会看到上面的映射器 %age。
    • 错误:java.lang.IllegalArgumentException:缓冲区太小。在 org.apache.hadoop.hive.ql.io.orc.InStream.uncompressStream( InStream.java:628) at org.apache.hadoop.hive.ql.io.orc.EncodedReaderImpl.readEncodedColumns(EncodedReaderImpl.java:309) at org.apache.hadoop.hive.llap.io.encoded.OrcEncodedDataReader.callInternal( OrcEncodedDataReader.java:278)
    • @Harish 请尝试参考 Hive 问题link 来解决它。
    猜你喜欢
    • 2014-02-16
    • 2015-10-22
    • 1970-01-01
    • 2018-04-10
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多