Hadoop--yarn--MapReduce安装配置

在yarn-site.xml中增加如下的配置


        yarn.resourcemanager.hostname
        master
        表示ResourceManager安装的主机


        yarn.resourcemanager.address
        master:8032
        表示ResourceManager监听的端口


        yarn.nodemanager.local-dirs
        /home/hadoop-jrq/bigdata/yarn/local-dir1,/home/hadoop-jrq/bigdata/yarn/local-dir2
        表示nodeManager中间数据存放的地方


         yarn.nodemanager.resource.memory-mb
          1630
	     表示这个NodeManager管理的内存大小


      yarn.nodemanager.resource.cpu-vcores
      2
  	  表示这个NodeManager管理的cpu个数


用hadoop-jrq账号在master上创建目录

mkdir -p /home/hadoop-jrq/bigdata/yarn/local-dir1
mkdir -p /home/hadoop-jrq/bigdata/yarn/local-dir2

执行下面的命令,使得slave1和slave2的配置同步master上的配置

scp yarn-site.xml hadoop-jrq@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop/
scp yarn-site.xml hadoop-jrq@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop/

scp -r ~/bigdata/yarn/local-dir1 ~/bigdata/yarn/local-dir2 hadoop-jrq@slave1:~/bigdata/
scp -r ~/bigdata/yarn/local-dir1 ~/bigdata/yarn/local-dir2 hadoop-jrq@slave2:~/bigdata/
启动yarn: start-yarn.sh
验证yarn: http://master:8088

MapReduce的安装

1、stop-yarn.sh停止yarn并且在yarn-site.xml中增加配置


yarn.nodemanager.aux-services
mapreduce_shuffle
    为map reduce应用打开shuffle 服务

2、cp mapred-site.xml.template mapred-site.xml,并且在mapred-site.xml中增加配置


            mapreduce.framework.name
            yarn
	       向yarn申请资源
  

3、将master上的配置文件同步到slave1和slave2上

scp yarn-site.xml mapred-site.xml hadoop-jrq@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop
scp yarn-site.xml mapred-site.xml hadoop-jrq@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop

4、启动yarn => start-yarn.sh

5、验证MapReduce是否安装成功

hdfs dfs -put ~/bigdata/hadoop-2.7.5/etc/hadoop /user/hadoop-jrq/input
hadoop fs -rm -r /user/hadoop-jrq/output
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar grep /user/hadoop-jrq/input /user/hadoop-jrq/output 'dfs[a-z.]+'
hdfs dfs -cat /user/hadoop-jrq/output/*

MapReduce - Yarn运行原理

1.job的提交

1、向RM申请一个新的applicationId
2、判断job的输出路径是否已经存在,如果存在则报错退出
3、根据输入文件计算input splits,如果输入文件不存在则报错
4、将job需要依赖的资源上传到HDFS,资源包括jar包、第三步计算了的input splits等
5、向RM提交MR Job

job的初始化

1、RM根据提交过来的资源请求,在一个NodeManager上启动一个Container来运行ApplicationMaster(MRAppMaster)
2、RMAppMaster组件的初始化,这些组件都是用来管理运行的Task(mapTask和reduceTask)的
3、从HDFS中读取计算好的input splits信息,然后为每一个input split创建一个MapTask,
且根据mapreduce.job.reduces这个配置决定创建多少个reduceTask
4、说白了,MRAppMaster就是计算Master,负责管理Task的运行的

Task分配

MRAppMaster为每一个map和reduce task向RM申请资源(资源默认是1024M内存以及1个vcore)

Task的执行

1、申请到资源后,在数据所在的节点启动Container
2、MapTask和ReduceTask都是运行在YarnChild上,在运行Task之前需要从HDFS中下载依赖的jar包

内存分配配置

在mapred-site.xml中增加如下配置


         yarn.app.mapreduce.am.resource.mb
         1200
		表示MRAppMaster需要的总内存大小,默认是1536
 
 
         yarn.app.mapreduce.am.command-opts
         -Xmx800m
		 表示MRAppMaster需要的对内存大小,默认是:-Xmx1024m
 
 
         yarn.app.mapreduce.am.resource.cpu-vcores
         1
         表示MRAppMaster需要的的虚拟cpu数量,默认是:1
 
 
         mapreduce.map.memory.mb
         512
	    表示MapTask需要的总内存大小,默认是1024

 
           mapreduce.map.java.opts
            -Xmx300m
            表示MapTask需要的堆内存大小,默认是-Xmx200m
 

                mapreduce.map.cpu.vcores
                1
                表示MapTask需要的虚拟cpu大小,默认是1
 

          mapreduce.reduce.memory.mb
            512
            表示ReduceTask需要的总内存大小,默认是1024
 
 
          mapreduce.reduce.java.opts
             -Xmx300m
             表示ReduceTask需要的堆内存大小,默认是-Xmx200m


           mapreduce.reduce.cpu.vcores
            1
            表示ReduceTask需要的虚拟cpu大小,默认是1
 
scp mapred-site.xml hadoop-jrq@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop/
scp mapred-site.xml hadoop-jrq@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop/
以上配置的缺点是:全局有效,所有的job都会去读此配置,因此在实际中,会直接在程序中设置
    job.getConfiguration().set("yarn.app.mapreduce.am.resource.mb", "512");  // 表示MRAppMaster需要的总内存大小,默认是1536
    job.getConfiguration().set("yarn.app.mapreduce.am.command-opts", "-Xmx250m"); // 表示MRAppMaster需要的堆内存大小,默认是:-Xmx1024m
    job.getConfiguration().set("yarn.app.mapreduce.am.resource.cpu-vcores", "1");  // 表示MRAppMaster需要的的虚拟cpu数量,默认是:1
    job.getConfiguration().set("mapreduce.map.memory.mb", "400");  // 表示MapTask需要的总内存大小,默认是1024
    job.getConfiguration().set("mapreduce.map.java.opts", "-Xmx200m"); // 表示MapTask需要的堆内存大小,默认是-Xmx200m
    job.getConfiguration().set("mapreduce.map.cpu.vcores", "1");//表示MapTask需要的虚拟cpu大小,默认是1
    job.getConfiguration().set("mapreduce.reduce.memory.mb", "400");//表示ReduceTask需要的总内存大小,默认是1024
    job.getConfiguration().set("mapreduce.reduce.java.opts", "-Xmx200m");  // 表示ReduceTask需要的堆内存大小,默认是-Xmx200m
    job.getConfiguration().set("mapreduce.reduce.cpu.vcores", "1");  //表示ReduceTask需要的虚拟cpu大小,默认是1

Yarn 资源调度机制

1.FIFO Scheduler:Job执行顺序先进先出方式,当前面的job占用了全部内存时,后面的job就只能等着,这是默认的调度机制,显然这种机制不适合在生产上使用
2.Capacity Scheduler :树状结构的分组形式,为每一组分配资源,我目前使用的就是此种模式
3.Fair Scheduler:公平调度机制,根据权重获得额外的空闲资源,一般也有很多人使用这种机制

Yarn Capacity Scheduler配置

关闭yarn, stop-yarn.sh
先备份$HADOOP_HOME/etc/hadoop/capacity-scheduler.xml
然后在这个配置中加上如下配置:


	
		yarn.scheduler.capacity.root.queues
		prod,dev
		root下有两个部门prod,Dev
	
	
		yarn.scheduler.capacity.root.dev.queues
		eng,science
		dev下有两个组eng,science
	
	
		yarn.scheduler.capacity.root.prod.capacity
		40
		prod占所有资源的百分比
	
	
		yarn.scheduler.capacity.root.dev.capacity
		60
		Dev占所有资源的百分比
	
	
		yarn.scheduler.capacity.root.dev.maximum-capacity
		75
		prod空闲时dev可以占所有资源的百分比
	
	
		yarn.scheduler.capacity.root.dev.eng.capacity
		50
		eng占Dev的百分比
	
	
		yarn.scheduler.capacity.root.dev.science.capacity
		50
		science占Dev的百分比
	

scp capacity-scheduler.xml hadoop-jrq@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop/
scp capacity-scheduler.xml hadoop-jrq@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop/
启动yarn, start-yarn.sh
在程序中:
	job.getConfiguration().set("mapreduce.job.queuename", "eng");

Yarn Fair Scheduler配置

先关闭yarn, stop-yarn.sh 开启fair机制:在yarn-site.xml中配置


     yarn.resourcemanager.scheduler.class
     org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

在$HADOOP_HOME/etc/hadoop下创建文件fair-scheduler.xml,并且配置



        fair
        
                40
                fifo
        
        
                60
                
                
        

scp fair-scheduler.xml yarn-site.xml hadoop-jrq@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop/
scp fair-scheduler.xml yarn-site.xml hadoop-jrq@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop/
启动yarn, start-yarn.sh
MapReduce程序指定队列运行
job.getConfiguration().set(“mapreduce.job.queuename”, “eng”);

ResourceManager HA配置

保证zookeeper服务正常
关闭yarn,stop-yarn.sh
在yarn-site.xml中加上如下配置(将原先的resourcemanager.hostname注释掉)


	yarn.resourcemanager.ha.enabled
	true


	yarn.resourcemanager.cluster-id
	cluster1
	集群唯一标识


	yarn.resourcemanager.ha.rm-ids
	rm1,rm2
	两个RM的唯一标识


	yarn.resourcemanager.hostname.rm1
	master
	第一个RM部署在的机器名


	yarn.resourcemanager.hostname.rm2
	slave1
	第二个RM部署在的机器名


	yarn.resourcemanager.webapp.address.rm1
	master:8088
	第一个RM的web ui的端口

	
	yarn.resourcemanager.webapp.address.rm2
	slave1:8088
	第二个RM的web ui的端口


	yarn.resourcemanager.zk-address
	master:2181,slave1:2181,slave2:2181
	zk的部署的主机名和端口

scp yarn-site.xml hadoop-jrq@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop/
scp yarn-site.xml hadoop-jrq@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop/
在master上启动yarn, start-yarn.sh
在slave1上启动resourcemanager: ~/bigdata/hadoop-2.7.5/sbin/yarn-daemon.sh start resourcemanager

你可能感兴趣的:(hadoop)