Hadoop(第二天,yarn上运行伪分布式,完全分布式集群的部署)

1.分布式运行Hadoop 案例

(1)YARN上运行MapReduce 程序

配置集群:

在etc/hadoop目录下

(a)配置yarn-env.sh  配置一下JAVA_HOME

(b)配置yarn-site.xml
    <!-- reducer获取数据的方式 -->
    <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop101</value>
    </property>

(c)配置:mapred-env.sh 配置一下JAVA_HOME

(d)配置: (对mapred-site.xml.template重新命名为) mapred-site.xml
    mv mapred-site.xml.template mapred-site.xml
    <!-- 指定mr运行在yarn上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

启动集群:

(a)启动前必须保证namenode和datanode已经启动  因为yarn是调度,要先启动任务

(b)启动resourcemanager
    sbin/yarn-daemon.sh start resourcemanager

(c)启动nodemanager
    sbin/yarn-daemon.sh start nodemanager

操作集群:

(a)yarn的浏览器页面查看
    http://192.168.1.101:8088/  #主机号也行

(b)删除文件系统上的output文件  #一定要提前删除 
    hdfs dfs -rm -R /user/atguigu/output

(c)执行mapreduce程序
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input  /user/atguigu/output

(d)查看运行结果
    hdfs dfs -cat /user/master/output/p*

(2)修改本地临时文件存储目录

@在前面配置过了,这里其实可以省略的!

1)停止进程
sbin/yarn-daemon.sh stop nodemanager
sbin/yarn-daemon.sh stop resourcemanager
sbin/hadoop-daemon.sh stop datanode
sbin/hadoop-daemon.sh stop namenode

2)修改hadoop.tmp.dir
	<!-- 指定hadoop运行时产生文件的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
	</property>

3)将/opt/module/hadoop-2.7.2路径中的logs文件夹删除掉
    [atguigu@hadoop101 hadoop-2.7.2]$ rm -rf logs/

4)进入到tmp目录将tmp目录中hadoop-atguigu目录删除掉
    [atguigu@hadoop101 /tmp]$ rm -rf hadoop-atguigu/

5)格式化NameNode
    hadoop namenode -format

6)启动所有进程
sbin/yarn-daemon.sh start nodemanager
sbin/yarn-daemon.sh start resourcemanager
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start namenode

5)查看/opt/module/hadoop-2.7.2/data/tmp这个目录下的内容。

(3)历史服务配置启动查看

@在目录 etc/hadoop
@可以不停止掉进程

1)配置mapred-site.xml
<property>
	<name>mapreduce.jobhistory.address</name>
	<value>hadoop101:10020</value>
</property>

<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop101:19888</value>
</property>

2)启动历史服务器:
sbin/mr-jobhistory-daemon.sh start historyserver

3)查看历史服务器是否启动  jps

4)查看jobhistory
http://192.168.1.101:19888/jobhistory  #主机名:端口号

(4)日志的聚集

日志聚集概念:应用运行完成以后,将日志信息上传到HDFS系统上。

@etc/hadoop目录下

(1)配置yarn-site.xml
    <!-- 日志聚集功能使能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

    <!-- 日志保留时间设置7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

(2)关闭namenode、datanode、nodemanager 、resourcemanager和historymanager
    sbin/mr-jobhistory-daemon.sh stop historyserver
    sbin/yarn-daemon.sh stop nodemanager
    sbin/yarn-daemon.sh stop resourcemanager
    sbin/hadoop-daemon.sh stop datanode
    sbin/hadoop-daemon.sh stop namenode

(3)启动namenode、datanode、nodemanager 、resourcemanager和historymanager
    sbin/mr-jobhistory-daemon.sh start historyserver
    sbin/yarn-daemon.sh start nodemanager
    sbin/yarn-daemon.sh start resourcemanager
    sbin/hadoop-daemon.sh start datanode
    sbin/hadoop-daemon.sh start namenode

(4)删除hdfs上已经存在的output文件
    hdfs dfs -rm -r /user/atguigu/output

(5)执行wordcount程序
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output

(5) Hadoop配置文件修改说明

Hadoop配置文件分两类:默认配置文件自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值

(1)默认配置文件:存放在.\share\hadoop相应的jar包中
[core-default.xml]
		hadoop-common-2.7.2.jar/ core-default.xml

[hdfs-default.xml]
		hadoop-hdfs-2.7.2.jar/ hdfs-default.xml

[yarn-default.xml]
		hadoop-yarn-common-2.7.2.jar/ yarn-default.xml

[core-default.xml]
		hadoop-mapreduce-client-core-2.7.2.jar/ core-default.xml

(2)自定义配置文件:存放在$HADOOP_HOME/etc/hadoop
    core-site.xml hdfs-site.xml 

    yarn-site.xml mapred-site.xml

2.完全分布式部署Hadoop

扫描二维码关注公众号,回复: 6172519 查看本文章
linux命令:
sudo chmod 777 xsync  #改为可读可写可执行
sudo chown pyvip:pyvip xsync #更改操作用户
basename  /opt/tmp/test.txt  返回test.txt
dirname   /opt/tmp/test.txt  返回/opt/tmp
whoami  返回用户    

(1)虚拟机开启三台

(2)主机名设置,并且确保可以互相通信。

(3)scp可以实现服务器与服务器之间的数据完全的拷贝

@坑:使用root用户时由于配置问题,权限错误
# 第一步: vim /etc/ssh/sshd_config
# 第二步: 注释这句话 PermitRootLogin prohibit-password
# 第三步: 新增加一条 PermitRootLogin yes
# 第四步重启服服:/etc/init.d/ssh restart

1)将hadoop101中/opt/module目录拷贝到hadoop102、hadoop103和hadoop104上。
    scp -r /opt/module/  root@hadoop104:/opt

2)将hadoop101服务器上的/etc/profile文件拷贝到hadoop102、hadoop103和hadoop104上。
    #要注意:source /etc/profile  重启环境变量
    scp root@hadoop101:/etc/profile /etc/profile

3)在hadoop103上操作将hadoop101中/opt/software/目录拷贝到hadoop102的/opt目录上。
    #注意这个:在加了免密登陆后正常,不加不论如何,搜遍帖子没解决掉!
    scp -r root@hadoop101:/opt/software root@hadoop102:/opt/

(4)SSH无密码登录

1)基本语法
    ssh 另一台电脑的ip地址/主机名  实现了远程登录  ssh master

2)无密钥配置
    (1)进入到我的家目录,然后:cd .ssh/
    (2)生成公钥和私钥:ssh-keygen -t rsa 加三次回车
    (3)将公钥拷贝到要免密登录的目标机器上 ssh-copy-id hadoop103

注意:每个用户都要做相同的事,在master的普通用户和root用户都要做相同的事情
    ,一定注意还要在一个slave服务器节点也做相同的事,因为最后node和manager要分开放!
    ,而且不光要在其他服务器拷贝一次还要在本机进行一次拷贝!

(5)rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:

用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

把本机/opt/tmp目录同步到hadoop103服务器的root用户下的/opt/tmp目录
    rsync -rvl /opt/tmp root@hadoop103:/opt/

(6)编写集群分发脚本xsync

1)需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:rsync  -rvl     /opt/module  root@hadoop103:/opt/
(2)期望脚本:xsync 要同步的文件名称
(3)在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行。

2)案例
(1)在/usr/local/bin目录下创建xsync文件

    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if((pcount==0)); then
    echo no args;
    exit;
    fi

    #2 获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname

    #3 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir

    #4 获取当前用户名称
    user=`whoami`

    #5 循环
    for((host=103; host<105; host++)); do
            #echo $pdir/$fname $user@hadoop$host:$pdir
            echo --------------- hadoop$host ----------------
            rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    done
(2)修改脚本 xsync 具有执行权限  chown atguigu:atguigu  xsync

(3)调用脚本形式:xsync 文件名称  xsync tmp/  
    #主义是在/opt目录下

(7)集群部署规划

							
      hadoop102					hadoop103				hadoop104

HDFS	放:NameNode              				               放:SecondaryNameNode
      DataNode //副本			        DataNode//副本			    DataNode//副本									        
       
	
	
YARN   NodeManager//对应副本	            NodeManager//对应副本	          NodeManager//对应副本
																				    
                                               放:ResourceManager

(8)配置集群

@etc/hadoop目录下

(1)core-site.xml
    <!-- 指定HDFS中NameNode的地址 -->
	<property>
		<name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
	</property>

	<!-- 指定hadoop运行时产生文件的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
	</property>

(2)Hdfs
    hadoop-env.sh :export JAVA_HOME=/opt/module/jdk1.8.0_144

    hdfs-site.xml
    <configuration>	
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>

	<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave1:50090</value>
    </property>
    </configuration>

    slaves 文件
    master
    slave2
    slave1
    
(3)yarn
    yarn-env.sh :export JAVA_HOME=/opt/module/jdk1.8.0_144
    
    yarn-site.xml
    <!-- reducer获取数据的方式 -->
	<property>
		 <name>yarn.nodemanager.aux-services</name>
		 <value>mapreduce_shuffle</value>
	</property>

	<!-- 指定YARN的ResourceManager的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>slave2</value>
	</property>

(4)mapreduce
    mapred-env.sh :export JAVA_HOME=/opt/module/jdk1.8.0_144
    
    mapred-site.xml
    <!-- 指定mr运行在yarn上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

(9)在集群上分发以上所有文件

@在etc/目录下   xsync hadoop/
查看成功  cat hadoop/slaves

(10) 集群启动及测试

1)启动集群
(0)如果集群是第一次启动,需要格式化namenode
    bin/hdfs namenode -format

(1)启动HDFS:
    sbin/start-dfs.sh

(2)启动yarn
    sbin/start-yarn.sh

2)集群基本测试
(1)上传文件到集群
     hadoop fs -mkdir -p /user/atguigu/input
     hadoop fs -lsr /
    上传小文件 :hadoop fs -put wcinput/wc.input /user/atguigu/input
    上传大文件 :hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz  /user/atguigu/input

(2)上传文件后查看文件存放在什么位置
    /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

(3)拼接
    cat blk_1073741836>>tmp.file #放到一个临时文件
    cat blk_1073741837>>tmp.file
    tar -zxvf tmp.file  #解压到当前文件

(4)下载
    bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz

(11) Hadoop启动停止方式

@etc/hadood目录下
1)各个服务组件逐一启动
    (1)分别启动hdfs组件
        hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode
    (2)启动yarn
        yarn-daemon.sh  start|stop  resourcemanager|nodemanager

2)各个模块分开启动(配置ssh是前提)常用
    (1)整体启动/停止hdfs:start-dfs.sh stop-dfs.sh

    (2)整体启动/停止yarn:start-yarn.sh stop-yarn.sh
    
3)全部启动(不建议使用)
    start-all.sh  stop-all.sh

(12) 集群时间同步(ubuntu不太一样)

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟同步一次时间

@必须先切换到root用户  不然文件修改不了!

(1)修改ntp配置文件
修改内容如下
		a)修改1(设置本地网络上的主机不受限制。)
            #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
            restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
		b)修改2(设置为不采用公共的服务器)
            server 0.centos.pool.ntp.org iburst
            server 1.centos.pool.ntp.org iburst
            server 2.centos.pool.ntp.org iburst
            server 3.centos.pool.ntp.org iburst为
            #server 0.centos.pool.ntp.org iburst
            #server 1.centos.pool.ntp.org iburst
            #server 2.centos.pool.ntp.org iburst
            #server 3.centos.pool.ntp.org iburst
		c)添加3(添加默认的一个内部时钟数据,使用它为局域网用户提供服务。)
            server 127.127.1.0
            fudge 127.127.1.0 stratum 10

(2)修改/etc/sysconfig/ntpd 文件 (没找到,可能虚拟机问题,这个不管)
    vim /etc/sysconfig/ntpd

    增加内容如下(让硬件时间与系统时间一起同步)
    SYNC_HWCLOCK=yes

(3)重新启动ntp
    service ntp status
    service ntpd start

@最后这不太懂!!!
(4)在其他机器配置10分钟与时间服务器同步一次(编写脚本)
    通过修改任意机器时间,进行比对

猜你喜欢

转载自blog.csdn.net/taka_is_beauty/article/details/89914676