七、Hadoop简明笔记

目录

1、Hadoop入门

1.1 Hadoop优势

  • 高可靠性

    Hadoop底层维护多个数据副本,即使Hadoop某个计算元素或存储出现故障,也不会导致数据丢失

  • 高扩展性

    在集群间分配任务数据,可方便的扩展数以千计的节点

  • 高效性

    在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度

  • 高容错性

    能够自动将失败的任务重新分配

1.2 Hadoop1.x、Hadoop2.x、Hadoop3.x的区别

  • 在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大
  • 在Hadoop2.x时代,增加了Yarn。此时Yarn只负责资源的调度,MapReduce只负责运算
  • 在Hadoop3.x时代,其组成与Hadoop2.x没有变化,功能上进行了优化

1.3 HDFS架构概述

Hadoop Distributed File System,简称HDFS,是一个分布式文件系统

  • 角色
    • NameNode(简称 nn)

      存储文件的元数据:如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件 的块列表和块所在的DataNode等

    • DataNode(简称 dn)

      在本地文件系统存储文件块数据,以及块数据的校验和

    • Secondary NameNode(简称 2nn)

      每隔一段时间对NameNode元数据备份

1.4 YARN架构概述

Yet Another Resource Negotiator,简称YARN,是一种资源协调者,是Hadoop的资源管理器

  • 角色
    • ResourceManager(RM):整个集群资源(内存、CPU等)的调度者
    • NodeManager(NM):单个节点服务器资源的调度者
    • ApplicationMaster(AM):单个任务运行的调度者
    • Container:容器,里面封装了任务运行所需要的资源(内存、CPU、磁盘、网络等)
  • 说明
    • 客户端可以有多个
    • 集群上可以运行多个ApplicationMaster
    • 每个NodeManager上可以有多个Container

1.5 MapReduce架构概述

MapReduce将计算过程分为两个阶段:Map和Reduce

  • Map阶段并行处理输入数据
  • Reduce阶段对Map结果进行汇总

1.6 HDFS、YARN、MapReduce三者关系

  1. 客户端发送任务请求
  2. YARN接受到请求,开启一个Container1(包含一个ApplicationMaster1),该Container1向YARN请求资源
  3. Container1获取到资源后,开始MapReduce中的Map阶段,开启一个Container(包含一个ApplicationMaster2,即MapTask)
  4. 在Map阶段,ApplicationMaster2与HDFS进行交互
  5. HDFS按NameNode的元数据信息检索,将DataNode中存储的数据返回给ApplicationMaster2
  6. Container1收到MapTask完成的信息后,开启一个Container(包含一个ApplicationMaster3,即ReduceTask),ApplicationMaster3汇总ApplicationMaster2返回的数据
  7. ApplicationMaster3汇总完数据后,通知HDFS完成数据的存储
  8. 任务结束,释放资源

1.7 大数据技术生态体系

1.8 环境准备

1.9 Hadoop运行模式

  • 本地模式

    单机运行,只是用来演示一下官方案例

  • 伪分布式模式

    单机运行,但是具备了Hadoop集群的所有功能,一台服务器模拟一个分布式的环境

  • 完全分布式模式

    多台服务器组成分布式环境

1.10 Hadoop本地模式运行:官方WordCount案例

  1. 创建wcinput文件夹

    mkdir -p ~/learnstation/wcinput
  2. 在wcinput文件夹下创建一个word.txt文件并输入以下内容

    vim word.txt
    
    hadoop yarn
    hadoop mapreduce
    test
    test
  3. 执行程序

    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount ~/learnstation/wcinput ~/learnstation/wcoutput
  4. 查看结果

    cat ~/learnstation/wcoutput/part-r-00000

2、搭建Hadoop集群

2.1 集群部署规划

pc001(192.168.117.101) pc002(192.168.117.102) pc003((192.168.117.101))
HDFS NameNode
DataNode

DataNode
SecondaryNameNode
DataNode
YARN
NodeManager
ResoureManager
NodeManager

NodeManager
  • 注意点

    1. NameNode和SecondaryNameNode很消耗内存,不要安装在同一台服务器
    2. ResourceManager很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上

2.2 配置文件说明

Hadoop配置文件分为两类:默认配置文件和自定义配置文件。

  • 默认配置文件

    默认文件 文件存放在Hadoop的jar包中的位置
    [core-default.xml] $HADOOP_HOME/share/hadoop/common/hadoop-common-xxx.jar
    [hdfs-default.xml] $HADOOP_HOME/share/hadoop/hdfs/hadoop-hdfs-xxx.jar
    [yarn-default.xml] $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-common-xxx.jar
    [mapred-default-xml] $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-xxx.jar
  • 自定义配置文件

    core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop路径下,用户想修改某一默认配置值时,可以修改自定义配置文件,更改相应属性值。

2.3 配置自定义文件

2.3.1 配置核心文件

  • 配置core-sit.xml

    cd $HADOOP_HOME/etc/hadoop
    vim core-site.xml
  • 在标签configuration中添加以下内容

    <configuration>
        <!-- 指定NameNode的地址 HDFS内部的通信地址-->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://pc001:8082</value>
        </property>
        <!-- 指定Hadoop本地数据的存储地址-->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/software/hadoop-3.1.3/data</value>
        </property>
        <!-- 配置HDFS网页登录使用的静态用户 -->
        <property>
            <name>hadoop.http.staticuser.user</name>
            <value>nuochengze</value>
        </property>
    
    </configuration>
  • 分发给其他服务器

    ~/bin/xsync.sh core-site.xml

2.3.2 配置HDFS文件

  • 配置hdfs-site.xml文件

    cd $HADOOP_HOME/etc/hadoop
    vim hdfs-site.xml
  • 在标签configuration中添加以下内容

    <configuration>
        <!-- NameNode nn web端访问地址-->
        <property>
            <name>dfs.namenode.http-address</name>
            <value>pc001:9870</value>
        </property>
        <!-- SecondaryNameNode 2nn web端访问地址 -->
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>pc003:9868</value>
        </property>
    </configuration>
  • 分发给其他服务器

2.3.3 配置YARN文件

  • 配置yarn-site.xml文件

    cd $HADOOP_HOME/etc/hadoop
    vim yarn-site.xml
  • 在标签configuration中添加以下内容

    <configuration>
    
    <!-- Site specific YARN configuration properties -->
        <!-- 指定MR走 shuffle-->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定 ResourceManager 的地址-->
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>pc002</value>
        </property>
        <!-- 环境变量的继承-->
        <property>
            <name>yarn.nodenamager.env-whitelist</name>
            <value>JAVA_HOEM,HADOOP_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
        </property>
    </configuration>
  • 分发给其他服务器

2.3.4 配置MapReduce文件

  • 配置mapred-site.xml文件

    cd $HADOOP_HOME/etc/hadoop
    vim mapred-site.xml
  • 在标签configuration中添加以下内容

    <configuration>
        <!-- 指定MapReduce 程序运行在Yarn上-->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
  • 分发给其他服务器

2.4 群起集群

2.4.1 配置workers

  • 编辑workers文件

    cd $HADOOP_HOME/etc/hadoop
    vim workers
  • 修改内容为如下

    pc001
    pc002
    pc003

    说明:workers文件中,添加的内容结尾不允许有空格,文件中不允许有空行

  • 分发给其他服务器

2.4.2 启动集群

注意!!! 在root用户下启动集群时,会报”ERROR: Attempting to operate on hdfs namenode as root“

需要用非root用户启动

useradd nuochengze // 添加用户nuochengze
passwd nuochengze // 修改密码
配置 nuochengze 用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令
1、vim /etc/sudoers
2、vim /etc/sudoers
...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
nuochengze ALL=(ALL) NOPASSWD:ALL
...
3、注意:nuochengze 这一行不要直接放到 root 行下面,因为所有用户都属于 wheel 组,你先
配置了 nuochengze 具有免密功能,但是程序执行到%wheel 行时,该功能又被覆盖回需要
密码。所以 nuochengze 要放到%wheel 这行下面
  • 格式化namenode

    hdfs namenode -format

    说明:

    1. 如果集群第一次启动,需要在pc001节点格式化NameNode
    2. 格式化NameNode,会产生新的集群ID,导致NameNode和DataNode的集群ID不一致,集群找不到以往数据
    3. 如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化
  • 在pc001上启动HDFS

    ./sbin/start-dfs.sh

    报错参考:https://www.cnblogs.com/nuochengze/p/14883150.html

  • 查看启动的active internet connections

    netstat -nltp
  • 在pc002(布置了ResoureceManager的节点)上启动yarn

    ./sbin/start-yarn.sh
  • web端查看HDFS的NameNode

    浏览器中输入:http://pc001:9870
  • web端查看YARN的ResourceManager

    浏览器中输入:http://pc002:8088

2.4.3 配置历史服务器

  • 作用

    查看程序的历史运行情况

  • 配置mapred-site.xml,添加以下内容

    <!-- 历史服务器地址-->
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>pc001:10020</value>
        </property>
        <!-- 历史服务器web端地址-->
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>pc001:19888</value>
        </property>
  • 在pc001上面启动历史服务器

    mapred --daemon start historyserver
  • 查看JobHistory

    http://pc001:19888

2.4.4 配置日志的聚集

  • 作用

    应用运行完成后,将程序运行日志信息上传到HDFS系统上,方便开发调试

  • 配置yarn-site.xml,添加以下内容

    <!-- 开启日志聚集功能-->
    <property>
    	<name>yarn.log-aggregation-enable</name>
    	<value>true</value>
    </property>
    <!-- 设置日志聚集服务器地址-->
    <property>
    	<name>yarn.log.server.url</name>
    	<value>http://pc001:19888/jobhistory/logs</value>
    </property>
    <!-- 设置日志保留时间为7天-->
    <property>
    	<name>yarn.log-aggregation.retain-seconds</name>
    	<value>604800</value>
    </property>
  • 在pc001上面启动历史服务器

    mapred --daemon start historyserver
  • 查看日志

    http://pc001:19888/jobhistory/logs

2.4.5 集群启动/停止方式

  • 各个模块分开启动/停止

    start-dfs.sh/stop-dfs.sh  #HDFS的整体启停
    start-yarn.sh/stop-yarn.sh #yarn的整体启停
  • 单个服务组件逐一启动/停止

    • HDFS组件

      hdfs --daemon start/stop namenode/datanode/secondarynamenode
    • YARN组件

      yarn --daemon start/stop resourcemanager/nodemanager

2.4.6 常用脚本

  • 启动集群

    # xhadoopop.sh
    #! /bin/bash
    
    if [ $# -lt 1 ]
        then
            echo "Tips:请输入参数"
            exit
    fi
    
    case $1 in
    "start")
        echo "=================启动集群========================"
        echo "-----------------启动历史服务器-----------"
        ssh pc001 "mapred --daemon start historyserver"
        echo "-----------------启动HDFS-----------------"
        ssh pc001 "$HADOOP_HOME/sbin/start-dfs.sh"
        echo "-----------------启动YARN-----------------"
        ssh pc002 "$HADOOP_HOME/sbin/start-yarn.sh"
    ;;
    "stop")
        echo "=================关闭集群========================"
        echo "-----------------关闭HDFS-----------------"
        ssh pc001 "$HADOOP_HOME/sbin/stop-dfs.sh"
        echo "-----------------关闭YARN-----------------"
        ssh pc002 "$HADOOP_HOME/sbin/stop-yarn.sh"
        echo "-----------------关闭历史服务器-----------"
        ssh pc001 "mapred --daemon stop historyserver"
    ;;
    *)
        echo "Error:请输入正确的参数"
        echo "参数 start: 启动集群"
        echo "参数 stop : 关闭集群"
    ;;
    esac
  • 文件分发

    # xsync.sh
    #! /bin/bash
    
    # 1.判断参数个数
    if [ $# -lt 1 ]
        then
            echo 'Not Enougth Arugement!'
            exit;
    fi
    
    # 2.遍历集群所有机器
    for host in  pc001 pc002 pc003
    do
        echo "==================$host====================="
        # 3.遍历指定的目录
        for file in $@
        do
            # 4.判断指定文件是否存在
            if [ -e $file ]
                then
                    # 4.1 获取父目录
                    pdir=$(cd -P $(dirname $file);pwd)
                    # 4.2 获取文件名称
                    fname=$(basename $file)
                    # 4.3 对目标host创建对应的目录
                    ssh $host "mkdir -p $pdir"
                    # rsync同步文件
                    rsync -av $pdir/$fname $host:$pdir/$fname
                else
                    echo "The file $file is not exists!"
            fi
        done
    done
  • jps集群监控

    # xjpsall.sh
    #! /bin/bash
    
    for host in pc001 pc002 pc003
    do
        echo "============$host=============="
        ssh $host "jps"
    done

2.5 配置文件整体一览

2.5.1 core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值