在hive和hadoop streaming-api输出之间共享数据

时间:2012-05-03 10:06:52

标签: hadoop hive hadoop-streaming

我有几个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只使用值作为输出而不是键。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你是对的。 Hive现在的一个限制是忽略Sequence文件格式中的键。现在,我指的是Hive 0.7,但我相信这也是Hive 0.8和Hive 0.9的限制。

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

答案 1 :(得分:0)

应该是fields terminated by ','
我认为,而不是fields terminated by '\t'