2、hadoop运行模式

hadoop运行模式介绍

hadoop有三种运行模式

  1. 本地模式(默认模式):
    不需要启用单独进程,直接可以运行,测试和开发时使用。
  2. 伪分布式模式:
    等同于完全分布式,只有一个节点。
  3. 完全分布式模式:
    多个节点一起运行。

本地模式运行Hadoop案例

本地运行官方grep案例

  1. 在hadoop-2.8.3文件夹下面创建一个input文件夹
    mkdir input
  2. 将hadoop的xml配置文件复制到input
    cp etc/hadoop/*.xml input
  3. 执行share目录下的mapreduce程序
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar grep input output 'dfs[a-z.]+'
  4. 查看输出结果

本地运行官方wordcount案例

  1. 在hadoop-2.8.3文件夹下面创建一个wcinput文件夹
    mkdir wcinput
  2. 在wcinput文件下创建一个wc.input文件,并输入以下内容
    hello hadoop
    hello mapreduce
    hello yarn
  3. 回到hadoop-2.8.3文件夹下,执行程序
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount wcinput wcoutput
  4. 查看结果

伪分布式运行

启动HDFS并运行MapReduce程序

  1. 配置
    1.1. 配置hadoop-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_181
    1.2. 配置core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop-00:9000</value>
</property>

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

1.3. 配置hdfs-site.xml

    <!-- 指定HDFS副本的数量 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
  1. 启动
    2.1. 格式化namenode
    第一次启动时格式化,以后就不要总格式化
    hdfs namenode -format
    2.2. 启动namenode
    hadoop-daemon.sh start namenode
    2.3. 启动datanode
    hadoop-daemon.sh start datanode
  2. 查看集群
    3.1. 查看是否启动成功
    使用jps命令

    13274599-d815a1b1e0d80d7a.png

    hdfs单机是否启动成功.png


    3.2. 查看产生的log日志
    hadoop-2.8.3/logs下是相关日志

    13274599-3700120e11879529.png

    hadoop相关日志.png


    3.3. web端查看hdfs文件系统
    http://hadoop-00:50070/dfshealth.html#tab-overview
  3. 操作集群
    4.1. 在hdfs文件系统上创建一个input文件夹
    hdfs dfs -mkdir -p /user/hadoop/input
    4.2. 将测试文件上传到文件系统上
    hdfs dfs -put hello.txt /user/hadoop/input
    4.3. 查看上传文件是否正确
    hdfs dfs -ls /user/hadoop/input
    hdfs dfs -cat /user/hadoop/input/hello.txt
    4.4. 运行mapreduce程序
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount /user/hadoop/input /user/hadoop/output
    4.5. 查看输出结果
    hdfs dfs -ls /user/hadoop/output
    hdfs dfs -cat /user/hadoop/output/part-r-00000
    4.6. 将输出结果下载到本地
    hdfs dfs -get /user/hadoop/output output
    4.8 删除输出结果文件夹
    hdfs dfs -rm -r /user/hadoop/output

YARN上运行MapReduce程序

  1. 配置
    1.1. 配置yarn-env.sh
    JAVA_HOME=/opt/module/jdk1.8.0_181
    1.2. 配置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>hadoop-00</value>
</property>

1.3. 配置mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
1.4. 配置mapred-site.xml
对mapred-site.xml.template重新命名为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml

<!-- 指定mr运行在yarn上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
  1. 启动
    2.1. 启动resourcemanager
    yarn-daemon.sh start resourcemanager
    2.2. 启动nodemanager
    yarn-daemon.sh start nodemanager
  2. 操作
    3.1. yarn的浏览器页面查看
    http://hadoop-00:8088/cluster

    13274599-9fd632000702177d.png

    yarn1.png


    3.2. 执行mapreduce程序
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount /user/hadoop/input /user/hadoop/output
    3.3. 查看运行结果
    hdfs dfs -ls /user/hadoop/output
    hdfs dfs -cat /user/hadoop/output/part-r-00000

    13274599-904a2e070e7133dd.png

    yarn2.png

配置历史服务器

13274599-046bd687f22e9210.png

引入历史服务器.png

 

点上图的history是点不开的,需要配置历史服务器

  1. 配置mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-00:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop-00:19888</value>
</property>
  1. 启动历史服务器
    /mr-jobhistory-daemon.sh start historyserver
  2. 查看是否启动
    使用jps 或者访问http://hadoop-00:19888/jobhistory

日志的聚集

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

 

13274599-3d3a276dfdd6b5e2.png

jobHistory.png

 

13274599-0d5e77a5bfe5dd6a.png

logs.png

 

点击上图的logs,访问不到,开启日志聚集
步骤如下

  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>
  1. 把正在运行的相关进程停止
    yarn-daemon.sh stop resourcemanager
    yarn-daemon.sh stop nodemanager
    hadoop-daemon.sh stop namenode
    hadoop-daemon.sh stop datanode
    mr-jobhistory-daemon.sh stop historyserver
  2. 启动相关进程
    hadoop-daemon.sh start namenode
    hadoop-daemon.sh start datanode
    yarn-daemon.sh start resourcemanager
    yarn-daemon.sh start nodemanager
    mr-jobhistory-daemon.sh start historyserver
  3. 删除已经存在的文件并执行wordcount案例
    hdfs dfs -rm -r /user/hadoop/output

分布式部署运行

准备三台虚拟机,ip,主机名,防火墙关闭,安装好jdk和hadoop

scp命令

scp可以实现服务器与服务器之间的数据拷贝
具体使用

  1. 将hadoop-100 的/home/hadoop/test 文件复制到hadoop-101上
    scp -r /home/hadoop/test hadoop@hadoop-101:/home/hadoop
  2. 将服务器/etc/profile 文件复制到hadoop-101上
    scp /etc/profile hadoop@hadoop-101:/etc/profile
  3. hadoop-100上实现hadoop-101和hadoop-102的数据传输
    scp hadoop@hadoop-101:/etc/profile hadoop@hadoop-102:/etc/profile

SSH无密码登录

免密登录原理

13274599-9bdac5d45cfc87b0.png

免密登录原理.png

.ssh文件夹下文件功能解释

  1. known_hosts,记录ssh访问过计算机的公钥(public key)
  2. id_rsa,生成的私钥
  3. id_rsa.pub,生成的公钥
  4. authorized_keys,存放授权过得无秘登录服务器公钥

具体步骤

  1. 进入到我的home目录下的.ssh目录
    cd ~
    cd .ssh
  2. 生成公钥和私钥
    ssh-keygen -t rsa
    敲三个回车,会生成两个文件
  3. 将公钥拷贝到要免密登录的目标服务器上
    ssh-copy-id hadoop-101
    ssh-copy-id hadoop-102

rsync

rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

命令安装

yum -y install rsync

命令解释

rsync -rvl fname host:$pdir
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
选项解释
-r 递归
-v 显示复制过程
-l 拷贝符号连接

案例

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

编写集群分发脚本xsync

需求分析

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

实现

在hadoop-100上操作

  1. 在/usr/local/bin目录下创建xsync文件
    vim xsync
  2. 使该文件成可执行文件
    chmod 777 xsync
  3. 改变拥有者为hadoop
    chown hadoop:hadoop xsync
  4. 输入如下内容
#!/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=101;host<103;host++));do
        echo $pdir/$fname $user@hadoop-$host:$pdir
        rsync -rvl $pdir/$fname $user@hadoop-$host:$pdir
done

配置集群

集群部署规划

 hadoop-100hadoop-101hadoop-102
HDFSNameNode DateNodeDateNodeSecondaryNameNode DateNode
YARNNodeManagerResourceManager NodeManagerNodeManager

配置文件修改

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

    <!-- 指定hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.8.3/data/tmp</value>
    </property>
  1. hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
  1. hdfs-site.xml
        <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop-102:50090</value>
         </property>
  1. slaves
hadoop-100
hadoop-101
hadoop-102
  1. yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
  1. 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>
  1. mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
  1. mapred-site.xml
<!-- 指定mr运行在yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

在集群上分发以上所有文件

进入etc目录
xsync hadoop/

查看分发情况

到hadoop-101 和 hadoop-102
cat slaves

集群启动及测试

启动集群

  1. 如果集群是第一次启动,需要格式化namenode,在namenode上格式化
    /hdfs namenode -format
  2. 启动hdfs,在namenode上启动hdfs
    start-dfs.sh
  3. 启动yarn,在ResourceManager所在的机器启动yarn
    同样需要配置ssh无密登录
    start-yarn.sh

集群基本测试

  1. 上传文件到集群
    hdfs dfs -mkdir -p /user/hadoop
    上传小文件
    hdfs dfs -put /home/hadoop/hello.txt /user/hadoop/
    上传大文件
    hdfs dfs -put hadoop-2.8.3.tar.gz /user/hadoop/
    hdfs dfs -put jdk-8u181-linux-x64.tar.gz /user/hadoop
  2. 上传文件后文件存放在什么位置
    /opt/module/hadoop-2.8.3/data/tmp/dfs/data/current/BP-922234044-192.168.114.100-1535772143813/current/finalized/subdir0/subdir0
    可以查看下该路径下一个文件内容
    cat blk_1073741825

     

    13274599-5a252d18423b2655.png

    路径及内容.png

  3. 对大文件进行拼接
    cat blk_1073741826>>test.file
    cat blk_1073741827>>test.file
    tar -zxvf test.file

     

    13274599-df7ab88a2a68d31d.png

    对大文件进行拼接.png

  4. 下载
    hdfs dfs -get /user/hadoop/hadoop-2.8.3.tar.gz hadoop-2.8.3.tar.gz

Hadoop启动停止方式

  1. 各个服务组件逐一启动
    启动hdfs组件
    hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
    启动yarn
    yarn-daemon.sh start|stop resourcemanager|nodemanager
  2. 各个模块分开启动(配置ssh是前提)
    整体启动/停止hdfs
    start-dfs.sh
    stop-dfs.sh
    整体启动/停止yarn
    start-yarn.sh
    stop-yarn.sh
  3. 全部启动(不建议使用)
    start-all.sh
    stop-all.sh

集群时间同步

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

时间服务器操作步骤

使用root用户进行如下操作

  1. 检查ntp是否安装
    rpm -qa|grep ntp

     

    13274599-05403b2ccd4cf0c6.png

    是否安装ntp.png

     

    没有安装的话,执行下yum -y install ntp

  2. 修改ntp配置文件
    vi /etc/ntp.conf
    分别做如下修改
    修改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
    修改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
    添加3
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
  3. 修改/etc/sysconfig/ntpd 文件
    vim /etc/sysconfig/ntpd
    添加如下内容
    SYNC_HWCLOCK=yes
  4. 启动ntpd
    service ntpd restart
  5. 执行
    chkconfig ntpd on

其他机器配置

必须是root用户

  1. 在其他机器配置10分钟与时间服务器同步一次
    crontab -e
    0-59/10 * * * * /usr/sbin/ntpdate hadoop-100
  2. 修改任意机器时间
    date -s "2018-9-5 11:11:11"
  3. 十分钟后查看机器是否与时间服务器同步
    date
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值