1、版本对应(官网地址)
选用版本:hadoop-3.1.4 + hbase-2.3.4 + apache-zookeeper-3.5.9 + java version "1.8.0_181"
1、安装包
apache-zookeeper-3.5.9-bin.tar.gz
hadoop-3.1.4.tar.gz
hbase-2.3.4-bin.tar.gz
jdk-8u181-linux-x64.tar.gz
# 解压数据包、删除.txt.md.html.等无用的文本文件、删除.cmd的windows使用命令文件
2、下载链接
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
https://archive.apache.org/dist/hadoop/common/hadoop-3.1.4/hadoop-3.1.4.tar.gz
https://archive.apache.org/dist/hbase/2.3.4/hbase-2.3.4-bin.tar.gz
https://mirrors.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz
3、免密登录
# 1、生成密钥:
ssh-keygen -t rsa
# 2、将公钥写入其他机器中
/home/coremail/.ssh/authorized_keys
scp -P56789 -i ~/.ssh/id_rsa id_rsa coremail@10.224.192.210:/home/coremail/.ssh/
scp -P56789 -i ~/.ssh/id_rsa id_rsa coremail@10.224.192.206:/home/coremail/.ssh/
# 3、测试登录:
[coremail@test-194 .ssh]$ ssh-agent bash
[coremail@test-194 .ssh]$ ssh-add ~/.ssh/id_rsa
Identity added: /home/coremail/.ssh/id_rsa (/home/coremail/.ssh/id_rsa)
[coremail@test-194 .ssh]$ ssh -A -p 56789 coremail@10.224.192.206
Last login: Thu Apr 15 15:15:10 2021 from 10.224.192.194
[coremail@test-206 ~]$
2、Hadoop分布式部署
| hadoop2.x | Hadoop3.x | |
|---|---|---|
| 访问HDFS端口 | 50070 | 9870 |
| 访问MR执行情况端口 | 8088 | 8088 |
| 历史服务器 | 19888 | 19888 |
| 客户端访问集群端口 | 9000 | 8020 |
1、部署节点分配
| 节点 | test-194 | test-206 | test-210 |
|---|---|---|---|
| Zookeeper | * | * | * |
| zkfc | * | * | |
| JournalNode | * | * | * |
| NameNode | active | standby | |
| DataNode | * | * | * |
| HMaster | master | backup-master | |
| HRegeionServer | * | * | * |
2、 配置文件
core-site.xml是全局配置,hdfs-site.xml和mapred-site.xml分别是hdfs和mapred的局部配置。
core-default.html
<configuration>
<!-- 文件系统类型://主机名或ip:端口号 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://test-194:8020</value>
</property>
<!-- 文件存储临时目录(需要创建)-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/tmp/</value>
</property>
<!-- 缓冲区大小 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 开启hdfs垃圾桶机制,删除文件后放到垃圾桶中,10080分钟后清理垃圾桶 -->
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- 访问secondary node的地址,主机名:端口 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>test-194:9868</value>
</property>
<!-- namenode访问地址和端口 -->
<property>
<name>dfs.namenode.http-address</name>
<value>test-194:9870</value>
</property>
<!-- namenode元数据存放位置(需要自己创建) -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/data/namenodedatas</value>
</property>
<!-- 定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/data/datanodedatas</value>
</property>
<!-- namenode日志文件存放目录(editslog) -->
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///home/hadoop/data/dfs/name-edits</value>
</property>
<!-- secondarynamenode保存待合并的fsimage -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///home/hadoop/data/dfs/name</value>
</property>
<!-- secondarynamenode保存待合并的editslog -->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///home/hadoop/data/dfs/secondry-edits</value>
</property>
<!-- 每个文件切片的备份个数(默认为三个) -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- hdfs的文件权限 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- 设置一个文件切片的大小:128M -->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
</configuration>
hadoop-env.sh
export JAVA_HOME=/usr/local/jdk
export HADOOP_SSH_OPTS="-p 56789"
mapred-env.sh
export JAVA_HOME=/usr/local/jdk
mapred-site.xml
<configuration>
<!-- -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 开启mapreduce的小任务模式 -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<!-- 设置历史任务的主机和端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>test-194:10020</value>
</property>
<!-- 通过网页访问历史任务的主机和端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>test-194: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>
</configuration>
yarn-site.xml
<configuration>
<!-- 配置yarn.resourcemanager的主机名 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>test-194</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 如果vmem、pmem资源不够,会报错,此处将资源监察置为false -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
workers
test-194
test-206
test-210
创建对应目录
mkdir -p /home/hadoop/data/tmp/
mkdir -p /home/hadoop/data/namenodedatas
mkdir -p /home/hadoop/data/datanodedatas
mkdir -p /home/hadoop/data/dfs/name-edits
mkdir -p /home/hadoop/data/dfs/name
mkdir -p /home/hadoop/data/dfs/secondry-edits
环境变量
export HADOOP_HOME=/home/hadoop
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
3、 启动集群
(主节点上执行以下命令)
start-dfs.sh
start-yarn.sh
# 已过时mr-jobhistory-daemon.sh start historyserver
mapred --daemon start historyserver
停止集群
stop-dfs.sh
stop-yarn.sh
# 已过时 mr-jobhistory-daemon.sh stop historyserver
mapred --daemon stop historyserver
逐个启动
# 在主节点上使用以下命令启动 HDFS NameNode:
# 已过时 hadoop-daemon.sh start namenode
hdfs --daemon start namenode
# 在主节点上使用以下命令启动 HDFS SecondaryNamenode:
# 已过时 hadoop-daemon.sh start secondarynamenode
hdfs --daemon start secondarynamenode
# 在每个从节点上使用以下命令启动 HDFS DataNode:
# 已过时 hadoop-daemon.sh start datanode
hdfs --daemon start datanode
# 在主节点上使用以下命令启动 YARN ResourceManager:
# 已过时 yarn-daemon.sh start resourcemanager
yarn --daemon start resourcemanager
# 在每个从节点上使用以下命令启动 YARN nodemanager:
# 已过时 yarn-daemon.sh start nodemanager
yarn --daemon start nodemanager
#以上脚本位于$HADOOP_HOME/sbin/目录下。如果想要停止某个节点上某个角色,只需要把命令中的start 改为stop 即可。
检验节点
[root@test-194 ~]# jps
14627 SecondaryNameNode
14915 ResourceManager
15636 Jps
14405 DataNode
15447 JobHistoryServer
15033 NodeManager
14283 NameNode
[root@test-206 ~]# jps
5832 Jps
5611 NodeManager
5455 DataNode
[root@test-210 ~]# jps
21073 Jps
13201 DataNode
13663 NodeManager
3、Zookeeper部署
zookeeper:开源分布式协调服务框架,主要解决分布式系统中的一致性和数据管理问题。
本质上是分布式文件系统,适合存放小的文件(最好不超过1M),也可以理解为数据库(存放配置文件)。
| 端口号 | 详解 |
|---|---|
| 3888 | 选举Leader。 |
| 2888 | 集群内的机器通讯使用。(Leader使用此端口) |
| 2181 | 对Client端提供服务的端口。 |
1、解压文件
[root@test-194 file]# tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /home/
2、同步时钟
[root@test-194 ~]# ntpdate time1.aliyun.com
[root@test-206 ~]# ntpdate time1.aliyun.com
[root@test-210 ~]# ntpdate time1.aliyun.com
3、zoo.cfg配置文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zookeeper/zkdatas
clientPort=2181
#保留多少个快照(默认3)
autopurge.snapRetainCount=3
#日志多久清理一次(默认1h)
autopurge.purgeInterval=1
#服务器集群地址
#mid.1=node01:端口1:端口2
server.1=test-194:2888:3888
server.2=test-206:2888:3888
server.3=test-210:2888:3888
4、添加mid
#创建zkdatas目录
mkdir -p /home/zookeeper/zkdatas
echo 1 > /home/zookeeper/zkdatas/myid
5、启动zookeeper
#启动zookeeper
./bin/zkServer.sh start
#查看zookeeper状态
[root@test-194 zookeeper]# ./bin/zkServer.sh status
/usr/local/jdk/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
#从
Mode: follower
#主
Mode: leader
4、HBase部署
1、解压安装包
[root@test-194 file]# tar -zxvf hbase-2.3.4-bin.tar.gz -C /home/
2、regionservers配置文件
test-194
test-206
test-210
3、hbase-env.sh配置文件
# jdk环境变量
export JAVA_HOME=/usr/local/jdk/
# 不使用内置zookeeper
export HBASE_MANAGES_ZK=false
# ssh端口
export HBASE_SSH_OPTS="-p 56789"
4、hbase-site.xml配置文件
<configuration>
<!-- 本地文件系统 的临时文件夹(重新启动计算机将清空 /tmp目录) -->
<property>
<name>hbase.tmp.dir</name>
<value>/home/hbase/tmp</value>
</property>
<!-- hbase根目录 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://test-194:8020/hbase</value>
</property>
<!-- 分布式(false表示单机模式) -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- zookeeper集群 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>test-194,test-206,test-210</value>
</property>
<!-- zookeeper工作目录 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/zookeeper/zkDatas</value>
</property>
</configuration>
<!-- 默认端口(0.98以前是60000,可以不配置) -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<!-- hbase master的web UI页面端口(默认16010,可以不配置) -->
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
<description>the port for the hbase master web UI
set to -1 if you do not wan a UI instance run
</description>
</property>
5、制作Hadoop配置文件的软连接
ln -s /home/hadoop/etc/hadoop/core-site.xml /home/hbase/conf/core-site.xml
ln -s /home/hadoop/etc/hadoop/hdfs-site.xml /home/hbase/conf/hdfs-site.xml
6、启动HBase
/home/hbase/bin/start-hbase.sh
5、最终结果
[root@test-194 ~]# jps
12096 QuorumPeerMain
17314 Jps
16706 HMaster
14627 SecondaryNameNode
14915 ResourceManager
14405 DataNode
15447 JobHistoryServer
15033 NodeManager
16202 HRegionServer
14283 NameNode
[root@test-206 ~]# jps
4932 QuorumPeerMain
5911 HRegionServer
5611 NodeManager
6175 Jps
5455 DataNode
[root@test-210 ~]# jps
13201 DataNode
1188 Jps
3976 QuorumPeerMain
25914 HRegionServer
13663 NodeManager
Web UI:
YARN:http://10.224.192.194:8088/cluster
overview:http://10.224.192.194:9870/dfshealth.html#tab-overview
历史日志:http://10.224.192.194:19888/jobhistory
HBase:http://10.224.192.194:16010/master-status