IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 2022-07-01 Hadoop概述、搭建完全分布式(非高可用) -> 正文阅读

[大数据]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/sysconf/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
    
    (2) 分发同步脚本
    # 创建脚本文件
    vim bin/xrsync.sh
    
    # 脚本内容如下
    #!/bin/bash
    if [[ $# -eq 0 ]]
    then
    	    echo "usage: xrsync.sh files-or-folders"
            exit
    fi
    read -p 'please input prefix: ' prefix
    read -p 'please input begin num: ' begin
    read -p 'please input end num: ' end
    for num in $(seq $begin $end)
    do
    	    target=${prefix}${num}
        	if [[ $(ping -c1 -W1 $target &>/dev/null;echo $?) -eq 0 ]]
            then
    	            echo "==========transfer to $target=========="
        	        for file in $@
            	    do
                	        if [[ -e $file ]]
                    	    then
                        	      pdir=$(cd -P $(dirname $file); pwd)
                            	  fname=$(basename $file)
                              	ssh $target "mkdir -p $pdir"
                              	rsync -av $pdir/$fname $target:$pdir
                        	fi
                	done
        	else
            	    echo "======transfer false: $target net err======"
        	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
    
    read -p 'please input prefix: ' prefix
    read -p 'please input begin num: ' begin
    read -p 'please input end num: ' end
    for num in $(seq $end -1 $begin)
    do
            target=${prefix}${num}
            if [[ $(ping -c1 -W1 $target &>/dev/null;echo $?) -eq 0 ]]
            then
                    echo --------- $target ----------
                    ssh $target "$*"
            else
                    echo "connect false: $target net err"
            fi
    done
    
    # 赋予执行权限
    chmod u+x bin/xcall.sh
    
  8. 同步文件
    (1) 同步moudle下的jdkhadoop
    # 第一次输入hadoop
    # 第二次输入102
    # 第三次输入103
    # 即向hadoop102、hadoop103传输文件
    xrsync.sh /opt/moudle
    
    (2) 同步my-env文件
    # 切换到root,继承soro的环境变量
    su
    # 分发文件
    xrsync.sh /etc/profile.d/my-env.sh
    # 使配置文件生效
    xcall.sh source /etc/profile
    # 退出
    exit
    

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

  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) 启停脚本

    # 在启动nn的节点上,本文中是hadoop101
    # 创建脚本文件
    vim ~/bin/hadoop.sh
    
    # 脚本内容如下:
    #!/bin/bash
    if [[ $# -ne 1 ]]
    then
            echo "usage: hadoop.sh start|stop|format"
            exit
    fi
    case $1 in
    "format")
            read -p 'please input prefix: ' prefix
            read -p 'please input begin num: ' begin
            read -p 'please input end num: ' end
            for num in $(seq $begin $end)
            do
                    target=${prefix}${num}
                    ssh $target 'rm -rf $HADOOP_HOME/data $HADOOP_HOME/logs'
            done
            hdfs namenode -format
    ;;
    "start")
            if [[ -e $HADOOP_HOME/data && -e $HADOOP_HOME/logs ]]
            then
                    read -p 'please input resource manager host: ' host
                    if [[ $(ping -c1 -W1 $host &>/dev/null;echo $?) -eq 0 ]]
                    then
                            start-dfs.sh
                            ssh $host 'start-yarn.sh'
                            mapred --daemon start historyserver
                    else
                            echo "$host net err"
                    fi
            else
                    hadoop.sh format
                    hadoop.sh start
            fi
    ;;
    "stop")
            read -p 'please input resource manager host: ' host
            if [[ $(ping -c1 -W1 $host &>/dev/null;echo $?) -eq 0 ]]
            then
                    stop-dfs.sh
                    ssh $host 'stop-yarn.sh'
            else
                    echo "$host net err"
            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
    
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:53:18  更:2022-07-03 10:55:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 3:26:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码