3.MapReduce—搭建集群

节点结构

HOSTNNJNDNZKFCZKRMNM
tongyuzhe1***
tongyuzhe2******
tongyuzhe3*****
tongyuzhe4****
DN和NM时一一对应的
YARN和HDFS没有启动先后关系

单机情况必须配置项

mapreduce on yarn 
mapred-site.xml
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
yarn-site.xml
<!--shuffle洗牌,MAP对应提取键到Reduce的过程-->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>

HA下添加

yarn-site.xml
<!--启动HA模块,类似ZKFC-->
<property>
	<name>yarn.resourcemanager.ha.enabled</name>
	<value>true</value>
</property>

<!--放在上面,优先启动ZK-->
<property>
	<name>yarn.resourcemanager.zk-address</name>
	<value>tongyuzhe2:2181,tongyuzhe3:2181,tongyuzhe4:2181</value>
</property>

<!--起个ID名,为了和其他使用ZK的服务区分开-->
<property>
	<name>yarn.resourcemanager.cluster-id</name>
	<value>maprecude1</value>
</property>

<!--起两个自定义逻辑名称-->
<property>
	<name>yarn.resourcemanager.ha.rm-ids</name>
	<value>rm1,rm2</value>
</property>

<!--设置在哪台服务器配置ResourceManager-->
<property>
	<name>yarn.resourcemanager.hostname.rm1</name>
	<value>tongyuzhe3</value>
</property>
<property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>tongyuzhe4</value>
</property>
为什么HDFS拥有ZKFC:
因为要向前兼容,没有过多的改NN,通过新增了角色 zkfc
为什么Yarn没有类似ZKFC的角色:
1.因为是新增角色,是直接在RM进程中增加了HA的模块,不需要向前兼容,没有历史遗留问题。
2.所以还是Yarn方式好,不需要考虑单独ZKFC进程挂掉的情况。
3.全都放在一个进程里,要活一起活,要死一起死。
tongyuzhe1
cd $HADOOP_HOME/etc/hadoop

# 得到mapred-site.xml文件
cp mapred-site.xml.template   mapred-site.xml

scp mapred-site.xml yarn-site.xml tongyuzhe2:`pwd`
scp mapred-site.xml yarn-site.xml tongyuzhe3:`pwd`
scp mapred-site.xml yarn-site.xml tongyuzhe4:`pwd`

#可以不用管,搭建hdfs时候已经改过了
vi slaves

#启动Yarn
start-yarn.sh
tongyuzhe3~4:
#启动resourcemanager
yarn-daemon.sh start resourcemanager

#访问Yarn节点
http://tongyuzhe3:8088
http://tongyuzhe4:8088

MR 官方案例WordCount

MapReduce on YARN的运行方式:
#创建输入文件夹
hdfs dfs -mkdir -p /data/wc/input

#生成文件
for i in `seq 100000`;do echo "hello mbs $i" >> data.txt;done

#上传文件,并将块大小设置为1048576B
hdfs dfs -D dfs.blocksize=1048576 -put data.txt /data/wc/input

cd $HADOOP_HOME

#mapreduce程序文件夹
cd share/hadoop/mapreduce

#运行MR程序
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/wc/input /data/wc/output

#结果
_SUCCESS #标志成功的文件

#数据文件
part-r-00000 r:reduce文件
part-m-00000 m:map文件
Idea程序打包
#打包
Maven-->Lifecycle-->clean

#运行MR
hadoop jar BigData-1.0-0.1.jar work.tongyuzhe.mapreduce.MyWordCount

#Idea下载源码文档
Maven-->下载箭头-->Download S.. and D..

#自动整理代码格式
Code-->Reformat Code

存储层将字符串切割问题都处理好了,不需要我们关心,技术发展是越来越易与人使用的
windows下编程
#在win下部署hadoop,此版本为2.6.5
1.解压hadoop-2.6.5.tar.gz至C:\Program Personal\
2.将soft\bin的win文件覆盖至上一步C:\Program Personal\hadoop-2.6.5\bin目录下
3.将刚才覆盖bin目录下的hadoop.dll,复制到c:\windwos\system32\
4.配置环境变量HADOOP_HOME C:\Program Personal\hadoop-2.6.5
#修改mapred-site.xml为集群模式
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

#或是覆盖,修改Yarn为本地模式
#写在Configuration conf下方
conf.set("mapreduce.framework.name","local");

#让框架知道是windows异构平台
conf.set("mapreduce.app-submission.cross-platform","true");

#上传Jar包的位置
#写在Job.getInstance(conf)下方
job.setJar("C:\\Program Personal\\IntelliJ IDEA 2020.1\\Projects\\BigData\\target\\BigData-1.0-0.1.jar");

#获取xml中mapreduce.framework.name属性
conf.get("mapreduce.framework.name")

main(String[] args)中的args可以添加参数

例如hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/wc/input /data/wc/output
里面后接的参数,都是要依赖args接受

在程序里我们也可以取到

// 工具类帮我们把-D 等等的属性直接set到conf,会留下commandOptions
GenericOptionsParser parser = new GenericOptionsParser(conf, args);
//othargs[0]:输入目录
//othargs[1]:输出目录
String[] othargs = parser.getRemainingArgs();

有两类参数,一类带 -D,一类不带
带 -D的是系统参数,例如上传块切割大小
不带的是自定义参数,例如输入输出目录

例如:#上传文件,并将块大小设置为1048576B
hdfs dfs -D dfs.blocksize=1048576 -put data.txt /data/wc/input

例如:
//设置Reduce并行度
job.setNumReduceTasks(2);
通过Ctrl进入源代码会发现"mapreduce.job.reduces"

这样我们就可以设置-D的系统参数
-D mapreduce.job.reduces=2 /data/wc/input /data/wc/output

通过GenericOptionsParser(conf, args);会自动将参数赋值

所以我们甚至可以只写配置文件读取加载,网页控制配置参数

每次提交更改系统参数建议重新打Jar包

参数在:点编译锤子右面项目,Edit Configurations,Program arguments。填写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值