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. 在删除和增加节点的时候,会让数据迁移处理时间更长,甚至不能正常完成相关操作。
systemctl status firewalld # 查看防火墙状态
systemctl stop firewalld # 关闭防火墙(临时)
systemctl start firewalld # 开启防火墙
systemctl disable firewalld # 禁用防火墙(永久)

SSH安装

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

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

[root@node01 ~]# rpm -qa | grep openssh    # 查看当前虚拟机是否安装 Open SSH , 如果没有则执行 yum install openssh-server 命令在线安装 OpenSSH
openssh-server-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64
[root@node01 ~]# systemctl status sshd  # 查看当前虚拟机是否开启 Open SSH 服务 , 如果没有则通过 systemctl sshd start 命令开启 OpenSSH 服务
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2022-02-23 14:42:52 CST; 14min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 890 (sshd)
   CGroup: /system.slice/sshd.service
           └─890 /usr/sbin/sshd -D

2月 23 14:42:51 node01 systemd[1]: Starting OpenSSH server daemon...
2月 23 14:42:52 node01 sshd[890]: Server listening on 0.0.0.0 port 22.
2月 23 14:42:52 node01 sshd[890]: Server listening on :: port 22.
2月 23 14:42:52 node01 systemd[1]: Started OpenSSH server daemon.
2月 23 14:51:17 node01 sshd[1229]: Accepted password for root from 192.168.197.1 port 9073 ssh2
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环境
# 解压 tar 包到当前目录
[root@node local]# tar -zxvf jdk-8u111-linux-x64.tar.gz
#文件夹重命名
[root@node local]# mv jdk1.8.0_111/ jdk
# 配置 jdk 环境变量
[root@node local]# vim + ~/.bash_profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
# 重新加载 环境变量文件,使配置生效
[root@node local]# source ~/.bash_profile
# 测试配置是否OK
[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例子。
# 解压 tar 包到当前目录
[root@node01 local]# tar -zxvf hadoop-2.7.3.tar.gz
#文件夹重命名
[root@node01 local]# mv hadoop-2.7.3 hadoop
# 配置 hadoop 环境变量
[root@node01 local]# vim + ~/.bash_profile
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 重新加载 环境变量文件,使配置生效
[root@node01 local]# source ~/.bash_profile
# 准备测试MapReduce程序的数据文件
[root@node01 ~]# mkdir ~/input
[root@node01 ~]# cd ~/input
[root@node01 ~]# vim data.txt   # yum install -y vim
Hello World
Hello Hadoop
# 运行MapReduce WordCount案例
[root@node01 ~]# cd ~/hadoop/share/hadoop/mapreduce
[root@node01 ~]#  hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/input/data.txt  ~/output
# 采用下面命令查看结果
[root@node01 ~]#  cd ~/output
[root@node01 ~]#  cat part-r-00000
Hadoop	1
Hello	2
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://<ip>: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

<ip>

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  配置文件

<!--NameNode的访问URI,也可以写为IP,8020为默认端口-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://node:8020</value>
</property>

<!--临时数据目录,用来存放数据,格式化时会自动生成-->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/hadoop/data</value>
</property>

修改 hdfs-site.xml 配置文件

<!--Block的副本数,伪分布式要改为1-->
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>

<!--配置有secondarynamenode的主机-->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node:50090</value>
</property>

修改 slaves 配置文件

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

格式化HDFS并启动

# 格式化 HDFS ,由于已经配置过 Hadoop 的 bin 环境变量,则该命令可以在任意目录下运行
[root@node local]# hdfs namenode -format   

# 启动 HDFS 分布式文件系统 - 启动 namenode 元数据节点,负责管理文件切片存储
[root@node local]# hadoop-daemon.sh start namenode	

# 启动 datanode 副本节点,负责存储文件切片,定时发送心跳和块状态报告
[root@node local]# hadoop-daemon.sh start datanode

# 启动 secondarynamenode 镜像备份节点,同步元数据和操作日志
[root@node local]# hadoop-daemon.sh start secondarynamenode		

# 查看所有 java 进程,验证 HDFS 的节点是否启动成功
[root@node local]#  jps  
12176 DataNode
12085 NameNode
12270 SecondaryNameNode
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 个节点

[root@node01 ~]# ssh-keygen -t rsa
[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环境
# 解压 tar 包到当前目录
[root@node01 local]# tar -zxvf jdk-8u111-linux-x64.tar.gz
#文件夹重命名
[root@node01 local]# mv jdk1.8.0_111/ jdk
# 配置 jdk 环境变量
[root@node01 local]# vim + ~/.bash_profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
# 重新加载 环境变量文件,使配置生效
[root@node01 local]# source ~/.bash_profile
# 测试配置是否OK
[root@node01 local]# java –version
# JDK和环境文件分发
[root@node01 local]# scp -r jdk root@node02:/usr/local/
[root@node01 local]# scp -r jdk root@node03:/usr/local/
[root@node01 local]# scp /root/.bash_profile root@node02:/root/.bash_profile
[root@node01 local]# scp /root/.bash_profile root@node03:/root/.bash_profile

编写分发脚本xsync.sh

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

#!/bin/bash

#1. 判断是否传递了路径参数
pcount=$#
if ((pcount==0)); then
  echo "no args"
  exit 1
fi

# 2. 获取文件名称
fname=`basesname $1`

# 3. 获取父级目录
pdir=`cd $(dirname $fname);pwd`
read -p "开始分发,文件目录为:${pdir}/${fname},y/n:" flg
if [ $flg == 'n' ];then
  echo "停止分发..."
  exit 0
fi

# 4. 循环分发
for node in node02 node03; do
  echo "分发:${node}=================="
  rsync -av $pdir/$fname root@$node:$pdir
  echo "${node}分发结束================"
done
# 修改脚本执行权限
[root@node01 ~]# chmod +x xsync.sh
# 移动到 /usr/bin 目录下
[root@node01 ~]# mv xsync.sh /usr/bin
# 远程分发 jdk 到 node02 和 node03 中
[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版本
# 解压 tar 包到当前目录
[root@node01 local]# tar -zxvf hadoop-2.7.3.tar.gz
#文件夹重命名
[root@node01 local]# mv hadoop-2.7.3 hadoop
# 配置 hadoop 环境变量
[root@node01 local]# vim + ~/.bash_profile
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 重新加载 环境变量文件,使配置生效
[root@node01 local]# source ~/.bash_profile
# 测试配置是否OK
[root@node01 local]# hadoop version

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

[root@node01 local]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/jdk

[root@node01 local]# vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/local/jdk

[root@node01 local]# vim /usr/local/hadoop/etc/hadoop/mapred-env.sh
export JAVA_HOME=/usr/local/jdk

修改 core-site.xml  配置文件

[root@node01 local]# vim + /usr/local/hadoop/etc/hadoop/core-site.xml 
<configuration>
  <!--NameNode的访问URI,也可以写为IP,8020为默认端口-->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://node01:8020</value>
  </property>

  <!--临时数据目录,用来存放数据,格式化时会自动生成-->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/data/tmp</value>
  </property>
</configuration>

修改 hdfs-site.xml 配置文件

[root@node01 local]# vim + /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <!--配置有secondarynamenode的主机-->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node01:50090</value>
  </property>
</configuration>

修改 mapred-site.xml 配置文件

[root@node01 local]# cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
[root@node01 local]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
  <!---计算框架的运行平台配置 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <!--配置历史服务器-->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node01:10020</value>
  </property>
  <!--日志的web访问地址-->
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node01:19888</value>
  </property>
</configuration>

修改yarn-site.xml 配置文件

[root@node01 local]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
<configuration>
  <!---YARN 的节点辅助服务配置 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <!--默认是0.0.0.0 本地访问-->
    <value>node01</value>
  </property>
      <!--启用日志聚合功能-->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <!--日志保留时间设置7天,单位秒-->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>
</configuration>

修改slaves 配置文件

# 替换 slaves 中的节点名称
[root@node01 local]# vim /usr/local/hadoop/etc/hadoop/slaves
node01
node02
node03 

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

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

格式化 HDFS

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

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

启动 Hadoop 服务测试

[root@node01 hadoop]# start-all.sh 
[root@node01 hadoop]# jps
3537 Jps
2931 DataNode
3284 ResourceManager
3097 SecondaryNameNode
3385 NodeManager
2827 NameNode
[root@node01 hadoop]# 

测试访问

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

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDHong.it

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值