hadoop - 使用 Hive 自定义输入格式

标签 hadoop hive

更新:好的,事实证明下面的方法不起作用是因为我使用的是较新版本的 InputFormat API ( import org.apache.hadoop.mapred 是旧的,import org.apache.hadoop.mapreduce 是新的)。我遇到的问题是将现有代码移植到新代码。有没有人有使用旧 API 编写多行 InputFormat 的经验?


尝试使用 Hadoop/Hive 处理 Omniture 的数据日志文件。文件格式是制表符分隔的,虽然在大多数情况下非常简单,但它们确实允许您在一个字段中有多个换行符和制表符,这些换行符和制表符由反斜杠转义(\\n\\t).因此,我选择创建自己的 InputFormat 来处理多个换行符,并在 Hive 尝试对选项卡进行拆分时将这些选项卡转换为空格。我刚刚尝试将一些示例数据加载到 Hive 中的表中,但出现以下错误:

CREATE TABLE (...)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 'OmnitureDataFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat';

FAILED: Error in semantic analysis: line 1:14 Input Format must implement InputFormat omniture_hit_data

奇怪的是我的输入格式确实扩展了 org.apache.hadoop.mapreduce.lib.input.TextInputFormat ( https://gist.github.com/4a380409cd1497602906 )。

Hive 是否需要您改为扩展 org.apache.hadoop.hive.ql.io.HiveInputFormat?如果是这样,我是否必须为 InputFormat 和 RecordReader 重写任何现有的类代码,或者我是否可以有效地只更改它扩展的类?

最佳答案

在查看了 LineReader 和 TextInputFormat 的代码后发现了这一点。创建了一个新的 InputFormat 和一个 EscapedLineReader 来处理这个问题。

https://github.com/msukmanowsky/OmnitureDataFileInputFormat

关于hadoop - 使用 Hive 自定义输入格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692994/

相关文章:

linux - 无法通过 hadoop Web 控制台在 hadoop 上创建目录

java - 使用库在Eclipse中运行Pig时零件文件为空

mysql - 同时使用 Hive 和 MySql JDBC 驱动程序

hadoop - 如何控制一个Hive查询同时启动的最大容器数量

hadoop - 使用 groupby 计算不同多列的 Hive 优化

java -/usr/lib/hive-hcatalog/share/hcatalog/hive-hcatalog-core-*.jar不存在

java - 如何使用 flume 将 body 中的数据拆分到不同的 channel 中?

join - 您对 Hadoop MapReduce 作业的建议

python - 如何从python连接到远程hadoop/hive(URL)?

hadoop - Hive 截断表需要太多时间