• Hadoop2.7.3三种安装模式环境搭建


    Hadoop的安装方式有三种模式:单机模式(Standalong Mode)、伪分布模式(Pseudo-Distributed Mode)、完全分布式模式(Fully-Distributed Mode)。

    • 单机模式:指运行在一台主机上, 按默认配置以非分布式模式运行的一个独立Java进程。单机模式的特点是:没有分布式文件系统,直接在本地操作系统的文件系统读写;不需要加载任何Hadoop的守护进程。它一般用于本地MapReduce程序的调试。单机模式是Hadoop的默认模式。
    • 伪分布式模式:指运行在一台主机上,使用多个Java进程,模仿完全分布式的各类节点。伪分布式模式具备完全分布式的主要功能,常用于调试程序。
    • 完全分布式模式:也叫集群模式,是将Hadoop运行在多台机器中,各个机器按照相关配置运行相应的Hadoop守护进程。完全分布式模式是真正的分布式环境,用于实际的生产环境。

    安装前准备

    Hadoop 是 一个用 Java 语言实现的开源软件框架,Hadoop的核心就是HDFSMapReduceYARNHDFS为海量数据提供了存储MapReduce为海量数据提供了计算框架YARN把计算框架与资源管理彻底分离,统一管理计算框架的资源调度。安装Hadoop所需软件列表如下:

    相关软件包地址:阿里云盘

    软件类型

    名称

    VMware虚拟机

    VMware-workstation-full-14.0.0-6661328.exe

    Linux 操作系统

    CentOS-7-x86_64-DVD-1810.iso

    JDK Java 语言的软件开发工具包

    jdk-8u251-linux-x64.tar.gz

    Hadoop分布式系统基础架构

    hadoop-2.7.3.tar.gz

    MoBaXterm远程访问工具

    MobaXterm_20.0汉化

    安装虚拟机

    虚拟机是一种虚拟化技术,它能实现在现有的操作系统上多运行一个或多个操作系统。本课程采用WMware公司的虚拟机软件WMware Workstation Pro 14版本,并安装CentOS7操作系统。

    关闭防火墙

    如果不关闭CentOS操作系统的防火墙(firewalld),则可能会出现以下几种情况:

    1. 无法正常访问Hadoop HDFSWeb管理界面
    2. 会导致后台某些运行脚本(Hive程序)出现假死状态
    3. 在删除和增加节点的时候,会让数据迁移处理时间更长,甚至不能正常完成相关操作。
    1. systemctl status firewalld # 查看防火墙状态
    2. systemctl stop firewalld # 关闭防火墙(临时)
    3. systemctl start firewalld # 开启防火墙
    4. systemctl disable firewalld # 禁用防火墙(永久)

    SSH安装

    通过VMware Workstation工具操作虚拟机十分不方便,无法复制内容到虚拟机中,也无法开启多个虚拟机窗口进行操作,并且在实际工作中,服务器通常被放置在机房中,同时受到地域和管理的限制,实际开发是通过远程连接服务器进行相关操作。接下来,我们来配置SSH 实现远程登录和免密登录。

    在配置SSH之前,需要完成 主机IP地址的映射操作 vim /etc/hosts

    1. [root@node01 ~]# rpm -qa | grep openssh # 查看当前虚拟机是否安装 Open SSH , 如果没有则执行 yum install openssh-server 命令在线安装 OpenSSH
    2. openssh-server-7.4p1-21.el7.x86_64
    3. openssh-7.4p1-21.el7.x86_64
    4. openssh-clients-7.4p1-21.el7.x86_64
    1. [root@node01 ~]# systemctl status sshd # 查看当前虚拟机是否开启 Open SSH 服务 , 如果没有则通过 systemctl sshd start 命令开启 OpenSSH 服务
    2. ● sshd.service - OpenSSH server daemon
    3. Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
    4. Active: active (running) since 三 2022-02-23 14:42:52 CST; 14min ago
    5. Docs: man:sshd(8)
    6. man:sshd_config(5)
    7. Main PID: 890 (sshd)
    8. CGroup: /system.slice/sshd.service
    9. └─890 /usr/sbin/sshd -D
    10. 2月 23 14:42:51 node01 systemd[1]: Starting OpenSSH server daemon...
    11. 2月 23 14:42:52 node01 sshd[890]: Server listening on 0.0.0.0 port 22.
    12. 2月 23 14:42:52 node01 sshd[890]: Server listening on :: port 22.
    13. 2月 23 14:42:52 node01 systemd[1]: Started OpenSSH server daemon.
    14. 2月 23 14:51:17 node01 sshd[1229]: Accepted password for root from 192.168.197.1 port 9073 ssh2
    15. 2月 23 14:51:17 node01 sshd[1233]: Accepted password for root from 192.168.197.1 port 9077 ssh2

    通过 MobaXterm远程连接工具,输入IP地址、用户名和密码进行连接测试

    配置SSH免密钥登录功能

    配置SSH免密钥登录功能的具体操作步骤如下:

    1. 在需要进行集群统一管理的虚拟机上生成密钥,在操作界面输入 ssh-keygen -t rsa命令生成密钥(根据提示可以不用输入任何内容,连续按4次Enter键确认即可)。
    2. 生成密钥操作默认会在虚拟机node01root目录下生成一个包含密钥文件的.ssh隐藏目录。通过执行cd /root/.ssh命令进入.ssh隐藏目录,在该目录下执行ll -a命令查看当前目录下的所有文件内容,id_rsaid_rsa.pub文件分别是虚拟机node01的私钥文件和公钥文件。
    3. 为了便于文件配置和虚拟机通信,通常情况下会对主机名和IP做映射配置,在虚拟机node01执行vim /etc/hosts命令编辑映射文件hosts,分别将虚拟机node01node02node03的IP和主机名进行匹配映射。
    4. 在虚拟机node01上执行ssh-copy-id 主机名命令,将公钥复制到相关联的虚拟机(包括自身)。
    5. 在虚拟机node01上执行ssh node02命令连接虚拟机node02,进行验证免密钥登录操作,此时无需输入密码便可以直接登录到虚拟机node02进行操作,如需返回node01,执行exit命令即可。

    JDK的部署

    由于Hadoop是 一个用 Java 语言实现的开源软件框架,运行需要Java环境的支持,所以在部署Hadoop前需要在虚拟机中提前安装好JDK,具体操作步骤如下:

    1. 下载JDK:访问Oracle官网下载Linux x64操作系统的JDK安装包 jdk-8u161-linux-x64.tar.gz
    2. 上传JDK安装包:通过MobaXterm远程连接工具连接虚拟机node,进入Linux操作系统中存放应用安装包的目录/usr/local,勾选左侧的跟踪终端文件夹JDK安装包上传到该目录下
    3. 安装JDK:通过解压缩的方式安装JDK,将JDK安装到存放应用的目录/usr/local,并重命名为jdk
    4. 配置JDK环境变量:执行 vim ~/.bash_profile 命令编辑系统环境变量文件.bash_profile
    5. JDK环境验证:执行java -version命令查看JDK版本,验证虚拟机 node 中的JDK环境
    1. # 解压 tar 包到当前目录
    2. [root@node local]# tar -zxvf jdk-8u111-linux-x64.tar.gz
    3. #文件夹重命名
    4. [root@node local]# mv jdk1.8.0_111/ jdk
    5. # 配置 jdk 环境变量
    6. [root@node local]# vim + ~/.bash_profile
    7. export JAVA_HOME=/usr/local/jdk
    8. export PATH=$PATH:$JAVA_HOME/bin
    9. # 重新加载 环境变量文件,使配置生效
    10. [root@node local]# source ~/.bash_profile
    11. # 测试配置是否OK
    12. [root@node local]# java –version

    Hadoop的安装

    安装单机模式

    Hadoop单机模式没有HDFS,只能测试MapReduce程序。MapReduce处理的是本地Linux的文件数据。官方软件下载地址

    1. 官网下载Hadoop安装包,下载版本为Hadoop2.7.3,上传到Linux系统的/usr/local目录下,并解压到当前目录。
    2. 设置Hadoop配置文件,修改hadoop-env.sh文件,配置JAVA_HOME真实环境路径。
    3. 测试Hadoop,在本机运行MapReduce WordCount例子。
    1. # 解压 tar 包到当前目录
    2. [root@node01 local]# tar -zxvf hadoop-2.7.3.tar.gz
    3. #文件夹重命名
    4. [root@node01 local]# mv hadoop-2.7.3 hadoop
    5. # 配置 hadoop 环境变量
    6. [root@node01 local]# vim + ~/.bash_profile
    7. export HADOOP_HOME=/usr/local/hadoop
    8. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    9. # 重新加载 环境变量文件,使配置生效
    10. [root@node01 local]# source ~/.bash_profile
    1. # 准备测试MapReduce程序的数据文件
    2. [root@node01 ~]# mkdir ~/input
    3. [root@node01 ~]# cd ~/input
    4. [root@node01 ~]# vim data.txt # yum install -y vim
    5. Hello World
    6. Hello Hadoop
    1. # 运行MapReduce WordCount案例
    2. [root@node01 ~]# cd ~/hadoop/share/hadoop/mapreduce
    3. [root@node01 ~]# hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/input/data.txt ~/output
    4. # 采用下面命令查看结果
    5. [root@node01 ~]# cd ~/output
    6. [root@node01 ~]# cat part-r-00000
    7. Hadoop 1
    8. Hello 2
    9. World 1

    安装伪分布式模式

    官方Hadoop环境搭建教程 伪分布式其实是完全分布式的一种特例,但它只有一个节点,安装伪分布式模式所需要修改的文件、属性名称、属性值及含义如下所示:

    文件名称

    属性名称

    属性值

    含义

    hadoop-env.sh|mapred-env.sh|yarn-env.sh

    JAVA_HOME

    /usr/local/jdk

    指定JAVA_HOME安装地址

    core-site.xml

    fs.defaultFS

    hdfs://:8020

    配置NameNode地址,8020RPC通讯端口

    hadoop.tmp.dir

    /usr/local/hadoop/data

    HDFS数据保存在Linux的那个目录,默认值是Linux/tmp目录

    hdfs-site.xml

    dfs.replication

    1

    副本数,默认是3

    mapred-site.xml

    mapreduce.framework.name

    yarn

    配置集群模式为yarn模式,local表示本地模式

    yarn-site.xml

    yarn.resourcemanager.hostname

    ResourceManagerIP地址或主机名

    yarn.nodemanager.aux-services

    mapreduce_shuffle

    NodeManager上运行的附属服务

    nodeLinux操作系统的映射地址,通过修改/etc/hosts进行配置,也可以使用IP地址代替

    修改 hadoop-env.sh|mapred-env.sh|yarn-env.sh 设置 Hadoop 环境对应的 JDK

    export JAVA_HOME=/usr/local/jdk

    修改 core-site.xml  配置文件

    1. <property>
    2. <name>fs.defaultFSname>
    3. <value>hdfs://node:8020value>
    4. property>
    5. <property>
    6. <name>hadoop.tmp.dirname>
    7. <value>/usr/local/hadoop/datavalue>
    8. property>

    修改 hdfs-site.xml 配置文件

    1. <property>
    2. <name>dfs.replicationname>
    3. <value>1value>
    4. property>
    5. <property>
    6. <name>dfs.namenode.secondary.http-addressname>
    7. <value>node:50090value>
    8. property>

    修改 slaves 配置文件

    # 替换 slaves 中的节点名称
    
    [root@node local]# echo node > /usr/local/hadoop/etc/hadoop/slaves  

    格式化HDFS并启动

    1. # 格式化 HDFS ,由于已经配置过 Hadoop 的 bin 环境变量,则该命令可以在任意目录下运行
    2. [root@node local]# hdfs namenode -format
    3. # 启动 HDFS 分布式文件系统 - 启动 namenode 元数据节点,负责管理文件切片存储
    4. [root@node local]# hadoop-daemon.sh start namenode
    5. # 启动 datanode 副本节点,负责存储文件切片,定时发送心跳和块状态报告
    6. [root@node local]# hadoop-daemon.sh start datanode
    7. # 启动 secondarynamenode 镜像备份节点,同步元数据和操作日志
    8. [root@node local]# hadoop-daemon.sh start secondarynamenode
    9. # 查看所有 java 进程,验证 HDFS 的节点是否启动成功
    10. [root@node local]# jps
    11. 12176 DataNode
    12. 12085 NameNode
    13. 12270 SecondaryNameNode
    14. 12318 Jps

    HDFS 分布式文件系统启动,可以使用一个统一命令 : [root@node local]# start-dfs.sh ,格式化失败,解决办法,停止集群,删除HDFS配置的data目录与临时目录下面的所有数据,重新格式化

    HDFS 的Web 管理界面

    HDFS 提供了Web 管理界面,可以很方便地查看HDFS 相关信息,在浏览器地址栏中输入HDFSNameNodeWeb 访问地址,默认端口是 50070YARNWeb管理界面,默认端口号为8088

    可以使用 IP 地址访问 HDFS Web ,也可使用之前在 window 系统中配置的 C:\Windows\System32\drivers\etc\hosts 映射名称 node

    安装完全分布式模式

    集群规划

    使用 Hadoop2.7.3jdk1.8 搭建3个节点的完全分布式一个namenode,3个datanode,集群规划如下:

    主机名

    IP地址

    服务进程

    node01

    192.168.242.101

    namenode   datanode  nodemanager  secondarynamenode   resourcemanager

    node02

    192.168.242.102

    datanode  nodemanager

    node03

    192.168.242.103

    datanode  nodemanager

    集群配置

    使用 VMware 工具克隆3个虚拟机,分别命名为node01node02node03,用于集群配置,注意:克隆需要先把节点关机

    [root@node01 local]# poweroff

    打开 VMware ,在关机状态,选中要克隆的节点,右键--> 管理 --> 克隆 , 或者直接找到要克隆的节点所在磁盘文件夹,直接复制三个个也可以。

    1. 完整克隆:完整克隆的虚拟机可以脱离原始虚拟机独立使用,不与原始虚拟机共享任何资源,是完全独立的虚拟机。
    2. 链接克隆:链接克隆的虚拟机需要和原始虚拟机共享同一虚拟磁盘文件,不能脱离原始虚拟机独立运行。

    使用nmtui命令修改主机名称和网络IP地址。

    使用 MobaXterm 进行连接测试配置是否 OK

    配置 SSH 免密登录

    在每个节点上都需要生成 SSH 免密登录的密钥对。输入命令 ssh-keygen ,然后 4 个回车即可。

    可以使用 MoBaXterm的多会话功能,直接操作 3 个节点

    1. [root@node01 ~]# ssh-keygen -t rsa
    2. [root@node01 ~]#

    JDK的部署

    1. 下载JDK:访问Oracle官网下载Linux x64操作系统的JDK安装包 jdk-8u161-linux-x64.tar.gz
    2. 上传JDK安装包:通过MobaXterm远程连接工具连接虚拟机node01,进入Linux操作系统中存放应用安装包的目录/usr/local/src,勾选左侧的跟踪终端文件夹JDK安装包上传到该目录下
    3. 安装JDK:通过解压缩的方式安装JDK,将JDK安装到存放应用的目录/usr/local,并重命名为jdk
    4. 配置JDK环境变量:执行 vim /etc/profile 命令编辑系统环境变量文件profile
    5. JDK环境验证:执行java -version命令查看JDK版本,验证虚拟机 node01 中的JDK环境
    1. # 解压 tar 包到当前目录
    2. [root@node01 local]# tar -zxvf jdk-8u111-linux-x64.tar.gz
    3. #文件夹重命名
    4. [root@node01 local]# mv jdk1.8.0_111/ jdk
    5. # 配置 jdk 环境变量
    6. [root@node01 local]# vim + ~/.bash_profile
    7. export JAVA_HOME=/usr/local/jdk
    8. export PATH=$PATH:$JAVA_HOME/bin
    9. # 重新加载 环境变量文件,使配置生效
    10. [root@node01 local]# source ~/.bash_profile
    11. # 测试配置是否OK
    12. [root@node01 local]# java –version
    13. # JDK和环境文件分发
    14. [root@node01 local]# scp -r jdk root@node02:/usr/local/
    15. [root@node01 local]# scp -r jdk root@node03:/usr/local/
    16. [root@node01 local]# scp /root/.bash_profile root@node02:/root/.bash_profile
    17. [root@node01 local]# scp /root/.bash_profile root@node03:/root/.bash_profile

    编写分发脚本xsync.sh

    使用rsync远程分发工具实现本地主机和远程主机上的文件同步,检查发送方和接收方已有的文件,仅传输有变动的部分。(yum install -y rsync

    1. #!/bin/bash
    2. #1. 判断是否传递了路径参数
    3. pcount=$#
    4. if ((pcount==0)); then
    5. echo "no args"
    6. exit 1
    7. fi
    8. # 2. 获取文件名称
    9. fname=`basesname $1`
    10. # 3. 获取父级目录
    11. pdir=`cd $(dirname $fname);pwd`
    12. read -p "开始分发,文件目录为:${pdir}/${fname},y/n:" flg
    13. if [ $flg == 'n' ];then
    14. echo "停止分发..."
    15. exit 0
    16. fi
    17. # 4. 循环分发
    18. for node in node02 node03; do
    19. echo "分发:${node}=================="
    20. rsync -av $pdir/$fname root@$node:$pdir
    21. echo "${node}分发结束================"
    22. done
    1. # 修改脚本执行权限
    2. [root@node01 ~]# chmod +x xsync.sh
    3. # 移动到 /usr/bin 目录下
    4. [root@node01 ~]# mv xsync.sh /usr/bin
    5. # 远程分发 jdk 到 node02 和 node03 中
    6. [root@node01 local]# xsync.sh jdk/

    安装Hadoop

    1. 使用MobaXterm远程连接工具连接虚拟机node01,上传Hadoop安装包hadoop-2.7.3.tar.gz/usr/local目录下
    2. 通过解压缩的方式安装Hadoop,将Hadoop安装到存放应用的目录/usr/local,并重命名为hadoop
    3. 编辑文件.bash_profile,执行vim /root/.bash_profile命令编辑环境变量文件,配置Hadoop环境变量
    4. 重新加载环境配置文件,执行source /root/.bash_profile命令初始化系统环境变量使配置内容生效
    5. 执行hadoop version命令查看Hadoop版本
    1. # 解压 tar 包到当前目录
    2. [root@node01 local]# tar -zxvf hadoop-2.7.3.tar.gz
    3. #文件夹重命名
    4. [root@node01 local]# mv hadoop-2.7.3 hadoop
    5. # 配置 hadoop 环境变量
    6. [root@node01 local]# vim + ~/.bash_profile
    7. export HADOOP_HOME=/usr/local/hadoop
    8. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    9. # 重新加载 环境变量文件,使配置生效
    10. [root@node01 local]# source ~/.bash_profile
    11. # 测试配置是否OK
    12. [root@node01 local]# hadoop version

    修改 hadoop-env.sh、yarn-env.sh、mapred-env.sh 设置 Hadoop 环境对应的 JDK

    1. [root@node01 local]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
    2. export JAVA_HOME=/usr/local/jdk
    3. [root@node01 local]# vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
    4. export JAVA_HOME=/usr/local/jdk
    5. [root@node01 local]# vim /usr/local/hadoop/etc/hadoop/mapred-env.sh
    6. export JAVA_HOME=/usr/local/jdk

    修改 core-site.xml  配置文件

    [root@node01 local]# vim + /usr/local/hadoop/etc/hadoop/core-site.xml 
    1. <configuration>
    2. <property>
    3. <name>fs.defaultFSname>
    4. <value>hdfs://node01:8020value>
    5. property>
    6. <property>
    7. <name>hadoop.tmp.dirname>
    8. <value>/usr/local/hadoop/data/tmpvalue>
    9. property>
    10. configuration>

    修改 hdfs-site.xml 配置文件

    [root@node01 local]# vim + /usr/local/hadoop/etc/hadoop/hdfs-site.xml
    1. <configuration>
    2. <property>
    3. <name>dfs.replicationname>
    4. <value>3value>
    5. property>
    6. <property>
    7. <name>dfs.namenode.secondary.http-addressname>
    8. <value>node01:50090value>
    9. property>
    10. configuration>

    修改 mapred-site.xml 配置文件

    1. [root@node01 local]# cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
    2. [root@node01 local]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
    1. <configuration>
    2. <property>
    3. <name>mapreduce.framework.namename>
    4. <value>yarnvalue>
    5. property>
    6. <property>
    7. <name>mapreduce.jobhistory.addressname>
    8. <value>node01:10020value>
    9. property>
    10. <property>
    11. <name>mapreduce.jobhistory.webapp.addressname>
    12. <value>node01:19888value>
    13. property>
    14. configuration>

    修改yarn-site.xml 配置文件

    [root@node01 local]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
    1. <configuration>
    2. <property>
    3. <name>yarn.nodemanager.aux-servicesname>
    4. <value>mapreduce_shufflevalue>
    5. property>
    6. <property>
    7. <name>yarn.resourcemanager.hostnamename>
    8. <value>node01value>
    9. property>
    10. <property>
    11. <name>yarn.log-aggregation-enablename>
    12. <value>truevalue>
    13. property>
    14. <property>
    15. <name>yarn.log-aggregation.retain-secondsname>
    16. <value>604800value>
    17. property>
    18. configuration>

    修改slaves 配置文件

    1. # 替换 slaves 中的节点名称
    2. [root@node01 local]# vim /usr/local/hadoop/etc/hadoop/slaves
    3. node01
    4. node02
    5. node03

    使用远程拷贝工具把Hadoop.bash_profile配置文件分发到另外两台机器

    1. [root@node01 local]# xcall.sh hadoop/
    2. [root@node01 ~]# xcall.sh .bash_profile

    格式化 HDFS

    在主节点 node01 上运行 HDFS 格式化命令

    1. [root@node01 ~]# hdfs namenode -format
    2. 20/08/23 17:13:52 INFO common.Storage: Storage directory /usr/local/hadoop-2.7.3/data/namenode has been successfully formatted.

    启动 Hadoop 服务测试

    1. [root@node01 hadoop]# start-all.sh
    2. [root@node01 hadoop]# jps
    3. 3537 Jps
    4. 2931 DataNode
    5. 3284 ResourceManager
    6. 3097 SecondaryNameNode
    7. 3385 NodeManager
    8. 2827 NameNode
    9. [root@node01 hadoop]#

    测试访问

    这里使用的是 node01 服务名进行访问,需要在本机 C:\Windows\System32\drivers\etc\hosts 中配置地址映射。

  • 相关阅读:
    Windows系统下制作Windows Server系统U盘启动及安装指导
    机器学习 —— 支持向量机SVM(Support Vector Machine)
    MATLAB程序设计与应用 3.2 矩阵变换
    Python模块和包
    数据库pymsql之使用简单登陆注册功能实现
    基于模板的中文命名实体识别数据增强
    Go操作nutsdb
    DQL查询数据(最重点)
    【NLTK系列01】:nltk库介绍
    Maven
  • 原文地址:https://blog.csdn.net/u010158540/article/details/127585360