MapReduce学习02-环境搭建
在hadoop2.x中,mapreduce使用的yarn模型,也就是mapreduce on yarn来实现了计算系统的解耦。
本次搭建的节点如下所示,除了HDFS的节点外,我们分别在2,3,4搭建NodeManager,在3,4搭建ResourceManager
架构:
RM
NM
搭建:
NN NN JN ZKFC ZK DN RM NM
node01 * * *
node02 * * * * * *
node03 * * * * *
node04 * * * *
hadoop 1.x 2.x 3.x
hdfs: no ha ha(向前兼容,没有过多的改NN,二是通过新增了角色 zkfc)
yarn no yarn yarn (不是新增角色,二是直接在RM进程中增加了HA的模块)
现在我们开始
node01:
cd $HADOOP_HOME/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
vi yarn-site.xml
//shuffle 洗牌 M -shuffle> R
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>mashibing</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node04</value>
</property>
scp mapred-site.xml yarn-site.xml node02:`pwd`
scp mapred-site.xml yarn-site.xml node03:`pwd`
scp mapred-site.xml yarn-site.xml node04:`pwd`
vi slaves //可以不用管,搭建hdfs时候已经改过了。。。
start-yarn.sh
运行上述后,发现NN已经在各集群启动,但RM并没有,因此还需要手动在3,4启动
node03~04:
yarn-daemon.sh start resourcemanager
至此,mapreduce的环境就已经搭建完毕,启动浏览器输入地址,观察
http://node03:8088
http://node04:8088
This is standby RM. Redirecting to the current active RM: http://node03:8088/
发现node03为主节点,访问node04的时候自动跳转到了03。
为了实验一下,我们可以使用MR 官方案例 wc
实战:MR ON YARN 的运行方式:
for i in `seq 100000`;do echo "hello hadoop $i" >> data.txt ;done
hdfs dfs -mkdir -p /data/wc/input
hdfs dfs -D dfs.blocksize=1048576 -put data.txt /data/wc/input
cd $HADOOP_HOME
cd share/hadoop/mapreduce
启动计算程序:
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/wc/input /data/wc/output
观察计算后的输出路径:
hdfs dfs -ls /data/wc/output
-rw-r--r-- 2 root supergroup 0 2019-06-22 11:37 /data/wc/output/_SUCCESS //标志成功的文件
-rw-r--r-- 2 root supergroup 788922 2019-06-22 11:37 /data/wc/output/part-r-00000 //数据文件
part-r-00000
part-m-00000
这里,文件名如果带r的是指这个文件经过了“map+reduce ”,而如果是带m的,说明只经过了map
进行观察:
hdfs dfs -cat /data/wc/output/part-r-00000
hdfs dfs -get /data/wc/output/part-r-00000 ./
抛出一个问题:
data.txt 上传会切割成2个block 计算完,发现数据是对的~!~?后边看源码分析~!~~