第一个MapReduce案例集群模式&本地模式
来源:互联网 发布:每天做梦知乎 编辑:程序博客网 时间:2024/06/06 23:52
第一个MapReduce案例集群模式&Linux本地模式
记录一下自己在开发MapReduce程序的过程。
思考点是:如何下手,怎样开发。
1.对于平台的要求:环境已搭建完毕,且测试通过。
我自己平台是:Centos6.4 +jdk1.7+hadoop2.5.1 都是64位的
我这里写的是非常简单的一种:
创建一个Java工程,导入jar包,写三个类。分别是:Mapper类、Reducer类、Runner类
Mapper类、Reducer类就是继承框架的虚类中的Mapper、Reducer ,实现其方法:map()、reduce()。
Runner类是描述job作业(使用那个Mapper、哪个Reducer),然后将作业提交给集群。
关于MapReduce原理这里就不说了。
先写Mapper类:
Reducer类代码:
Runner类代码:
上面的代码是运行在集群上的,如果运行在本地是将文件输入路径和输出路径写为本地的路径即可。对于其他的不需要改变。
在创建完成这三个类后,打开Linux终端:
1.选中创建完成的工程,点击右键,选择Export,以jar包的格式导出该文件。
2.输入命令:jps 查看此时进程确定有没有启动Hadoop、yarn,若未启动hadoop则输入命令:start-dfs.sh、start-yarn.sh启动即可
3.输入命令:hadoop jar wcount.jar Runner类的全类名
这样就可以跑起来了。在跑完程序之后
4.输入命令:hadoop fs -ls /wc/output ----程序运行结束后输出文件的位置,确定文件正常输出
5.输入命令:hadoop fs -cat /wc/output/xxxx ----查看该文件
本地运行模式就是直接执行Runner的main方法产生一个RunJar的客户端,会持有本地提交器,持有一个localsumbitter,向本地MR模拟器提交任务。在Linux本地实现的。
遇到的异常:
java.lang.Exception: java.io.IOException: Mkdirs failed to create file:/home/my/_temporary/0/_temporary/attempt_local2063472742_0001_r_000000_0
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:529)
Caused by: java.io.IOException: Mkdirs failed to create file:/home/my/_temporary/0/_temporary/attempt_local2063472742_0001_r_000000_0
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:438)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:424)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:906)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:887)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:784)
at org.apache.hadoop.mapreduce.lib.output.TextOutputFormat.getRecordWriter(TextOutputFormat.java:132)
at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.<init>(ReduceTask.java:540)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:614)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.LocalJobRunner$Job$ReduceTaskRunnable.run(LocalJobRunner.java:319)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
解决办法:
输出的结果文件应当放到一起同一目录,即如我的代码中,这个异常就是我的输出的目录与我的源文件的目录不一致造成的。
对于如何将本地模式的基础上修改为集群模式的方法是添加四个xml文件:
core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml
总结 MR Job的几种运行模式 :
1.在服务器上运行yarn集群模式:
在Eclipse中开发好mr程序(在Windows或Linux中都可),然后打包成jar包,上传到服务器。
执行命令 hadoop jar jar包名 Runner类的全类名
2.在Linux中Eclipse开发平台中直接启动Runner类运行main方法,这种方式既可以为yarn集群模式,也可以为本地模式:
关键点是:
取决于一个配置参数:mapreduce.framework.name=local(yarn)
当为local时则运行为本地模式;当为yarn时则为运行yarn集群模式。
----yarn模式:
a.将mr工程导出为jar包,放在工程目录下。
b.在main方法中,加入一个配置参数,conf.set("mapreduce.job.jar","mr导出的jar包名")
----本地模式:
在Eclipse中将mr工程导出为jar包,拷贝到当前目录下,直接运行main方法。
3.在Windows的Eclipse中运行本地模式的步骤:
a.在Windows中存放hadoop的安装包,并配置其环境变量。
b.根据Windows的版本,对应的替换掉hadoop安装包中的本地库(bin、lib)
c.mr工程中不需要设置mapreduce.framework.name。
4.在Windows的Eclipse中运行yarn集群模式的步骤:
此时只添加该单一的参数,设置conf.set("mapreduce.job.jar","mr导出的jar包名")是不行的,因为在Windows中还需要其他的系统变量如:JAVA_HOME 等。因为在将job提交到服务器Linux中会有不兼容的问题出现,比如环境变量%与Linux中的$的区别。此时我们可以修改yarn-Runner方法的源码。此处修改较多。不建议使用。
************在后期时遇到的一些异常***********************
1.connection refused ---没写端口号
2.在第一次提交作业后一旦任务执行成功,必须将输出的文件删除,这是使用Hadoop shell命令:
hadoop fs -rm -r /output
3.对于将工程导出jar包,jar包的位置,并没有特殊的设置,就是jar包在那儿,那么运行hadoop jar 命令时必须在该目录下。
4.对于jar包实在安装包中找,按住ctr键查看的源代码是需要再下载的,并添加路径
- 第一个MapReduce案例集群模式&本地模式
- 第一个MapReduce案例集群模式&本地模式
- 第一个MapReduce案例集群模式&本地模式
- MapReduce在本地集群模式下运行debug
- MapReduce本地模式
- 第一个storm代码-wordcount-本地模式
- mapreduce程序本地模式调试
- MapReduce运行模式-本地模式配置
- Hadoop集群模式下运行Mapreduce任务
- Hadoop伪分布模式安装以及在Eclipse中运行第一个MapReduce项目
- Hadoop环境搭建之一安装jdk,hadoop基本配置及运行MapReduce案例在本地模式下
- Hadoop环境搭建之二配置启动HDFS及本地模式运行MapReduce案例(使用HDFS上数据)
- hadoop mapreduce的本地模式及yarn模式
- 多个mapreduce过程的组合模式
- Local模式下开发第一个Spark程序并运行于集群环境
- MapReduce模式
- Hadoop集群-MapReduce初级案例
- Hadoop集群MapReduce初级案例
- A simple network to classify handwritten digits
- 将TensorFlow安装到树莓派中
- SNAT和DNAT的区别
- google帐号的注册方法
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar
- 第一个MapReduce案例集群模式&本地模式
- TFS发布计划发送到钉钉消息群
- 蚁群算法的若干记录
- struts2返回json
- 【支付宝】支付宝ISV申请方法
- CentOS FTP安装及配置
- opencv之图片序列转存为视频
- wordpress使用技巧
- 深度学习在分词上的应用