从其他服务器的ORC文件创建Hive ORC表

时间:2017-03-30 21:52:37

标签: azure hadoop hive mapreduce hiveql

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

  1. 我已经从Map R群集中复制了所有orc文件,并遵循相同的文件夹结构
  2. 创建了位置为#1
  3. 的orc格式表
  4. 然后执行此命令" MSCK REPAIR TABLE<>"
  5. 上面的步骤没有错误地传递,但是当我查询分区时,作业失败并出现以下错误

    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数据湖。

1 个答案:

答案 0 :(得分:0)

根据您的描述,根据我的理解,我认为您希望将所有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以{J}格式通过hive --orcfiledump -j -p <location-of-orc-file-or-directory>打印ORC文件元数据。