hadoop 编程 学习之路
来源:互联网 发布:数据库本地连接不上 编辑:程序博客网 时间:2024/06/16 16:52
现在开始好好学习hadoop ,以后好找工作。
一、在写mapreduce 程序的时候,会报错:
Error: java.lang.RuntimeException:java.lang.ClassNotFoundException: Class Class17.hdfs.test.MyMR$MyMap not foundat org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1905)at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:722)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)
错误提示:说类找不到,觉得很奇怪,我定义的类找不到?明明就在那!!
解决方式: 将在eclipse中引到resource下的mapred-site.xml文件中的配置项: mapreduce.framework.name 由yarn改为local就可以了。
知识点:
mapreduce 有3中运行模式:http://www.aboutyun.com/thread-14792-1-1.html
1、集群模式:
1) 将mapreduce.framework.name配成yarn,打成jar包在yarn集群中执行,
2)输入输出只能在hdfs系统中
3)若是在eclipse中调试,将程序提交到集群中,则要用一下方法:
在linux的eclipse中直接运行main方法,进而将程序提交到集群中去运行,但是必须采取以下措施:
①在工程src目录下加入 mapred-site.xml 和 yarn-site.xml 这两个配置文件或者在代码中加入:
- 1
- 2
- 3
② 同时将工程打成jar包(xxx.jar),并在main方法中添加一个conf的配置参数 conf.set(“mapreduce.job.jar”,”路径/xxx.jar”);
mapreduce.framework.name设置为yarn,当客户端配置mapreduce.framework.name为yarn时, 客户端会使用YARNRunner与服务端通信, 而YARNRunner真正的实现是通过ClientRMProtocol与RM交互, 包括提交Application, 查询状态等功能。但是根据任务的特性,分为两种方式执行任务:
uber模式: Uber模式是Hadoop2.0针对MR小作业的优化机制。通过mapreduce.job.ubertask.enable来设置是否开启小作业优化,默认为false。
如果用Job足够小,则串行在的一个JVM完成该JOB,即MRAppMaster进程中,这样比为每一个任务分配Container性能更好。
non-uber: Uber只能执行一小部门的任务,
non-uber:
2、本地模式:
1)本地调试代码时在eclipse中执行程序,提交任务,此时要将mapreduce.framework.name 配成local即可。
2)在执行时由mapred.LocalJobRunner执行job,
3)job id前面好有local字样:mapred.LocalJobRunner: Finishing task: attempt_local836998709_0001_r_000000_0
输入输出均可为本地文件系统。
4)mapreduce.framework.name设置为local,则不会使用YARN集群来分配资源,在本地节点执行。在本地模式运行的任务,无法发挥集群的优势。注:在web UI是查看不到本地模式运行的任务。
3、classic :
老一些的版本还有一个JobTracker的实现类,即:classic。用于和MapReduce1.X兼容用的,高一些的版本已经没有这个实现类了。
参考链接:
http://blog.csdn.net/a2011480169/article/details/51834256
http://m.blog.csdn.net/litianxiang_kaola/article/details/71289269
http://www.aboutyun.com/thread-14792-1-1.html
注:在用eclipse编写mareduce任务时,一般都是使用本地模式在本地测试成功后,再打成jar包,提交到yarn集群,然后分发到各台nodemanager上执行任务。
二、
java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: Class17.hdfs.test.MyMR$MyMap.<init>()at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)Caused by: java.lang.RuntimeException:java.lang.NoSuchMethodException: Class17.hdfs.test.MyMR$MyMap.<init>()
java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: Class17.hdfs.test.MyMR$MyMap.<init>()at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)Caused by: java.lang.RuntimeException:java.lang.NoSuchMethodException: Class17.hdfs.test.MyMR$MyMap.<init>()
解决方法: 将类改为static 即可。报的错误:init初始化时的问题。不知道是为啥。
三、关于权限问题:
报permission denied : /tmp
解决办法: 在hdfs-site.xml中增添配置项: dfs.permissions.enabled=false,即不经过权限校验。但是修改之后,我的还报错。所以又执行命令
bin/hdfs dfs -chmod -R 777 / 执行以后,hdfs中的所有文件权限都开放了,也就执行成功了。
四、yarn配置文件配置出错
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.mapred.ShuffleHandler not found at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2079) at org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.serviceInit(AuxServices.java:121) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163) at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:107) at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl.serviceInit(ContainerManagerImpl.java:234) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163) at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:107) at org.apache.hadoop.yarn.server.nodemanager.NodeManager.serviceInit(NodeManager.java:253) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163) at org.apache.hadoop.yarn.server.nodemanager.NodeManager.initAndStartNodeManager(NodeManager.java:462) at org.apache.hadoop.yarn.server.nodemanager.NodeManager.main(NodeManager.java:509)Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.mapred.ShuffleHandler not found at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2047) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2071) ... 10 moreCaused by: java.lang.ClassNotFoundException: Class org.apache.hadoop.mapred.ShuffleHandler not found at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1953) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2045) ... 11 more2017-09-13 17:24:40,069 INFO org.apache.hadoop.service.AbstractService: Service org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices failed in state INITED; cause: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.mapred.ShuffleHandler not foundjava.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.mapred.ShuffleHandler not found at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2079)
现象: 一台nodemanager启动不起来,在集群上提交yarn时,报错:
7/09/13 17:23:20 INFO mapreduce.Job: Job job_1505292313436_0004 failed with state FAILED due to: Application application_1505292313436_0004 failed 2 times due to AM Container for appattempt_1505292313436_0004_000002 exited with exitCode: 1 due to: Exception from container-launch.Container id: container_1505292313436_0004_02_000001Exit code: 1Stack trace: ExitCodeException exitCode=1: at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)at org.apache.hadoop.util.Shell.run(Shell.java:455)at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:702)at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:197)at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:299)at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:81)at java.util.concurrent.FutureTask.run(FutureTask.java:262)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)刚开始看这个问题很懵圈,不知咋回事,在网上查说是 yarn.nodemanager.aux-services的配置问题,后来查看配置文件,配的值是“mapreduce_shuffle”,没问题啊, 后来又仔细一看,是多写了一对<configuration></configuration> 这个在课上老师讲过,还真被我遇到了。呵呵呵。后来修改了配置重新启动还是不行!! 但其他的节点能启动nodemanager,配置文件是一模一样的,最后实在是没办法了,只能吧其他节点的包拷贝过来,最后启动成功。
运行du -sh * 查看原来的安装包比新拷过来的小, 这才是真正原因,肯定是原来的安装包里少了jar包。
http://blog.csdn.net/samhacker/article/details/18542487
- hadoop 编程 学习之路
- Hadoop学习之路
- HADOOP学习之路
- hadoop学习之路
- hadoop初学之MapReduce编程模型学习
- Hadoop-2.4.1学习之Streaming编程
- 学习hadoop之路 开始
- hadoop,spark学习之路
- hadoop学习笔记之二:MapReduce基本编程
- hadoop学习序曲之linux基础篇--shell编程入门
- 【Hadoop入门学习系列之二】HDFS架构和编程
- 【Hadoop入门学习系列之五】MapReduce 2.0编程实战
- Hadoop MapReduce编程模型之InputFormat接口学习
- hadoop之partitioner编程
- hadoop之combiners编程
- hadoop之Partitioner编程
- hadoop 学习之hadoop基础
- hadoop学习之hadoop安装
- KMP 模式串匹配
- 谷歌浏览器
- 浅谈安卓按键下的变量命名
- P1208 [USACO1.3]混合牛奶 Mixing Milk
- SpringMVC拦截器Interceptor
- hadoop 编程 学习之路
- ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock
- 牛客 题库
- python:7:循环与迭代
- matlab 2016a破解中文版安装教程(windows)
- WEB前端开发(一)-------------标记(一)
- java中length,length(),size()区别
- POJ 1797 Heavy Transportation——spfa
- C++ 标准库 string类型(三)