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命令
    hdfs单机是否启动成功.png

    3.2. 查看产生的log日志
    hadoop-2.8.3/logs下是相关日志
    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
    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
    yarn2.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系统上。


jobHistory.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无密码登录

免密登录原理

免密登录原理.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 pdir/fname user@hadoophost:$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-100 hadoop-101 hadoop-102
HDFS NameNode DateNode DateNode SecondaryNameNode DateNode
YARN NodeManager ResourceManager NodeManager NodeManager

配置文件修改

  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


    路径及内容.png
  3. 对大文件进行拼接
    cat blk_1073741826>>test.file
    cat blk_1073741827>>test.file
    tar -zxvf test.file


    对大文件进行拼接.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


    是否安装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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • 一、系统参数配置优化 1、系统内核参数优化配置 修改文件/etc/sysctl.conf,添加如下配置,然后执行s...
    张伟科阅读 3,754评论 0 14
  • 终极算法 关注微信号每天收听我们的消息终极算法为您推送精品阅读 前言 Hadoop 在大数据技术体系中的地位至关...
    Yespon阅读 129,936评论 12 168
  • Hadoop、HBase、Hive、Spark分布式系统架构,本文通过全套部署方法来让大家深入系统内部以充分理解...
    0o失魂鱼o0阅读 2,831评论 0 30
  • 高尔基说过,爱自己的孩子,是连母鸡都会做的事,但是教育好孩子,却是一门艺术。家庭教育是每位家长都应重视的课程,成功...
    胡涂涂tutu阅读 151评论 0 1
  • ‌这需要去照看,哪怕是无法通透的暖,那些恐怖中的思念借着船,无法抛锚,更无法上岸,那是我一个人的秋,陌生的...
    稍息讲一下阅读 274评论 0 1