介绍

自行百度<--

Emmm...

hadoop.apache.org 高效率低成本集群生态软件,高通用性,简单

  • Hadoop指Apache软件基金会的一款开源软件,利用java语言实现(开源),
    允许用户使用简单的编程模型实现跨机器集群对海量数据进行分析计算处理
  • Hadoop核心组件
    hadoop HDFS(分布式文件存储系统):解决海量数据存储
    Hadoop YARU(集群资源和任务调度框架):解决资源任务调度
    hadoop NapReduce(分布式计算框架):解决海量数据计算

虚拟机搭建

1. VM搭建虚拟机

利用VMware搭建好第一台Centos7;名字用hadoop1方便些

2. VM配置虚拟网络

在VM虚拟机中依次选择-->"编辑"-->"虚拟网络编辑器"

配置好NAT虚拟网络,网络ip等

配置好了退出,打开名为hadoop1的Centos虚拟机,进入到网络配置,固定好ip(下面是我配置的)

配置好hadoop1后使用电脑的命令行ping通了就行;下面展示

3. VM克隆虚拟机

关机hadoop1,克隆出一台hadoop2和hadoop3;
)
依次选择-->虚拟机-->快照-->拍摄快照
)
拍摄好了再接着选-->虚拟机-->管理-->克隆

记得克隆源选择-->现有快照-->初始(刚刚拍摄的)-->下一步-->创建完整克隆-->下一步-->取一下名字为hadoop2还有保存路径
下一步等待克隆完成(下面访两张图)
)

创建完成后开机hadoop,进入给固定好ip(这里我用172.168.10.2),确保实体物理主机能ping通后关闭hadoop2,再拍摄好初始快照(防止玩坏系统)
hadoop3也重复操作一下,最后创建好的虚拟机hadoop集群信息分别如下


hadoop1|(172.168.10.1)
hadoop2|(172.168.10.2)
hadoop3|(172.168.10.3)

工具连接

4. 新建和连接

  1. 为了方便管理,我们可以使用其他shell连接工具来连接上三台虚拟机,例如CRT、FinalShell、Putty、Xshell;这边我比较喜欢使用Xshell,后面内容也就使用Xshell了
    Xhell-->文件-->新建

    填写基本信息,切换到身份验证

    填写好root和密码,确定保存会话信息,下次双击就可以直接连接上虚拟机的shell终端

    可以创建一个目录来存放hadoop集群,方便管理和浏览
  2. 连接hadoop集群
    双击会话连接hadoop集群

Hadoop部署

1. 设置主机名

一. 为每台虚拟机设置一个独一无二的主机名称

vi /etc/hostname ## 使用vi或者vim编辑hostname文件内容
## 自己取个名字 ## 编辑主机名后,wq退出
## 然后使用cat 打印显示出文件内容查看


《小技巧》

在Xshell中我们可以使用程序自带的工具来同时给多个终端发送指令,这样可以方便操作步骤:
-->工具-->发送键输入到-->所有会话

这时候我们可以看到窗口上多了个开关,如果不同时在窗口上输入,可以单独关闭


二. 在每台主机上添加好host名,方便切换操作

vi /etc/hosts ## 编辑ip和名字可以自己定
//////////
172.168.10.1 hadoop1.zmzaxg.top hadoop1
172.168.10.2 hadoop2.zmzaxg.top hadoop2
172.168.10.3 hadoop3.zmzaxg.top hadoop3
## wq退出

cat /etc/hosts
cat /etc/hostname
查看一下有没有全部修改好。

2. 关闭防火墙,配置ssh免密登入

systemctl stop firewalld.service ## 停止firewalld服务

systemctl disable firewalld.service ## 停止firewalld服务的开机自启

systemctl status firewalld.service ## 查看状态为非活跃即可


接下来我们试试能不能使用免密登录。我这在hadoop1终端内输入ssh hadoop2如下

需要密码登录,,我们使用下面命令

ssh-keygen  # 生成公钥、私钥

ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
#####

确保在三台主机山都配置好免密登入

3. 集群时间同步

yum -y install ntpdate  # 没有ntpdate指令就用这安装一下
ntpdate ntp4.aliyun.com  # 使用阿里云的时间服务器

#####阿里的不行就换下面的NTP地址
ntp-sop.inria.frserver 210.72.145.44(中国国家授时中心服务器IP地址)
ntp.sjtu.edu.cn(上海交通大学网络中心NTP服务器地址)
s1a.time.edu.cn 北京邮电大学 010
s1b.time.edu.cn 清华大学 010-62795818-6105
s1c.time.edu.cn 北京大学 010-62753007
s1d.time.edu.cn 东南大学 025-3794342-309
s1e.time.edu.cn 清华大学 010-62795818-6105
s2a.time.edu.cn 清华大学 010-62795818-6105
s2b.time.edu.cn 清华大学 010-62795818-6105
s2c.time.edu.cn 北京邮电大学 010-62283044-8003
s2d.time.edu.cn 西南地区网络中心
s2e.time.edu.cn 西北地区网络中心 029-2669037
s2f.time.edu.cn 东北地区网络中心 024-23966854
s2g.time.edu.cn 华东南地区网络中心 021-62932901-8101
s2h.time.edu.cn 四川大学网络管理中心 028-85414820
s2j.time.edu.cn 大连理工大学网络中心 0411-4708642
s2k.time.edu.cn CERNET桂林主节点 0773-5845246
s2m.time.edu.cn 北京大学
time.jmu.edu.cn

执行结果如下:

4. 创建统一的工作目录

#######在三台主机上同时创建目录
mkdir -p /export/server/    # 软件安装路径
mkdir -p /export/data/        # 数据存储路径
mkdir -p /export/software/    # 安装包存放路径

5. 安装Java JDK 1.8

http://j.zmzaxg.top:8083/index.php?share/folder&user=1&sid=4UngI7dK<;--JDK1.8文件资源
在三台主机上分开安装好
一. 将javaJDK1.8上传到hadoop1主机的/export/server/文件夹上,等一下我们要把JDK安装到这目录里面。

ls  # 查看当前一下
tar -zxvf [文件名]  #解压压缩包到当前文件夹下


等待解压完成后,可以删除压缩包

rm -rf [文件名]  # 删除文件


接着命令

vi /etc/profile  # 编辑环境变量文件

## 在文件内容最后插入下面几行
export JAVA_HOME=/export/server/jdk1.8.0_361
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

wq保存退出,在终端输入

source /etc/profile # 重新加载环境变量文件


完成上面步骤之后,再次键入

java -version # 查看java的信息

如下显示出java的版本信息就是安装好了;

SCP命令远程传输

后面的两台主机也可以按照上面步骤安装一遍,但是步骤会很多,我们可以使用scp命令来远程传输文件,会更加快更加方便:

scp -r /export/server/jdk1.8.0_361/ root@hadoop2:/export/server/
scp /etc/profile root@hadoop2:/etc/

## -r包含文件夹 root@hadoop2就是以远程主机hadoop2的 root用户身份;
##

给hadoop2拷完再给hadoop3拷一份,下面结果可以参考一下

最后再同时给三台主机发送java -version查看一下是否都有安装完成配置好

---到此,JavaJDK1.8就安装完成了,如有做错的话仔细检查一下就可以解决。

6. 安装Hadoop

  • 集群规划

| 主机 | 角色 |
| ------- | ------------- |
| node1 | NN DN RM NM |
| node2 | SNN DN NM |
| node3 | DN NM |

http://j.zmzaxg.top:8083/index.php?share/folder&user=1&sid=4UngI7dK<;--hadoop3.3.1文件资源
安装和JavaJDK安装是一样的,把压缩包上传到/export/server里使用命令

tar -zxvf [文件名] # 解压到当前路径内

等待解压完成,使用ls查看解压出来的文件夹,然后rm删除压缩包。

cd [文件夹] #进入hadoop3.3.1文件夹内

进入之后ls看一下,会有一些文件夹,目录结构如下图:

配置hadoop文件

接下来我们要修改hadoop的配置文件,
依照我上述的状态下,路径在/export/server/hadoop-3.3.1/etc/hadoop/hadoop-env.sh

cd /export/server/hadoop-3.3.1/etc/hadoop/  # 进入此路径
vi hadoop-env.sh  # 编辑该文件
##  将下面几行插入到最后面
export JAVA_HOME=/export/server/jdk1.8.0_361  ##指出JavaJDK所在的路径
#指定各个进程运行的用户名
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root


上面已经cd进入到了hadoop目录
我们直接

vi core-site.xml ##编辑

将下面几行xml的配置全复制到

<configuration>
<!-- 复制到这标签内 -->
</configuration>

标签内

<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoop1:8020</value>
  </property>
  
  <!-- 设置Hadoop本地保存数据路径 -->
  <property>
      <name>hadoop.tmp.dir</name>
      <value>/export/data/hadoop-3.3.1</value>
  </property>
  
  <!-- 设置HDFS web UI用户身份 -->
  <property>
      <name>hadoop.http.staticuser.user</name>
      <value>root</value>
  </property>
  
  <!-- 整合hive 用户代理设置 -->
  <property>
      <name>hadoop.proxyuser.root.hosts</name>
      <value>*</value>
  </property>
  
  <property>
      <name>hadoop.proxyuser.root.groups</name>
      <value>*</value>
  </property>
  
  <!-- 文件系统垃圾桶保存时间 -->
  <property>
      <name>fs.trash.interval</name>
      <value>1440</value>
  </property>

wq保存退出

文件系统核心配置

vi hdfs-site.xml

操作同上面操作,也是放property标签内:

<!-- 设置SNN进程运行机器位置信息 -->
  <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop2:9868</value>
  </property>


wq保存退出

MapReduce模块

vi mapred-site.xml

将下面xml配置放入标签内

<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  
  <!-- MR程序历史服务地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop1:10020</value>
  </property>
   
  <!-- MR程序历史服务器web端地址 -->
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop1:19888</value>
  </property>
  
  <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>
  
  <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>
  
  <property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property>

wq保存退出

YARN模块

vi yarn-site.xml

操作同上面操作

<!-- 设置YARN集群主角色运行机器位置 -->
  <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>hadoop1</value>
  </property>
  
  <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
  </property>
  
  <!-- 是否将对容器实施物理内存限制 -->
  <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>
  
  <!-- 设置yarn历史服务器地址 -->
  <property>
      <name>yarn.log.server.url</name>
      <value>http://hadoop1:19888/jobhistory/logs</value>
  </property>
  
  <!-- 历史日志保存的时间 7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>

wq保存退出

workers ip信息

vi workers
##编辑内容为主机,下面是我的配置
hadoop1.zmzaxg.top
hadoop2.zmzaxg.top
hadoop3.zmzaxg.top


--到此,Hadoop的配置就完成了

---同时我们的第一台hadoop1主机安装配置都ok了

分发同步

后面我们还要给另外两台主机也配置好,如果再次重复操作就会很繁琐。
下面就使用分发同步操作

第一步我们先cd到server

cd /export/server  ##切换到路径
#####scp 拷贝到远程主机上
scp -r hadoop-3.3.1 root@hadoop2:$PWD
scp -r hadoop-3.3.1 root@hadoop3:$PWD

最后检查一下另外两台主机上是否多了hadoop文件夹

拷完了我们再接着同时给三台主插入系统环境变量

vi /etc/profile
#####在内容最后面插入下面内容
export HADOOP_HOME=/export/server/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin


然后使用命令重载一下三台主机的profile配置文件

source /etc/profile  #重载一下配置文件
#####
hadoop  ##使用hadoop命令,检查一下有没有正确配置输出hadoop指令使用说明

7. 格式化操作(初始化)!!!!!

NameNode format

(1). 首次搭建使用之前我们需要format(初始化)操作
(2). format只能进行一次,后续不再需要
(3). 多次format会造成数据丢失,hdfs集群主从角色之间互不识别;如果发生,可以通过删除所有机器hadoop.tmp.dir目录重新format解决

#####只在主角色主机内使用下面命令来初始化操作
hdfs namenode -format

操作好等待结束,检查一下输出内容有下面图片标出的就表示已经初始化成功了(!!!千万不要在次操作!!!)

以上步骤结束就是初次搭建启动的完成,后面就可以瞎锅巴玩耍hadoop了!!

---!!恭喜你,完成了Hadoop搭建!!---

8.hadoop初体验

启停命令和脚本

手动逐个进程控制

image.png

shell一键启停
  • HDFS集群

    • start-dfs.sh
    • stop-dfs.sh
  • YARN集群

    • start-yarn.sh
    • stop-yarn.sh
  • Hadoop集群

    • start-all.sh
    • stop-all.sh

启停使用

如果在启动那段时间jps查看进程存在,过一会进程没了就是配置不正确导致的闪退,如果发生,可以到hadoop的启动日志看看:/export/server/hadoop-3.3.1/logs/

image.png

一键脚本

start-all.sh

红框为HDFS集群进程,还有个辅助角色SecondaryNameNode

image.png

stop-all.sh

image.png

分集群类型一键脚本

我们先到hadoop1使用HDFS的一键启动脚本

start-dfs.sh

image.png

然后我们使用javaps看一下进程

jps

可以看到一主一从的NameNode和DataNode

image.png

看看hadoop2和hadoop3

image.png

如上面图片一样HDFS集群就是成功启动了,接着再去启动第二个YARN集群

到hadoop1使用一键脚本启动

start-yarn.sh

等待主角色和nodemanagers从角色启动好

image.png

javaps看一下进程:jps

image.png

到另外两台主机看看从角色有没有启动

有NodeManager进程存在即成功!

image.png

hadoop集群的web
  • HDFS集群

    • 地址:http://namenode_host:9870
    • 即主机加端口9870,可以用配置的hostname或者ip
    • 用于集群总览概况,集群配置信息显示,最常用的就是=》Utilities =》 Browse the file system 里面的文件系统,来上传文件下载文件以及对文件管理和浏览

image.png

  • YARN集群

    • 地址:http://resourcemanager_host:8088
    • 即主机加端口8088,可以用配置的hostname或者ip
    • 这里会显示当前集群的执行程序,用于方便监控集群中的资源,时间,状况

image.png

HDFS初体验

。。。

最后修改:2023 年 05 月 07 日
觉得文章有用,可以赞赏请我喝瓶冰露