hadoop运行模式

hadoop运行模式

  • 本地模式
  • 伪分布式模式
  • 完全分布式模式
    阿里云定制2.7.2版本

本地模式

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

单机模式案例

  • 1.案例一

    1
    2
    3
    4
    5
    6
    7
    查找给定文件的正则匹配对象grep
    By default, Hadoop is configured to run in a non-distributed mode,as a single Java process. This is useful for debugging.
    The following example copies the unpacked conf directory to use as input and then finds and displays every match of the given regular expression. Output is written to the given output directory.
    $ mkdir input
    $ cp etc/hadoop/*.xml input
    $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
    $ cat output/*
  • 2.案例二

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    wordcount案例 手写wordCount案例
    大数据框架都需要有输入路径和输出路径
    1.创建输入分析路径
    mkdir input
    2.在input文件夹中创建两个文件
    touch wcinput00001
    touch wcinput00002
    3.使用hadoop中的wordcount分析input文件夹
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount input output
    指定案例中使用的分析代码为wordcount,指定输入路径和输出路径

    注意可以对一个文件单独分析

伪分布式模式

按照集群配置,但是只是一个机器一个hadoop
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

修改core-site.xml

  • 1.配置namenode的地址

    1
    2
    3
    4
    5
    6
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    </property>
    这里如果是真的集群,就需要指定localhost为主节点的ip
    hdfs://h100:9000
  • 2.指定hadoop运行时产生的文件的存储目录

    1
    2
    3
    4
    5
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop/data/tmp</value>
    </property>
    需要在指定路径下创建文件
  • 注意:指定了core-site.html协议之后hadoop采用的文件存储不在是本地的file:////
    变为了hdfs://所以这时执行本地案例会报错
    https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml
    ctrl f搜索hadoop.tmp.dir
    发现默认路径是/tmp/hadoop-${user.name}
    在系统的tmp目录下创建一个带当前用户名的路径,我们把它改为自己的路径进行储存。
    /opt/module/hadoop/data/tmp
    系统tmp会自动清空并且存在权限问题

配置hadoop-env.sh

  • 修改JAVA_HOME
    1
    2
    export JAVA_HOME=$PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre
    分布式必须配置JAVA_HOME的详细地址

配置hdfs-site.xml

  • 1.指导hdfs副本的数量(主从数量)
    默认副本是三个,指的就是在三台机器上存储同一个数据,任何一台节点挂掉都还有两份,
    而且挂掉之后,如果有其它节点还会把其它子节点拿上来使用(始终保持副本数为3)但如果只
    有一台服务器就只会保存一份,如果你逐渐增加节点它就会立刻备份你的节点
    1
    2
    3
    4
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>

启动集群

  • 1.格式化namenode
    第一次启动时格式化,以后就不要格式化了,格式化会把集群上的数据全部清空

    1
    bin/hdfs namenode –format
  • 2.启动namenode

    1
    2
    3
    4
    5
    sbin/hadoop-daemon.sh start 启动hadoop守护进程
    可以启动namenode和datanode
    这里hadoop3.3使用bin/hdfs –daemon start namenode代替
    启动后jps查看java进程
    想格式化之前先查看jps关掉进程namenode和datanode然后将data和logs删掉
  • 3.启动datanode

    1
    2
    bin/hdfs –daemon start datenode
    https://blog.csdn.net/QQB67G8COM/article/details/83382477
  • 4.关闭防火墙

    1
    2
    3
    4
    systemctl stop firewalld.service
    开放端口命令:firewall-cmd --zone=public --add-port=8088/tcp --permanent
    关闭端口命令:firewall-cmd --zone= public --remove-port=50070/tcp --permanent
    重载配置命令:firewall-cmd –reload
  • 5.jps和使用hadoop干活
    发现namenode和datanode都已经起来,可以干活了。怎么干活呢?

    • 1.hadoop给你提供了一个web登录页面
    • 2.h101:9870或10.167.218.161:9870
    • 3.这里的端口号3.1以上为9870,以下为50070
      • 1.overview为整个集群的介绍介绍了版本 唯一id 空间大小默认10GB 使用空间大小
      • 2.datanodes数据节点介绍数据节点的个数和每个数据节点的信息
      • 3.datanode volume failures失败的时候在这里查看,写报告
      • 4.snapshot快照
      • 5.startup progress显示开启启动处理的一些进程,开机处理的事务
      • 6.重点utillities

1.browse directory
根目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
如何在其中创建路径和使用对应路径文件命令?
bin/hdfs dfs –mkdir –p(创建多级目录) /user/chunjianghua/input(类似于linux的目录树 linux命令好多都可以用)
比如查看根路径
bin/hdfs dfs –ls /
查看多级目录
bin/hdfs dfs –lsr /
把wcinput文件上传到user/chunjianghua/input
如果没有配置core-site.xml,读取的文件路径都是本地,配置完hdfs以后,产生的就是hdfs的路径。把本地文件上传到hdfs路径文件
bin/hdfs dfs –put wcinput/wc.input /user/chunjianghua/input
每个块的上限值默认为128M

执行我们存储在hdfs下的input使用wordcount
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/chunjianghua/input /user/chunjianghua/output
这时我们使用的命令处理的路径已经是hdfs的路径
http://10.167.218.161:9870/explorer.html#/user/chunjianghua

如何查看我们的处理的output?
1.到网站下载下来查看
2.使用命令
bin/hdfs dfs -cat /user/chunjianghua/output/p*

注意事项

  • 1.查看logs日志

    1
    cd logs,一旦出现问题第一时间查看datanode-hadoop01.log
  • 2.为什么不能经常格式化namenode

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cd /opt/module/hadoop/data/tmp/dfs
    name存储的namenode的数据
    data文件就是存储的集群上实实在在的数据
    cd name/current/
    cat VERSION
    有集群的唯一标识
    NAMENODE:clusterID=CID-45074509-2b20-437e-a0c0-ea59dbcd00fb
    cd ../../data/current/
    cat VERSION
    DATANODE:clusterID=CID-45074509-2b20-437e-a0c0-ea59dbcd00fb
    NAMENODE和DATANODE必须有相同的集群id,他们之间需要通过这个id交互通讯。

    如果你没事儿格式化namenode就会导致集群id变化导致namenode和datanode不认识。
    所以当要格式化namenode时要把存储集群id的文件都删除

启动yarn和mapreduce

分析

  • 1.配置集群在yarn上运行MR
    RESOURCE MANAGER 集群资源调度的老大
    NODE MANAGER 单节点资源调度的老大
  • 2.启动,测试集群增删改查(集群搭建好后一定要测试,功能测试和性能测试)
  • 3.在yarn上执行wordcount

执行步骤

  • 1.配置集群
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    	1.配置yarn-env.sh
    JAVA_HOME
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/

    2.配置yarn-site.xml
    1.配置nodemanager获取数据方式
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    这里采用了洗牌的算法赋予reduce获取数据资源的方式

    2.指定resourceManager放在哪个服务器上
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>h101</value>
    </property>wq

    3.配置mapred-env.sh
    遇到env就配置JAVA_HOME

    4.配置mapred-site.xml.templete
    1.指定MR运行在yarn上
    <propery>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    The default number of map tasks per job. Ignored when mapreduce.framework.name is "local".
    默认是本地运行

启动集群

  • 1.启动namenode datanode jps
  • 2.启动resourcemanager nodemanager
  • 3.0版本以下sbin/yarn-daemon.sh start resourcemanager
  • 3.0版本以上bin/yarn –daemon start resourcemanager
    bin/yarn –daemon start nodemanager

运行jar包wordcount
删除目录文件
bin/hdfs dfs –rm –r /user/c/output
hadoop3.0以上的server变量参数不再共享,需要手动设置
In Hadoop 3, YARN containers do not inherit the NodeManagers’ environment variables. Therefore, if you want to inherit NodeManager’s environment variables (e.g. HADOOP_MAPRED_HOME), you need to set additional parameters (e.g. mapreduce.admin.user.env and yarn.app.mapreduce.am.env).

yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/opt/hadoop


mapreduce.map.env
HADOOP_MAPRED_HOME=/opt/hadoop


mapreduce.reduce.env
HADOOP_MAPRED_HOME=/opt/hadoop

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/c/input /user/c/output

簡單來說HADOOP_MAPRED_HOME=HADOOP_HOME,但必須額外設定HADOOP_MAPRED_HOME。

查看 h101:9870
h101:8088查看datanode节点

history点不进去是因为服务没有开
四.配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器,具体步骤如下:
1.配置mapred-site.xml

mapreduce.jobhistory.address
h101:10020

mapreduce.jobhistory.webapp.address h101:19888

2.启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver
bin/mapred –daemon start historyserver

日志聚集开启

应用运行完成以后,将程序运行日志信息上传到HDFS系统上,可以方便的查看程序运行详情,方便调试。
注意:
开启日志聚集功能需要重新启动NodeManager、ResourceManager、HistoryManager
1.停止三大manager
bin/mapred –daemon stop historyserver
bin/yarn –daemon stop nodemanager
bin/yarn –daemon stop resourcemanager

2.配置yarn-site.xml

yarn.log-aggregation-enable
true

yarn.log-aggregation.retain-seconds 604800 按秒计算

3.重启三大manager

4.删除wordcount重新运行
bin/hadoop jar share/ ……
wordcount //// ////

配置信息详解

可以通过以下网站左下角配置文件获取详细配置信息(或者去对应的jar包查找)
https://hadoop.apache.org/docs/stable/

1.core-default.xml
1.fs.defaultFS namenode的名称和端口号
2.hadoop.tmp.dir数据存储的路径

2.hdfs-default.xml
1.dfs.replication 副本数

3.yarn-default.xml 开启node resource manager
1.yarn.nodemanager.aux-services nodemanager采用的算法
mapreduce_shuffle
2.yarn.resourcemanager.hostname nodemanager的服务器名称
3.yarn.log-aggregation-enable 开启日志文件
4.yarn.log-aggregation.retain-seconds 日志默认的保留天数

4.mapred-default.xml
1.mapreduce.framework.name yarn
mapreduce默认是local运行,这里配置为用yarn服务器运行
2.yarn.app.mapreduce.am.env
3.mapreduce.map.env
4.mapreduce.reduce.env
配置mapreduce的map和reduce和yarn的mapreduce的运行环境

5.mapreduce.jobhistory.address
配置历史访问地址
6.mapreduce.jobhistory.webapp.address
配置历史web的访问地址

分享到