5.马士兵_云计算
博客专区 > BeGit 的博客 > 博客详情
5.马士兵_云计算
BeGit 发表于1年前
5.马士兵_云计算
  • 发表于 1年前
  • 阅读 18
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

1.yarn-site.xml需要复制到各个slave中去。需要所有的机器上是同步的,要么即使能启,也链接不上的。

2.正常情况各个阶段都是可以自定义开发的,只不过split和shuffle有默认的实现,我们主要还是先开发map和reduce。

3.map的输入K是序列号,V就是拆分后的一行内容。为了我们传递运算序列化的便利性,hadoop自己实现了对应的包装类,如Long(LongWritable),Sting(Text)。

package com;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordMapper extends Mapper<LongWritable, Text, KEYOUT, VALUEOUT>{
    
}
4.补充一句,mapreduce不用非得放linux上才能执行,mapreduce,yarn,hadoop他们相互独立,谁离了谁都能相互执行。

5.map/reduce程序可以在单机上写,但是运算会分布式运算,因为遇上大文件,一个机器合并不了了。fork join就是拆分运算后合并结果的。

6.运行得到输出结果。.隐藏文件,crc校验文件。这个执行的时候,因为是本地,所以控制台会出现本地工作的INFO:

2017-05-01 22:59:59,387 INFO  [LocalJobRunner Map Task Executor #0] mapred.LocalJobRunner (LocalJobRunner.java:run(224)) - Starting task: attempt_local1711731912_0001_m_000000_0

输入:

java c
c c++
java c#
test hello
java js
javascript c
 

结果:shuffle是拍好序的统计结果。

c    3
c#    1
c++    1
hello    1
java    3
javascript    1
js    1
test    1
7.下面是一个map/reduce的测试程序:

package com;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class Test {

    public static void main(String[] args) throws Exception{
          Configuration conf = new Configuration();
          
            Job job = Job.getInstance(conf);
             
            job.setMapperClass(WordMapper.class);
            job.setReducerClass(WordReducer.class);
            
            //mapper
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(IntWritable.class);
            
            //如果mapper 和reducer用的key 和 value类型相同,上面就可以不用写了
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(LongWritable.class);
             
            //本地路径的好处是
//            FileInputFormat.setInputPaths(job, "F:/BaiduNetdiskDownload/bigdata_test/test.txt");
//            FileOutputFormat.setOutputPath(job, new Path("F:/BaiduNetdiskDownload/bigdata_test/out"));
            
            FileInputFormat.setInputPaths(job, "hdfs://192.168.56.100:9000/wcinput");//会计算所有目录的文件
            FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.56.100:9000/wcoutput1"));//当然也可以依然放在本地
             
            job.waitForCompletion(true);//输出控制台
    }

}
但是上面这种方式是吧数据拉到本地来运算,所以就不需要yarn来支持了,那怎么在集群中运行呢?

8.然后配置好下面一堆,理论就可以远程集群运行了。

  conf.set("fs.defaultFS", "hdfs://192.168.56.100:9000/");//配置好了前缀下面就不需要带路径前缀
          
//          conf.set("mapreduce.job.jar", "target/wc.jar");
          conf.set("mapreduce.framework.name", "yarn");
          conf.set("yarn.resourcemanager.hostname", "192.168.56.100");
          conf.set("mapreduce.app-submission.cross-platform", "true");//跨平台操作

9.但实际运行时,有权限异常的问题。那怎么处理呢?办法1:run java时配置参数默认访问的用户名为root骗过去。-DHADOOP_USER_NAME=root。办法2:设置hdfs的权限为777(不推荐)。

Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=set_free, access=EXECUTE, inode="/tmp/hadoop-yarn/staging/set_free/.staging/job_1493733905343_0001":root:supergroup:drwx------

10.可以问题依然来了,我们顺利进入远程调用了,但出了下面的错。

Caused by: java.net.ConnectException: Call From DESKTOP-FHNQ7MS/192.168.56.1 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: Connection refused: no further information; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

;这个错误说的是我们是在远程集群中运算了,可以你指定的WordMapper.class,WordReducer.class我们集群中却没找到。因为只有我们windows知道。怎么弄呢?原来我们正常运行时是通过把java打包成jar文件,然后把jar文件传给ResourceManger,由RM分发给NM才可以。

11.简单的做法,conf.set("mapreduce.job.jar", "wc.jar");//相对路径,绝对路径都可,用这个配置来指定我们要计算的jar文件。然后我们就可以上传jar执行了。

12.总结:1.本地计算,可以调试。2.小规模数据拉到本地执行。3.大规模数据用jar发送给RM,RM给不同的NM上面,在集群中运行了。

13.如果有第三方的依赖jar包,那么把jar包也一并上传上去。

14.如何用maven建立项目呢?

 

标签: MapReduce
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 20
博文 89
码字总数 70143
×
BeGit
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: