搭建Hadoop集群
注意,这里搭建的是伪分布式模式。
伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模
拟一个分布式的环境。如果出现问题,可以去参看文章 搭建hadoop集群常见问题
再造虚拟机
前面已经创建了一台虚拟机了,两种选择:
- 选择直接克隆。由于涉及分发脚本等,虚拟机最好配置成静态IP(不配置其实也可以,只是未来IP改变后有部分东西会受影响)。克隆之后Hadoop和jdk等就都配置好了。注意克隆是在虚拟机软件(VMware、UTM)上右键虚拟机就可以克隆了。如果之前是手动配置的静态IP(修改netplan文件的),需要去看看netplan文件(配置静态IP的那个文件)看看IP信息,多半都需要改改,改成新的IP地址,可能用户名和主机名也需要修改,可以查看修改Ubuntu用户名、密码和主机名,具体改后的值先看看下面的内容。
- 再按照前面的流程创建两台虚拟机(Hadoop可以先不安装,但是jdk要安装上),这种适合非手动配置静态IP的人(在安装时就配置了静态IP的人)。
对了,配置的时候不要想着内存、核心数、硬盘数太大了,其实虚拟机用的内存不大,设置的是最大的内存,也就是三台机子同时高功耗执行任务才就会有达到(能到那种程度基本就用的公司的服务器了,学习更不用担心),核心数也是用的虚拟核心数,类似于线程数,一般也跑不满,硬盘就是最大硬盘了,Linux中可能只有主服务器占资源多一点,另外两台基本就是占用10GB左右硬盘,但是搭建好集群后,可能虚拟机总的硬盘要占到50GB左右,和512GB比起来问题也不大。
Hadoop集群配置规划
1号服务器 | 2号服务器 | 3号服务器 | |
---|---|---|---|
name | hadoop103 | hadoop104 | hadoop105 |
IP | 192.168.64.103 | 192.168.64.104 | 192.168.64.105 |
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
1号服务器还要配置历史服务器:JobHistoryServer
集群分发脚本
未来避免每台服务器都执行相同操作,需要自行编写集群分发脚本,使得各服务器快速,方便地同步一些内容。
参看: 集群分发脚本
配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值。
由于你可能和我的位置不太一样,那就统一把hadoop根目录配置到环境变量中:vim ~/.bashrc
,添加内容(这在后面启停脚本中需要,请你务必配置这一项):
1 | #HADOOP_HOME |
刷新配置:source ~/.bashrc
。之后就可以直接输入cd $HADOOP_HOME
命令就可以跳转到hadoop的根目录/ur/local/hadoop
下了。相当于是名词替换了。
hadoop的配置文件都在$HADOOP_HOME/etc/hadoop
目录下。
- 默认配置文件
| 要获取的默认文件 | 文件存放在 Hadoop 的 jar 包中的位置 |
| -------------------- | --------------------------------------------------------- |
| [core-default.xml] | hadoop-common-3.3.1.jar/core-default.xml |
| [hdfs-default.xml] | hadoop-hdfs-3.3.1.jar/hdfs-default.xml |
| [yarn-default.xml] | hadoop-yarn-common-3.3.1.jar/yarn-default.xml |
| [mapred-default.xml] | hadoop-mapreduce-client-core-3.3.1.jar/mapred-default.xml |
自定义配置文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在
$HADOOP_HOME/etc/hadoop
这个路径上,用户可以根据项目需求重新进行修改配置。我们后面进行的相关配置也是对这四个文件进行配置。都是对应着核心配置文件core、hdfs配置文件、yarn配置文件、MapReduce配置文件。
配置集群
先都是在一号服务器(hadoop103)操作,之后利用分发脚本分发过去就行了,减少重复操作。
进入配置文件目录:
1 | cd $HADOOP_HOME/etc/hadoop |
核心配置文件
配置 core-site.xml
1 | vim core-site.xml # 前提是跳转到了 $HADOOP_HOME/etc/hadoop 目录下 |
文件内容:
1 |
|
如下:
HDFS配置文件
配置hdfs-site.xml
1 | vim hdfs-site.xml |
文件内容:
1 |
|
如图:
注意看端口,以后访问正确的端口.
YARN配置文件
配置 yarn-site.xml
1 | vim yarn-site.xml |
文件内容:
1 |
|
如图:
3.2版本以上不需要配置环境变量了。
MapReduce配置文件
配置mapred-site.xml
1 | vim mapred-site.xml |
文件内容:
1 |
|
如图:
配置workers
1 | vim workers |
写入(默认里面有内容localhost,但是我的hadoop103对于的有localhost,所以我把localhost删掉了,写入下面内容):
1 | hadoop103 |
配置文件写完了,可以再cat检查一下写得对不对。
分发Hadoop配置文件
利用集群分发脚本,如果还没有弄集群分发脚本请参看集群分发脚本
1 | xsync /usr/local/hadoop/etc/hadoop |
启动集群
没有特别说明都是在$HADOOP_HOME目录下执行命令。
第一次启动
如果集群是第一次启动,需要在 hadoop103 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)
注意是集群启动之前初始化,如果启动了请先停止集群再执行命令:
1 | hdfs namenode -format |
初始化完毕会新生成两个文件夹,一个是data(hadoop的数据存储目录),另一个是logs(hadoop的日志存储目录).
再提醒一遍:之后再执行namenode初始化命令要提前把data和logs删除,且停止集群
正式启动
1 | sbin/start-dfs.sh |
关闭即为:
1 | sbin/stop-dfs.sh |
启动YARN
在配置了 ResourceManager 的节点启动,即hadoop104,输入下面命令:
1 | sbin/start-yarn.sh |
关闭即为:
1 | sbin/stop-yarn.sh |
启动历史服务器
在hadoop103上启动
1 | mapred --daemon start historyserver |
查看历史服务器是否启动:
1 | jps |
查看JobHistory:
http://hadoop103:19888/jobhistory
关闭即为:
1 | mapred --daemon stop historyserver |
这样就启动成功了。
注意启动和关闭顺序:
启动: dfs -> yarn -> historyserver
关闭;histroyserver -> yarn -> dfs
封装集群启停脚本
此脚本只包含HDFS、Yarn、Historyserver 。如果有其他服务,自行参照改写代码。
作用:方便快速的启动和停止集群。
不用输入sbin/start-dfs.sh
、sbin/start-yarn.sh
等。
存放地址:
/home/hadoop/bin
这是自己编写的脚本的存放地。前面的xsync就是在这里面,这个文件路径也已经被添加进了环境变量。
1 | cd /home/hadoop103/bin |
写入脚本文件内容:
1 |
|
其实内容很简单,就是先获取参数个数:$#
;
如果参数个数小于1(
if [ $# -lt 1]
),也就是没有参数,就输出提升说没有参数,然后结束脚本。如果参数个数大于等于1,就执行下面的命令。
直接就是一个switch-case判断参数是干嘛的,注意只判断第一个参数
$1
,如果是start就启动,启动就跳转到hadoop103中启动hdfsssh hadoop103 "$HADOOP_HOME/sbin/start-dfs.sh"
,然后启动yarn,跳转到hadoop104启动yarnssh hadoop104 "$HADOOP_HOME/sbin/start-yarn.sh"
。之后又跳转到hadoop103启动历史服务器功能ssh hadoop103 "$HADOOP_HOME/bin/mapred --daemon start historyserver"
。
关闭同理。
所以需要配置ssh免密登录,否则可能就报错,ssh免密登录请参看:集群分发脚本
赋予脚本执行权限
1 | chmod +x myhadoop |
以后启动和关闭就简单了。
启动:
1 | myhadoop start |
关闭:
1 | myhadoop stop |
编写统一状态查看脚本
作用:一个命令,查看所有节点上的服务运行状态
原理:jps
是查看一台节点上的服务运行状态命令。利用ssh跳转调用jps
命令即可完成。很简答,有时间自己尝试写吧。
1 | cd /home/hadoop103/bin |
编写脚本内容:
1 |
|
赋予脚本执行权限:chmod +x jpsall
统一测试
这里直接就可以测试.
测试包含以下内容:
- 测试集群是否能正常启动,搭建是否正确
- 测试myhadoop集群启停脚本是否正常工作
- 测试jpsall统一状态查看脚本是否正常工作
- 脚本是否符合预期计划,将服务配置到对应服务器上
1 | myhadoop start |
1 | jpsall |
注意对照我们前面的规划表Hadoop集群配置规划.查看服务是否启动,以及启动节点是否正确。
如果谨慎的话可以查看对应端口是否能正常访问,请参看hadoop常用端口号(这里常常会出现一点问题)。
1 | myhadoop stop |
然后在jpsall查看一下,如果所有服务器都只剩jps一个服务了,就代表顺利关闭了。
如果有问题请参看:搭建hadoop集群常见问题