【问题标题】:Share data between hive and hadoop streaming-api output在 hive 和 hadoop 流式 API 输出之间共享数据
【发布时间】:2012-05-03 10:06:52
【问题描述】:

我有几个 hadoop 流 api 程序并使用以下输出格式生成输出: “org.apache.hadoop.mapred.SequenceFileOutputFormat” 并且流式api程序可以读取输入格式为“org.apache.hadoop.mapred.SequenceFileAsTextInputFormat”的文件。

因为输出文件中的数据是这样的。

val1-1,val1-2,val1-3
val2-1,val2-2,val2-3
val3-1,val3-2,val3-3

现在我想用 hive 读取输出。我用这个脚本创建了一个表:

CREATE EXTERNAL 
TABLE IF NOT EXISTS table1
(
col1 int,
col2 string,
col3 int
)
PARTITIONED BY (year STRING,month STRING,day STRING,hour STRING)
ROW FORMAT DELIMITED
FIELDs TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileAsTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileOutputFormat'
LOCATION '/hive/table1';

当我用查询查询数据时

select * from table1

结果是

val1-2,val1-3
val2-2,val2-3
val3-2,val3-3

似乎第一列已被忽略。我认为 hive 只是使用值作为输出而不是键。有什么想法吗?

【问题讨论】:

    标签: hadoop hive hadoop-streaming


    【解决方案1】:

    你是对的。 Hive 目前的限制之一是忽略序列文件格式中的键。到目前为止,我指的是 Hive 0.7,但我认为这是 Hive 0.8 和 Hive 0.9 的限制。

    要避免这种情况,您可能必须创建一个新的输入格式,其中键为空,值是当前键和值的组合。抱歉,我知道这不是您要找的答案!

    【讨论】:

      【解决方案2】:

      应该是fields terminated by ','
      而不是fields terminated by '\t',我想。

      【讨论】:

        猜你喜欢
        • 2015-04-15
        • 2015-07-14
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 2022-01-12
        • 2015-08-14
        • 2019-10-19
        • 2017-10-18
        相关资源
        最近更新 更多