【发布时间】:2012-06-16 12:52:49
【问题描述】:
我正在尝试解决使用 Hive 分析 Web 日志的问题,并且我已经看到了很多示例,但我似乎找不到任何遇到此特定问题的人。
这就是我所在的位置:我已经设置了一个 AWS ElasticMapReduce 集群,我可以登录并启动 Hive。我确保add jar hive-contrib-0.8.1.jar,它说它已加载。我创建了一个名为event_log_raw 的表,其中包含一些字符串列和一个正则表达式。 load data inpath '/user/hadoop/tmp overwrite into table event_log_raw,我要去参加比赛了。 select * from event_log_raw 有效(我认为在本地,因为我没有得到 map % 和 reduce % 输出),我从样本数据中得到了 10 条记录,正确解析,一切都很好。 select count(*) from event_log_raw 也可以工作,这次创建了一个 mapreduce 作业。
我想将我的request_url 字段转换为地图,所以我运行:
select elr.view_time as event_time, elr.ip as ip,
str_to_map(split(elr.request_url," ")[1],"&","=") as params
from event_log_raw elr
Mapreduce 启动,等待,等待...失败。
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask
MapReduce Jobs Launched:
Job 0: Map: 1 HDFS Read: 0 HDFS Write: 0 FAIL
我检查来自任务跟踪器的系统日志,并查看,除其他外,
java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
<snip>
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe
at org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:406)
at org.apache.hadoop.hive.ql.exec.ExecMapper.configure(ExecMapper.java:90)
... 22 more
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe
我已经用谷歌搜索过这个,但我想我的 google-fu 不符合标准。我发现的一切都表明人们遇到了这个问题并通过运行add jar 命令来解决它。我试过了,我试过把它添加到我的hive-site.xml,我试过在本地安装它,试着把罐子放在一个 s3 桶里。尝试添加引导步骤以在引导阶段添加它(灾难)。
谁能帮我弄清楚 a.) 为什么我的任务节点找不到 RegexSerDe,以及 b.) 如何使它工作?也欢迎链接,如果它们可能揭示的不仅仅是运行 add jar。
提前致谢!
【问题讨论】:
标签: hadoop hive classnotfoundexception elastic-map-reduce