如何确保RegexSerDe是提供给我的Hadoop节点?(How do I make sure R

2019-09-18 02:11发布

我试图攻击与蜂巢分析网络日志的问题,我已经看到了很多例子在那里,但我似乎无法找到与这一具体问题的人。

下面是我在哪里:我已经建立了一个AWS ElasticMapReduce集群,我可以登录,和我火了蜂巢。 我一定要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作品(我想在本地,因为我没有得到地图%和减少%输出),而我是从我的样本数据,分析正确,一切都很好让我的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'd和SO'ed这一点,但我想我的谷歌福是不及格。 一切我发现点有这个麻烦,通过运行解决它的乡亲add jar命令。 我已经试过了,我试着将它添加到我的hive-site.xml ,我试图在本地拥有它,试图把罐在S3存储桶。 尝试添加自举步骤到在引导阶段(灾难)添加它。

谁能帮我找出一个。)为什么我的任务节点找不到RegexSerDe,和b)如何使这项工作? 链接亦欢迎,如果他们有可能会透露出不仅仅是运行更add jar

提前致谢!

Answer 1:

解决这个问题的最简单的方法是添加上的所有任务跟踪所有这些罐子到Hadoop的lib目录下,我们这样做了一堆东西:

scp library.jar task-tracker-1:~/<HADOOP_HOME>/lib/

或在引导脚本EMR:

s3cmd get s3://path/to/lib.jar /home/hadoop/lib/

当我们使用EMR,我们只是有一个S3目录满,我们会同步到Hadoop的lib目录中jar文件:

s3cmd sync s3://static/jars/ /home/hadoop/jars
cp jars/*.jar lib/

如果你使用了Oozie,你也可以把罐子在oozie.share.lib目录。



Answer 2:

我的SERDE jar文件复制到

hadoop/lib

目录还做了Hadoop的(甚至是服务器),以真正的工作重新启动。



Answer 3:

我想你需要的是这个jar文件添加到HIVE_AUX_JARS_PATH为如变量

如果您的hive-contrib-0.8.1.jar/usr/hive/lib ,然后运行

export HIVE_AUX_JARS_PATH=/usr/hive/lib/hive-contrib-0.8.1.jar:$HIVE_AUX_JARS_PATH

或者如果HIVE_AUX_JARS_PATH不存在,只是运行

export HIVE_AUX_JARS_PATH=/usr/hive/lib/hive-contrib-0.8.1.jar

在那之后开始蜂巢会话,你会发现一切都只是正常工作。

如果你需要这个变量永久地把这个成.profile文件或.bash_profile根据您的操作系统



文章来源: How do I make sure RegexSerDe is available to my Hadoop nodes?