项目的需求:
1、用户访问网站产生的日志,然后报错到hdfs上和hbase上
2、通过编写mapreduce程序
2.1 解析后的数据保存到hdfs
2.2 解析后的数据保存到hbase
程序完成后,通过执行hadoop jar命令的步骤
(1)执行命令:集群模式执行下面的命令,
hadoop jar jfyun.jar com.yun.job.AccessLogEnhanceRunner external/jfpc/input/20150715 external/jfpc/output/20150715/access_day=20150715
(2)会发现出现下面的错误
15/09/21 21:48:41 INFO mapreduce.Job: Task Id : attempt_1442890056563_0002_r_000000_1, Status : FAILED
Error: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:131)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:611)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:129)
... 7 more
Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HTableDescriptor
at com.yun.job.AccessLogEnhanceReducer.<init>(AccessLogEnhanceReducer.java:23)
... 12 more
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HTableDescriptor
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
(3) 解决方案
3.1 原因: hadoop jar在运行的时候,没有加载到hbase相关的jar包
3.2 解决处理: 在hadoop-env.sh添加HADOOP_CLASSPTH,编辑hadoop-env.sh ,添加如下配置即可解决
export HADOOP_CLASSPATH=/home/hadoop/app/hbase-0.98.13-hadoop2/lib/*
然后再次执行hadoop jar命令,执行服务正常,终于得到解决。