暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop--yarn--MapReduce安装配置

最可爱的小哥哥 2019-07-15
261

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

    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
    <description>表示ResourceManager安装的主机</description>
    </property>
    <property>
    <name>yarn.resourcemanager.address</name>
    <value>master:8032</value>
    <description>表示ResourceManager监听的端口</description>
    </property>
    <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/home/hadoop-jrq/bigdata/yarn/local-dir1,/home/hadoop-jrq/bigdata/yarn/local-dir2</value>
    <description>表示nodeManager中间数据存放的地方</description>
    </property>
    <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>1630</value>
    <description>表示这个NodeManager管理的内存大小</description>
    </property>
    <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>2</value>
    <description>表示这个NodeManager管理的cpu个数</description>
    </property>


    用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中增加配置

          <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
              <description>为map reduce应用打开shuffle 服务</description>
          </property>

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

            <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
            <description>向yarn申请资源</description>
            </property>

            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

                  2.job的初始化

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

                    3.Task分配

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

                      4.Task的执行

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

                        内存分配配置

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

                          <property>
                          <name>yarn.app.mapreduce.am.resource.mb</name>
                          <value>1200</value>
                             <description>表示MRAppMaster需要的总内存大小,默认是1536</description>
                          </property>
                          <property>
                          <name>yarn.app.mapreduce.am.command-opts</name>
                          <value>-Xmx800m</value>
                          <description>表示MRAppMaster需要的对内存大小,默认是:-Xmx1024m</description>
                          </property>
                          <property>
                          <name>yarn.app.mapreduce.am.resource.cpu-vcores</name>
                          <value>1</value>
                          <description>表示MRAppMaster需要的的虚拟cpu数量,默认是:1</description>
                          </property>
                          <property>
                          <name>mapreduce.map.memory.mb</name>
                          <value>512</value>
                               <description>表示MapTask需要的总内存大小,默认是1024</description>
                          </property>
                          <property>
                              <name>mapreduce.map.java.opts</name>
                          <value>-Xmx300m</value>
                          <description>表示MapTask需要的堆内存大小,默认是-Xmx200m</description>
                          </property>
                          <property>
                          <name>mapreduce.map.cpu.vcores</name>
                          <value>1</value>
                          <description>表示MapTask需要的虚拟cpu大小,默认是1</description>
                          </property>
                          <property>
                          <name>mapreduce.reduce.memory.mb</name>
                          <value>512</value>
                          <description>表示ReduceTask需要的总内存大小,默认是1024</description>
                          </property>
                          <property>
                          <name>mapreduce.reduce.java.opts</name>
                          <value>-Xmx300m</value>
                          <description>表示ReduceTask需要的堆内存大小,默认是-Xmx200m</description>
                          </property>
                          <property>
                              <name>mapreduce.reduce.cpu.vcores</name>
                          <value>1</value>
                          <description>表示ReduceTask需要的虚拟cpu大小,默认是1</description>
                          </property>

                            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

                              然后在这个配置中加上如下配置:

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

                                  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中配置

                                    <property>
                                    <name>yarn.resourcemanager.scheduler.class</name>
                                    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
                                    </property>

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

                                      <?xml version="1.0"?>
                                      <allocations>
                                      <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
                                      <queue name="prod">
                                      <weight>40</weight>
                                      <schedulingPolicy>fifo</schedulingPolicy>
                                      </queue>
                                      <queue name="dev">
                                      <weight>60</weight>
                                      <queue name="eng"/>
                                      <queue name="science"/>
                                      </queue>
                                      </allocations>
                                        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注释掉)

                                          <property>
                                          <name>yarn.resourcemanager.ha.enabled</name>
                                          <value>true</value>
                                          </property>
                                          <property>
                                          <name>yarn.resourcemanager.cluster-id</name>
                                          <value>cluster1</value>
                                          <description>集群唯一标识</description>
                                          </property>
                                          <property>
                                          <name>yarn.resourcemanager.ha.rm-ids</name>
                                          <value>rm1,rm2</value>
                                          <description>两个RM的唯一标识</descritption>
                                          </property>
                                          <property>
                                          <name>yarn.resourcemanager.hostname.rm1</name>
                                          <value>master</value>
                                          <description>第一个RM部署在的机器名</descritption>
                                          </property>
                                          <property>
                                          <name>yarn.resourcemanager.hostname.rm2</name>
                                          <value>slave1</value>
                                          <description>第二个RM部署在的机器名</descritption>
                                          </property>
                                          <property>
                                          <name>yarn.resourcemanager.webapp.address.rm1</name>
                                          <value>master:8088</value>
                                          <description>第一个RM的web ui的端口</descritption>
                                          </property>
                                          <property>
                                          <name>yarn.resourcemanager.webapp.address.rm2</name>
                                          <value>slave1:8088</value>
                                          <description>第二个RM的web ui的端口</descritption>
                                          </property>
                                          <property>
                                          <name>yarn.resourcemanager.zk-address</name>
                                          <value>master:2181,slave1:2181,slave2:2181</value>
                                          <description>zk的部署的主机名和端口</descritption>
                                          </property>
                                            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




                                            文章转载自最可爱的小哥哥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                            评论