前面那篇文章安装的是hadoop2,此次我们搭建hadoop3,环境还是多搭几次找找感觉。
环境节点配置
node1 | node2 | node3 |
NN | SN | – |
DN | DN | DN |
node1 是namenode, node2是secondary namenode, node1~node3同时也是datanode
1 克隆节点
参考文章
克隆出3个节点node1,node2,node3
2 配置网络
2.1 修改网卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
删除uuid,修改ip
删除70-persistent-net.rules,centos7的话没有就不用删除
rm -rf /etc/udev/rules.d/70-persistent-net.rules
2.2 修改host文件
vim /etc/hosts
3 安装JDK
3.1 上传安装包
在家目录创建两个文件夹installpkgs放安装包,app放解压出来的东西
cd ~
mkdir installpkgs
mkdir app
推荐使用xftp,winscp,filezilla等ftp工具
3.2 解压
tar zxvf jdk-8u231-linux-x64.tar.gz -C ~/app
重命名JDK包好记点
cd ~/app
mv jdk1.8.0_231/ JDK8
3.3 配置环境变量
vim .bash_profile
使配置立即生效
source .bash_profile
3.4 配置host文件
vim /etc/hosts
node2,node3 同理
3.5 免密登陆
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3
这个ssh-copy-id 命令能直接在被登录的主机用户目录下自动创建.ssh目录,及authorized_keys文件
测试免密登录
3.6 关闭防火墙
查看防火墙状态
service iptables status
停止防火墙
service iptables stop
永久关闭防火墙
chkconfig iptables off
如果是centos7
查看防火墙状态
systemctl status firewalld.service
停止防火墙
systemctl stop firewalld.service
永久关闭防火墙
systemctl disable firewalld.service
4 安装Hadoop3
4.1 下载安装包
https://archive.apache.org/dist/hadoop/common/
4.2 上传安装包
4.3 解压,重名安装包
tar zxvf hadoop-3.1.0.tar.gz -C ~/app
cd ~/app
mv hadoop-3.1.0/ HADOOP3
4.4 部署和配置
4.4.1 配置HADOOP环境变量
vim ~/.bash_profile
JAVA_HOME=/root/app/JDK8
HADOOP_HOME=/root/app/HADOOP3
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME
export JAVA_HOME
export PATH
source ~/.bash_profile
4.4.2 hadoop-env.sh
cd ~/app/HADOOP3/etc/hadoop/
vim hadoop-env.sh
export JAVA_HOME=/root/app/JDK8
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
hadoop3为了提升安全性,添加了HDFS_NAMENODE_USER,HDFS_DATANODE_USER,
HDFS_SECONDARYNAMENODE_USER,实际情况不能都用root,此处仅是为了方便搭建环境,进行演示
4.4.3 core-site.xml
先创建一个data目录
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9820</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/app/HADOOP3/data</value>
</property>
</configuration>
说明:
fs.defaultFS指定namenode地址
hadoop.tmp.dir指定元数据的存放目录
3.4.4 hdfs-site.xml
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
</configuration>
4.4.5 workers文件
vim workers
4.5 拷贝文件到从节点
4.5.1 拷贝jdk
在node1上执行
scp -r ~/app/JDK8 root@node2:/root/app/
scp -r ~/app/JDK8 root@node3:/root/app/
4.5.2 拷贝bash_profile
scp -r ~/.bash_profile root@node2:/root/.bash_profile
scp -r ~/.bash_profile root@node3:/root/.bash_profile
在node2上执行
source ~/.bash_profile
在node3上执行
source ~/.bash_profile
4.5.3 拷贝hadoop目录
scp -r ~/app/HADOOP3/ root@node2:/root/app/
scp -r ~/app/HADOOP3/ root@node3:/root/app/
4.6 格式化namenode
hdfs namenode -format
确认没有报错
4.7 启动
start-dfs.sh
确认启动成功
4.8 测试访问
5 HDFS HA高可用
之前只有一个NN,万一挂了就都跪了,高可用就是准备多个NN,一个active,一个standby。
环境节点配置
node1 | node2 | node3 |
NN | NN | – |
ZKFC | – | ZKFC |
JN | JN | JN |
ZK | ZK | ZK |
DN | DN | DN |
NN:namenode 一个active,一个standby
zkfc:负责监控NN的状态,万一挂了,就把standby切换为active
JN:journal node负责存放两个NN的公共的edits等元数据
DN:datanode 用来存实际的数据块
ZK:zookeeper节点,zkfc节点把监控NN的心跳数据发送给zk,如果NN挂了,zk会进行选举
5.1 配置Zookeeper
b) 上传到linux
c) 解压
cd ~/installpkgs
tar zxvf zookeeper-3.4.6.tar.gz -C ~/app
5.1.1 修改zk配置文件zoo.cfg
# 创建一个存放数据的data目录
mkdir /root/app/zookeeper-3.4.6/data
# 拷贝一份配置文件
cp ~/app/zookeeper-3.4.6/conf/zoo_sample.cfg ~/app/zookeeper-3.4.6/conf/zoo.cfg
# 编辑配置文件
vim ~/app/zookeeper-3.4.6/conf/zoo.cfg
5.1.2 创建myid文件
cd /root/app/zookeeper-3.4.6/data
echo 1 > myid
more myid
5.1.3 拷贝zk到其他节点
scp -r ~/app/zookeeper-3.4.6/ node2:/root/app/
scp -r ~/app/zookeeper-3.4.6/ node3:/root/app/
vim myid
more myid
node2,node3的myid修改下
5.1.4 配置环境变量
为了方便启动zk,加个环境变量,node2,node3同理
vim ~/.bash_profile
source ~/.bash_profile
scp ~/.bash_profile node3:/root/.bash_profile
scp ~/.bash_profile node3:/root/.bash_profile
5.1.5 记得关闭防火墙
# centos7
# 查看防火墙状态
systemctl status firewalld.service
# 停止防火墙
systemctl stop firewalld.service
# 永久关闭防火墙
systemctl disable firewalld.service
node3 同理关闭
5.1.6 启动zk
zkServer.sh start
5.2 Hadoop配置文件
5.2.1 hadoop-env.sh
cd ~/app/HADOOP3/etc/hadoop/
vim hadoop-env.sh
export JAVA_HOME=/root/app/JDK8
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
5.2.2 core-site.xml
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/app/HADOOP3/data</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>
- fs.defaultFS 默认文件系统的
5.2.3 hdfs-site.xml
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node1:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node2:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/wen</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journalnode/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
5.2.4 workers
vim workers
node1
node2
node3
5.3 复制文件到其他节点
scp hadoop-env.sh root@node2:/root/app/HADOOP3/etc/hadoop/
scp hadoop-env.sh root@node3:/root/app/HADOOP3/etc/hadoop/
scp core-site.xml root@node2:/root/app/HADOOP3/etc/hadoop/
scp core-site.xml root@node3:/root/app/HADOOP3/etc/hadoop/
scp hdfs-site.xml root@node2:/root/app/HADOOP3/etc/hadoop/
scp hdfs-site.xml root@node3:/root/app/HADOOP3/etc/hadoop/
scp workers root@node2:/root/app/HADOOP3/etc/hadoop/
scp workers root@node3:/root/app/HADOOP3/etc/hadoop/
5.4 免密登录
之前node1可以免密登录其他节点,现在node2也做一个免密登录
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3
5.5 启动journalnode
hdfs --daemon start journalnode
5.6 格式化namenode
hdfs namenode -format
5.7 复制元数据到另一个NN上
我们在node1上进行格式化,因为node2也是NN,所以需要把元数据复制一份到node2上
cd /root/app/HADOOP3
scp -r data root@node2:/root/app/HADOOP3/
5.8 格式化ZKFC
hdfs zkfc -formatZK
5.9 启动集群
start-dfs.sh
5.10 浏览器测试
node1
node2
5.11 高可用测试
kill -9 [active namenode的pid]
干掉active的node2后,node1成为active
附件安装介质下载
链接:https://pan.baidu.com/s/1DlB5NuVJWBYjPa1FzNxx4A 提取码:8ko9