【问题标题】:TextInputFormat vs HiveIgnoreKeyTextOutputFormatTextInputFormat 与 HiveIgnoreKeyTextOutputFormat
【发布时间】:2019-08-07 08:45:42
【问题描述】:
我刚开始使用 Hive,我有一个关于输入/输出格式的问题。我正在使用OpenCSVSerde serde,但我不明白为什么文本文件的输入格式是org.apache.hadoop.mapred.TextInputFormat,但输出格式是org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat。
我已阅读此question,但我仍然不清楚为什么输入/输出格式不同。这基本上不是说您要以不同的方式存储添加到此表的数据与从表中读取的数据吗??
无论如何,任何帮助将不胜感激
【问题讨论】:
标签:
apache-spark
hadoop
hive
hiveql
【解决方案1】:
在 TextInputFormat 中,键是文件中的位置(长数据类型),值是文本行。当程序读取文件时,它可能会使用密钥进行随机读取,而在使用 HiveIgnoreKeyTextOutputFormat 写入文本数据时,保持位置没有任何价值,因为它没有意义。
因此,使用 HiveIgnoreKeyTextOutputFormat 将键作为 null 传递给下划线 RecordWriter。当 RecordWriter 收到 key 为 null 时,它会忽略 key,只写带有行分隔符的值。否则,RecordWriter 将键入键,然后是分隔符,然后是值,最后是行分隔符。