文档章节

5.马士兵_云计算

BeGit
 BeGit
发布于 2017/05/17 12:25
字数 964
阅读 20
收藏 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建立项目呢?

 

© 著作权归作者所有

共有 人打赏支持
BeGit
粉丝 19
博文 92
码字总数 70143
作品 0
顺义
后端工程师
冲击年薪50W,高薪程序员职位提升路线

大咖说:冲击年薪50W,高薪程序员职位提升路线 优效学院 今天 还没关注? 快动动手指! 大咖说 他是谁? 他是马士兵老师 他是1999 毕业于清华大学的高材生。 他是尚学堂科技创始人,优效学院...

马士兵优效学院
09/03
0
0
能把马士兵 html css javascript的视频发给我么?拜托了

@空云万里晴 你好,想跟你请教个问题: 能把马士兵 html css javascript的视频发给我么?拜托了

A.L.
2012/10/23
128
0
马士兵JAVA基础实录教程

本教程自从发布以来,已经被下载了2000多万次,创造了国内视频教程的记录。该教程是尚学堂老师上课时真实录制而成, 充分展现了讲师的风采,高超的技术、幽默的授课风格、深入浅出的分析。 ...

2846613430
2016/04/20
74
0
测测你的Java基础

Let's get started <<< 1)关键字volatile、transient各有什么作用? 2)下面两种使用synchronized关键字的方式有什么区别? // 第一种 synchronized(this) { ... } // 第二种 synchronized......

欧阳锋
2017/03/19
0
0
谁有马士兵视频 HTML CSS javascript 啊

谁有马士兵视频 HTML CSS javascript 啊 加我QQ1069624112 发我下啊 不胜感激啊

久违的味道
2012/02/24
3.7K
5

没有更多内容

加载失败,请刷新页面

加载更多

nginx的简单使用:负载均衡

nginx:反向代理的服务器;用户发送请求到nginx,nginx把请求发送给真正的服务器,等待服务器处理完数据并返回,再把数据发送给用户。 nginx作为一个反向代理服务器,能缓存我们项目的静态文...

osliang
14分钟前
1
0
网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百...

网站安全
16分钟前
1
0
JDK版本与major.minor version的对照关系

其实,只需要记住jdk6对于major.minor version 50即可,其他版本自行计算即可。 ---------------------

码代码的小司机
19分钟前
1
0
Gitlab安装

具体步骤如下: sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh sudo yum install postfix sudo service postfix start sudo chkconfi......

很好亦平凡ms
26分钟前
1
0
C++基础教程面向对象学习笔记及心得感悟[图]

C++基础教程面向对象学习笔记及心得感悟[图] 使用友元函数重载算术运算符: C ++中一些最常用的运算符是算术运算符 - 即加号运算符(+),减运算符( - ),乘法运算符(*)和除法运算符(/...

原创小博客
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部