2022-07-01 Hadoop概述、搭建完全分布式(非高可用)

准备资源:VMware、CentOS7镜像文件、XShell7、JDK1.8、hadoop-3.1.3

一、Hadoop概述

  1. Hadoop组成
    在这里插入图片描述
  2. HDFS架构概述
    在这里插入图片描述
    (1) NameNode: 存储文件的元数据以及每个文件的快列表和块所在的DataNode;
    (2)DataNode: 存储文件块数据以及校验和;
    (3) Secondary NameNode: 每隔一段时间对NameNode元数据进行备份;
  3. Yarn架构概述
    在这里插入图片描述
    (1) ResourceManager: 管理整个集群的资源
            a. 接受客户端的请求;
            b. 资源分配调度;
            c. 监控NodeManager
            d. 启动或监控AppMaster
    (2) NodeManager: 管理单个节点的资源
            a. 管理单个节点上的资源;
            b. 处理来自ResourceManager的命令;
            c. 处理来自AppMaster的命令;
    (3) AppMaster: 一个job会对应开启一个AppMaster
            a. 负责数据的切片;
            b. 任务的监控和容错;
            c. 为应用程序申请资源,并将申请到的资源分配给内部的任务;
    (4) Container: 计算机资源的抽象表示
  4. MapReduce架构概述
    在这里插入图片描述

二、准备模板机

  1. 安装VMWare
  2. 打开VM,点击创建新的虚拟机
    在这里插入图片描述
  3. 选择自定义
    在这里插入图片描述
  4. 选择稍后安装操作系统
    在这里插入图片描述
  5. 设置客户机操作系统为Linux,版本为CentOS 7 64位
    在这里插入图片描述
  6. 设定虚拟机名称为base,自定义安装位置
    在这里插入图片描述
  7. 设定处理器内核总数,要求处理器内核总数 <= 物理机逻辑内核总数
    在这里插入图片描述
    物理机逻辑内核总数可以在任务管理器中查看:
    在这里插入图片描述
  8. 设定虚拟机内存
    在这里插入图片描述
  9. 选择NAT
    在这里插入图片描述
  10. 选择创建新虚拟磁盘
    在这里插入图片描述
  11. 自定义磁盘大小
    在这里插入图片描述
  12. 选择磁盘文件的存放位置
    在这里插入图片描述
  13. 选择安装的镜像文件
    在这里插入图片描述
  14. 开启虚拟机,开始安装
    在这里插入图片描述
  15. 选择语言
    在这里插入图片描述
  16. 设定日期和时间
    在这里插入图片描述
  17. 手动配置分区
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  18. 开始安装
    在这里插入图片描述
  19. 设置root用户密码
    在这里插入图片描述
  20. 安装好之后进行重启,使用root账号登录
    在这里插入图片描述
    在这里插入图片描述
  21. 设置静态IP
    (1) 记录网卡配置信息
            a. VM工具栏,编辑=>虚拟网络编辑器
            b. 点击更改设置
    在这里插入图片描述
            c. 记录子网IP子网掩码网关
    在这里插入图片描述
    (2) 打开网卡文件
    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    
    (3) 配置网卡
    # 需要进行修改的配置项
    BOOTPORTO=static
    ONBOOT=yes
    
    # 末尾需要添加的配置项
    # IP地址
    IPADDR=192.168.159.100
    # 子网掩码
    NETMASK=255.255.255.0
    # 网关
    GATEWAY=192.168.159.2
    # 域名解析,和网关一样就行
    DNS1=192.168.159.2
    
    (4) 保存退出,重启网卡服务
    # 重启网卡
    systemctl restart network
    
    # 查看IP地址
    ip addr
    
    在这里插入图片描述
  22. 使用XShell工具连接虚拟机
    (1) 修改物理机hosts文件,添加主机名和IP的映射关系
    # hosts文件地址:C:\Windows\System32\drivers\etc\hosts
    # 添加内容为
    192.168.159.100 hadoop100
    192.168.159.101 hadoop101
    192.168.159.102 hadoop102
    192.168.159.103 hadoop103
    192.168.159.104 hadoop104
    192.168.159.105 hadoop105
    192.168.159.106 hadoop106
    192.168.159.107 hadoop107
    192.168.159.108 hadoop108
    
    (2) 打开XShell,新建会话
    在这里插入图片描述
    或者
    在这里插入图片描述
    (3) 配置XShell
    在这里插入图片描述
    在这里插入图片描述
    (4) 连接
    在这里插入图片描述
  23. 关闭虚拟机防火墙
    systemctl stop firewalld.service & systemctl disable firewalld.service
    
  24. 新建普通用户并赋予该用户root权限
    (1) 新建普通用户
    useradd soro
    echo "123456" | passwd soro --stdin
    
    (2)赋予该用户root权限
    # 打开sudoers文件
    vi /etc/sudoers
    # 来到第92行,另起一行,添加如下内容
    soro    ALL=(ALL)       NOPASSWD:ALL
    # 强制保存退出
    
  25. 安装常用工具
    yum install -y epel-release psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
    
  26. 修改主机名、hosts
    (1) 修改主机名
    echo "hadoop100" > /etc/hostname
    
    (2) 修改hosts
    # 打开hosts文件
    vim /etc/hosts
    
    # 末尾添加如下内容
    192.168.159.100 hadoop100
    192.168.159.101 hadoop101
    192.168.159.102 hadoop102
    192.168.159.103 hadoop103
    192.168.159.104 hadoop104
    192.168.159.105 hadoop105
    192.168.159.106 hadoop106
    192.168.159.107 hadoop107
    192.168.159.108 hadoop108
    
  27. 创建目录
    mkdir -p /opt/moudle /opt/software & chown -R soro:soro /opt/moudle /opt/software
    
  28. 重启后关机
    # 重启
    reboot
    
    # 关机
    poweroff
    

三、准备集群环境

  1. 将模板机克隆三台(克隆一台为例)
    (1) 右键模板机=>管理=>克隆
    (2) 选择创建完整克隆
    在这里插入图片描述
    (3) 设定虚拟机名称安装位置
    在这里插入图片描述
    (4) 点击完成,等待克隆
  2. 将克隆的三台虚拟机的hostnameIPADDR分别修改为:hadoop101、hadoop102、hadoop103192.168.159.101、192.168.159.102、192.168.159.103,重启使配置生效
  3. XShell连接,用户使用普通用户soro
  4. 安装Java并配置环境变量
    (1) 向hadoop101上传jdk-8u212-linux-x64.tar.gz,置于/opt/software
    (2) 解压安装
    cd /opt/software
    tar -zxvf jdk-8u212-linux-x64.tar.gz -C ../moudle/
    
    (3)配置环境变量
    # 创建环境变量文件
    sudo vim /etc/profile.d/my-env.sh
    
    # 在my-env文件中添加如下内容:
    # Java环境变量
    export JAVA_HOME=/opt/moudle/jdk1.8.0_212
    export PATH=$PATH:$JAVA_HOME/bin
    
  5. 安装Hadoop并配置环境变量
    (1) 向hadoop101上传hadoop-3.1.3.tar.gz,置于/opt/software
    (2) 解压安装
    cd /opt/software
    tar -zxvf hadoop-3.1.3.tar.gz -C ../moudle
    
    (3) 配置环境变量
    sudo vim /etc/profile.d/my-env.sh
    
    # 在my-env文件中添加如下内容:
    # Hadoop环境变量
    export HADOOP_HOME=/opt/moudle/hadoop-3.1.3
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
  6. 免密配置(以hadoop101为例)
    (1) 生成公钥和私钥
    ssh-keygen -t rsa
    
    (2) 将公钥拷贝到需要免密登录的机器上
    # 每一台虚拟机都需要:
    ssh-copy-id hadoop101
    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    
    # 只有hadoop101需要:
    su - root
    ssh-keygen -t rsa
    ssh-copy-id hadoop101
    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    exit
    
  7. hadoop101上准备常用脚本
    (1) 家目录下创建文件夹
    cd ~
    mkdir -p bin
    # 在bin目录下创建machines.conf配置文件
    # 该配置文件中存储了以下脚本要远程操作的机器
    vim bin/machines.conf
    
    
    # 将脚本所在机器的主机名或者IP地址写到最后一行
    # 这样可以确保所有机器都有执行以下脚本命令的机会
    # 以后需要修改机器数时,只需要修改配置文件即可
    # 但是确保最后一行永远是本机的主机名或者IP地址
    # 本文中需要存储的机器为,
    hadoop102
    hadoop103
    hadoop101
    
    (2) 分发同步脚本
    # 创建脚本文件
    vim bin/xrsync.sh
    
    # 脚本内容如下
    #!/bin/bash
    
    if [[ $# -eq 0 ]]
    then
            echo "usage: xrsync.sh files-or-folders"
            exit
    fi
    
    confFile=$(cd /home/$USER/bin;pwd)'/machines.conf'
    if [[ ! -f $confFile ]]
    then
            echo "配置文件:$confFile不存在"
            exit
    fi
    
    for host in $(cat $confFile)
    do
            if [[ $host != $(hostname) && $(ping -c1 -W1 $host &>/dev/null;echo $?) -eq 0 ]]
            then
                    echo "==========transfer to $host=========="
                    for file in $@
                    do
                            if [[ -e $file ]]
                            then
                                  pdir=$(cd -P $(dirname $file); pwd)
                                  fname=$(basename $file)
                                  ssh $host "mkdir -p $pdir"
                                  rsync -av $pdir/$fname $host:$pdir
                            fi
                    done
            else
                    if [[ $host != $(hostname) ]]
                    then
                            echo "======transfer false: $host net err======"
                    fi
            fi
    done
    
    
    # 赋予执行权限
    chmod u+x bin/xrsync.sh
    
    (3) 批量操作虚拟机脚本
    # 创建脚本文件
    vim bin/xcall.sh
    
    # 脚本内容如下
    #!/bin/bash
    if [[ $# -eq 0 ]]
    then
            echo 'usage: xcall.sh cmds'
            exit
    fi
    
    confFile=$(cd /home/$USER/bin;pwd)'/machines.conf'
    if [[ ! -e $confFile ]]
    then
            echo "配置文件:$confFile不存在"
            exit
    fi
    
    
    for host in $(cat $confFile)
    do
            if [[ $(ping -W1 -c1 $host &>/dev/null;echo $?) -eq 0 ]]
            then
                    echo "----------$host----------"
                    ssh $host "$*"
            else
                    echo "$hosr net err"
            fi
    done
    
    
    # 赋予执行权限
    chmod u+x bin/xcall.sh
    
  8. 同步文件
    (1) 同步moudle下的jdkhadoop
    xrsync.sh /opt/moudle
    
    (2) 同步my-env文件
    # 切换到root,继承soro的环境变量
    su
    # 分发文件
    xrsync.sh /etc/profile.d/my-env.sh
    # 使配置文件生效
    xcall.sh source /etc/profile
    # 退出
    exit
    

四、搭建完全分布式(非高可用)

每一个配置项,务必name一行、value紧贴在下一行,否则之后编写的脚本无法使用

  1. 修改hadoop101上的hadoop配置文件,所有的配置都在configuration标签下

    # 来到配置目录下
    cd /opt/moudle/hadoop-3.1.3/etc/hadoop
    

    (1)core-site.xml

    <configuration>
    	<!-- 指定NameNode的地址,端口号也可以是8020和9000 -->
    	<property>
    		<name>fs.defaultFS</name>
    		<value>hdfs://hadoop101:9820</value>
    	</property>
    	<!-- 指定hadoop数据的存储目录 -->
    	<property>
    		<name>hadoop.tmp.dir</name>
    		<value>/opt/moudle/hadoop-3.1.3/data</value>
    	</property>
    	<!-- 配置HDFS网页登录使用的静态用户为soro-->
    	<property>
    		<name>hadoop.http.staticuser.user</name>
    		<value>soro</value>
    	</property>
    	<!-- 配置该soro(superUser)允许通过代理访问的主机节点 -->
    	<property>
    		<name>hadoop.proxyuser.soro.hosts</name>
    		<value>*</value>
    	</property>
    	<!-- 配置该soro(superUser)允许通过代理用户所属组 -->
    	<property>
    		<name>hadoop.proxyuser.soro.groups</name>
    		<value>*</value>
    	</property>
    	<!-- 配置该soro(superUser)允许通过代理的用户-->
    	<property>
    		<name>hadoop.proxyuser.soro.groups</name>
    		<value>*</value>
    	</property>
    </configuration>
    

    (2)hdfs-site.xml

    <configuration>
    	<!-- nn web端访问地址-->
    	<property>
    		<name>dfs.namenode.http-address</name>
    		<value>hadoop101:9870</value>
    	</property>
    	<!-- 2nn web端访问地址-->
    	<property>
    		<name>dfs.namenode.secondary.http-address</name>
    		<value>hadoop103:9868</value>
    	</property>
    </configuration>
    

    (3)yarn-site.xml

    <configuration>
    	<!-- 指定MR走shuffle -->
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    	</property>
    	<!-- 指定ResourceManager的地址-->
    	<property>
    		<name>yarn.resourcemanager.hostname</name>
    		<value>hadoop102</value>
    	</property>
    	<!-- 环境变量的继承 -->
    	<property>
    		<name>yarn.nodemanager.env-whitelist</name>
    		<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    	</property>
    
    	<!-- yarn容器允许分配的最大最小内存 -->
    	<property>
    		<name>yarn.scheduler.minimum-allocation-mb</name>
    		<value>512</value>
    	</property>
    	<property>
    		<name>yarn.scheduler.maximum-allocation-mb</name>
    		<value>4096</value>
    	</property>
    
    	<!-- yarn容器允许管理的物理内存大小 -->
    	<property>
    		<name>yarn.nodemanager.resource.memory-mb</name>
    		<value>4096</value>
    	</property>
    
    	<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    	<property>
    		<name>yarn.nodemanager.pmem-check-enabled</name>
    		<value>false</value>
    	</property>
    	<property>
    		<name>yarn.nodemanager.vmem-check-enabled</name>
    		<value>false</value>
    	</property>
    	<!-- 开启日志聚集功能 -->
    	<property>
     	   <name>yarn.log-aggregation-enable</name>
     	   <value>true</value>
    	</property>
    	<!-- 设置日志聚集服务器地址 -->
    	<property>  
    		<name>yarn.log.server.url</name>  
      	  	<value>http://hadoop101:19888/jobhistory/logs</value>
    	</property>
    	<!-- 设置日志保留时间为7天 -->
    	<property>
    		<name>yarn.log-aggregation.retain-seconds</name>
       		<value>604800</value>
    	</property>
    </configuration>
    

    (4)mapred-site.xml

    <configuration>
    	<!-- 指定MapReduce程序运行在Yarn上 -->
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
    	<!-- 历史服务器端地址 -->
    	<property>
        	<name>mapreduce.jobhistory.address</name>
        	<value>hadoop101:10020</value>
    	</property>
    	<!-- 历史服务器web端地址 -->
    	<property>
        	<name>mapreduce.jobhistory.webapp.address</name>
        	<value>hadoop101:19888</value>
    	</property>
    </configuration>
    

    (5)workers

    hadoop101
    hadoop102
    hadoop103
    
  2. 分发配置文件

    xrsync.sh /opt/moudle/hadoop-3.1.3/etc/hadoop/
    
  3. 启动集群
    (1) 启动命令:

    语法																说明
    hdfs --daemon start/stop namenode/datanode/secondarynamenode	单独启动/停止HDFS组件
    yarn --daemon start/stop  resourcemanager/nodemanager			单独启动/停止YARN
    start-dfs.sh/stop-dfs.sh										整体启动/停止HDFS
    start-yarn.sh/stop-yarn.sh										整体启动/停止YARN
    

    (2) 启停脚本

    # 可放置在任何机器上
    # 创建脚本文件
    vim ~/bin/hadoop.sh
    
    # 脚本内容如下:
    #!/bin/bash
    if [[ $# -ne 1 ]]
    then
            echo "usage: hadoop.sh start|stop|format"
            exit
    fi
    
    case $1 in
    "format"|"start"|"stop")
            num=$(cat -n $HADOOP_HOME/etc/hadoop/core-site.xml | tr -s ' \t' | awk '/defaultFS/{print $1+1}')
            namenodeHost=$(cat -n $HADOOP_HOME/etc/hadoop/core-site.xml | tr -s ' \t' | awk -vnum=$num 'FNR==num{print $2}' | awk -F'[:/]' '{print $4}')
    
            num=$(cat -n $HADOOP_HOME/etc/hadoop/yarn-site.xml | tr -s ' \t' | awk '/yarn.resourcemanager.hostname/{print $1+1}')
            resourcemanagerHost=$(cat -n $HADOOP_HOME/etc/hadoop/yarn-site.xml | tr -s ' \t' | awk -vnum=$num 'FNR==num{print $2}' | awk -F'[><]' '{print $3}')
    
            num=$(cat -n $HADOOP_HOME/etc/hadoop/mapred-site.xml | tr -s ' \t' | awk '/mapreduce.jobhistory.address/{print $1+1}')
            historyserverHost=$(cat -n $HADOOP_HOME/etc/hadoop/mapred-site.xml | tr -s ' \t' | awk -vnum=$num 'FNR==num{print $2}' | awk -F'[><:]' '{print $3}')
            if [[ $1 == "format" ]]
            then
                    for host in $(cat $HADOOP_HOME/etc/hadoop/workers)
                    do
                            ssh $host 'rm -rf $HADOOP_HOME/data $HADOOP_HOME/logs'
                    done
                    ssh $namenodeHost 'hdfs namenode -format'
            elif [[ $1 == "start" ]]
            then
                    ssh $namenodeHost 'start-dfs.sh'
                    ssh $resourcemanagerHost 'start-yarn.sh'
                    ssh $historyserverHost 'mapred --daemon start historyserver'
            else
                    ssh $namenodeHost 'stop-dfs.sh'
                    ssh $resourcemanagerHost 'stop-yarn.sh'
                    ssh $historyserverHost 'mapred --daemon stop historyserver'
            fi
    ;;
    *)
            echo 'usage: hadoop.sh format|start|stop'
    ;;
    esac
    
    # 赋予执行权限
    chmod u+x ~/bin/hadoop.sh
    

    (3) 格式化并启动

    # 格式化
    hadoop.sh format
    
    # 启动
    hadoop.sh start
    
    # 查看启动情况
    xcall.sh jps
    
  4. 查看网页端:

    Web查看目标			访问网址
    NameNode			http://hadoop101:9870
    Resource Manager	http://hadoop102:8088
    历史服务器			http://hadoop101:19888/jobhistory
    
  5. 运行官方案例WordCount

    # hdfs中存在/input目录,且该目录中有内容
    # hdfs中不存在/output目录
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
    
  6. 停止集群

    hadoop.sh stop
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值