编程不良人原版笔记 — https://blog.csdn.net/wei198621/article/details/111280555
part 01 hadoop 集群的搭建 – https://blog.csdn.net/wei198621/article/details/111167560
part 02 mapreduce 的学习 – https://blog.csdn.net/wei198621/article/details/111411463
相关笔记下载地址 ( 很少的费用 带来很多的收获 支持一下自己技术上的进步 支持一下陈兄 )
https://www.baizhiedu.xin/front/index#/main
Hadoop 从入门到精通----编程不良人 ( 25 小时 )
https://www.bilibili.com/video/BV17E411g7F2
java hdfs 操作hdfs库
https://github.com/wei198621/hdfs_by_baizhi
简介
hadoop 官网
http://hadoop.apache.org/
文档下载地址
https://hadoop.apache.org/docs/r2.10.1/
https://hadoop.apache.org/docs/r2.9.2/
配置项下载地址
core-site.xml
https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml
hdfs-site.xml
https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
Hadoop 常用命令
hdfs 常用命令汇总
0.
0.1 查看所有hadoop指令
hdfs dfs
0.2 查看帮助文档
hdfs dfs -help **
hdfs dfs -help mkdir
1. hdfs dfs -ls /xxx 查看指定文件夹下的文件
2.hdfs dfs -put /xxx /xxx上传本地文件到hdfs
[root@hadoop5 tmpfile]# touch bb.txt
[root@hadoop5 tmpfile]# echo "1234567890" >> bb.txt
[root@hadoop5 tmpfile]# hdfs dfs -put bb.txt /
[root@hadoop5 tmpfile]# hdfs dfs -ls /
3.hdfs dfs -cat /xxx/part-r-00000 查看hdfs文件
[root@hadoop5 tmpfile]# hdfs dfs -cat /bb.txt
1234567890
4. hdfs dfs -mkdir /xxx 创建文件夹
[root@hadoop5 tmpfile]# hdfs dfs -mkdir /dir02
[root@hadoop5 tmpfile]# hdfs dfs -ls /
-rw-r--r-- 3 root supergroup 11 2020-12-18 15:26 /bb.txt
drwxr-xr-x - root supergroup 0 2020-12-18 15:27 /dir02
.... 创建多级目录 -p 参数
[root@hadoop5 tmpfile]# hdfs dfs -mkdir -p /dir01/dir0101
5. hdfs dfs -rm -r /dir01 删除文件(夹)
[root@hadoop5 tmpfile]# hdfs dfs -rm -r /dir01
6. hadoop fs -du -s -h /xxx 查看某文件夹所占磁盘大小
[root@hadoop5 tmpfile]# hadoop fs -du -s -h /
28 /
7. hdfs dfsadmin -report 查看集群节点分配内存大小
hdfs dfsadmin -report 示例展示
[root@hadoop5 tmpfile]# hdfs dfsadmin -report
Configured Capacity: 41901096960 (39.02 GB)
Present Capacity: 12390113280 (11.54 GB)
DFS Remaining: 12390031360 (11.54 GB)
DFS Used: 81920 (80 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (4):
Name: 192.168.213.205:50010 (hadoop5)
Hostname: hadoop5
Decommission Status : Normal
Configured Capacity: 10475274240 (9.76 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 6672506880 (6.21 GB)
DFS Remaining: 3802742784 (3.54 GB)
DFS Used%: 0.00%
DFS Remaining%: 36.30%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Dec 18 15:39:48 CST 2020
Last Block Report: Fri Dec 18 15:29:06 CST 2020
Name: 192.168.213.206:50010 (hadoop6)
Hostname: hadoop6
Decommission Status : Normal
Configured Capacity: 10475274240 (9.76 GB)
DFS Used: 16384 (16 KB)
Non DFS Used: 7619432448 (7.10 GB)
DFS Remaining: 2855825408 (2.66 GB)
DFS Used%: 0.00%
DFS Remaining%: 27.26%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Dec 18 15:39:50 CST 2020
Last Block Report: Fri Dec 18 14:47:45 CST 2020
Name: 192.168.213.207:50010 (hadoop7)
Hostname: hadoop7
Decommission Status : Normal
Configured Capacity: 10475274240 (9.76 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 7618867200 (7.10 GB)
DFS Remaining: 2856382464 (2.66 GB)
DFS Used%: 0.00%
DFS Remaining%: 27.27%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Dec 18 15:39:49 CST 2020
Last Block Report: Fri Dec 18 14:45:11 CST 2020
Name: 192.168.213.208:50010 (hadoop8)
Hostname: hadoop8
Decommission Status : Normal
Configured Capacity: 10475274240 (9.76 GB)
DFS Used: 16384 (16 KB)
Non DFS Used: 7600177152 (7.08 GB)
DFS Remaining: 2875080704 (2.68 GB)
DFS Used%: 0.00%
DFS Remaining%: 27.45%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Dec 18 15:39:50 CST 2020
Last Block Report: Fri Dec 18 14:17:20 CST 2020
Hadoop Shell命令 中文手册
hdfs dfs常用命令 博客
https://blog.csdn.net/hbin_csdn/article/details/102855404
Hadoop Shell命令 中文手册 (1.0.4 版本 )
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
hadoop的单机安装
简介
学习地址
https://www.bilibili.com/video/BV17E411g7F2?p=3
配置到了第六步 (20201216)
1 克隆一台主机命名hadoop1
(之前主机就是静态地址,最好)
2. 修改ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
ip : 192.168.121.201
systemctl restart network
ifconfig
ip a 看到地址已经变为 201
3. 修改 hostname , hosts 的映射 重启
hostname 查看主机名 当前为 localhost.localdomain
vim /etc/hostname 修改主机名为 hadoop1
vim /etc/hosts 192.168.121.201 hadoop1
reboot 重启
su root 以后的操作尽量用root
hostname 查看host是否修改过来了
ping hadoop1 如果能ping通说明 /etc/hosts 也改好了
java -version
echo $PATH
4. 上传hadoop
SecureCRT 登录 192.168.121.201 hadoop1 这台服务器
alt + p 文件传输
使用版本 hadoop 2.9.2 国内镜像地址
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.9.2/
secureCRT中sftp的使用
securecrt 按下ALT+P就开启新的会话 进行ftp操作。
输入:help命令,显示该FTP提供所有的命令
pwd: 查询linux主机所在目录(也就是远程主机目录)
lpwd: 查询本地目录(一般指windows上传文件的目录:我们可以通过查看”选项“下拉框中的”会话选项“,如图二:我们知道本地上传目录为:D:/我的文档)
ls: 查询连接到当前linux主机所在目录有哪些文件
lls: 查询当前本地上传目录有哪些文件
lcd: 改变本地上传目录的路径
cd: 改变远程上传目录
get: 将远程目录中文件下载到本地目录
put: 将本地目录中文件上传到远程主机(linux)
put -r "d:\****"
quit: 断开FTP连接
将本地 d:\downloads 中Hadoop文件的放到 root 目录下
put -r “d:\Downloads\hadoop-2.9.2.tar.gz”
pwd
ls
切换到正常(非sftp状态)模式
tar -zxvf hadoop-2.9.2.tar.gz
查看目录
5. 上传 jdk1.8
阿里云 jdk-8u251-linux-x64.tar.gz 地址
https://code.aliyun.com/kar/oracle-jdk/raw/3c932f02aa11e79dc39e4a68f5b0483ec1d32abe/jdk-8u251-linux-x64.tar.gz
tar -zxvf 【压缩包文件名.tar.gz】 -C 【路径】/
tar -zxvf
tar -zxvf jdk-8u251-linux-x64.tar.gz -C /usr/java
修改 JAVA_HOME
vi /etc/profile
追加如下内容
export JAVA_HOME=/usr/java/jdk1.8.0_251
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:PATH
export CLASSPATH=.:
J
A
V
A
H
O
M
E
/
l
i
b
/
d
t
.
j
a
r
:
JAVA_HOME/lib/dt.jar:
JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
source /etc/profile
修改hdfs默认数据位置
step 1: 查看当前hdfs是否运行
jps
step2: 关闭hdfs
stop-dfs.sh
如果没有配置ssh登录,需要输入三次密码
step3: 进入hdfs目录,修改core-site.xml
vim /usr/hadoop-2.9.2/etc/hadoop/core-site.xml
— 增加下面的property
step4:格式化hdfs
hdfs namenode -format (仅仅是第一次使用需要格式化)
step5: 启动 hdfs
start-dfs.sh
step6 : 查看是否正常启动hdfs
[root@hadoop1 ~]# jps
19201 DataNode
19378 SecondaryNameNode
19060 NameNode
19493 Jps
[root@hadoop1 ~]#
配置SSH免密登录hadoop
1. 生成ssh秘钥对
ssh-keygen -t rsa 然后回车几次就可以啦
2. 查看秘钥对生成位置
ls /root/.ssh 会发现在home目录中生成了两个文件
id_rsa(私钥) id_rsa.pub(公钥)
3. 将公钥加入另一台机器的受信列表中
ssh-copy-id hadoop(主机名)
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (和上面命令一样,备用方法)
4. 再次查看/root/.ssh 目录 多出两个文件其中authorized_keys就是存放公钥列表文件
authorized_keys id_rsa id_rsa.pub known_hosts
5. 检测是否配置成功
ssh hadoop 不需要输入密码即可
以后再启动及关闭测试机器的hadoop就不需要每次都输入三次密码了
jps 查看
start-dfs.sh 启动
stop-dfs.sh 关闭
java 操作 Hdfs
- 配置文件
<properties>
<hadoop.version>2.9.2</hadoop.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--<scope>test</scope>-->
</dependency>
</dependencies>
- java 代码
@Test
public void test() throws IOException {
//hadoop文件系统的权限设置为root ,不设置,使用默认的登录用户
System.setProperty("HADOOP_USER_NAME","root");
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.213.201:9000");
conf.set("dfs.replication","1");
FileSystem fileSystem = FileSystem.get(conf);
// 上传本地文件到 hadoop 服务器
FileInputStream is = new FileInputStream("E:\\tempData\\20201217.txt");
Path path = new Path("/now01.txt");
FSDataOutputStream os = fileSystem.create(path);
IOUtils.copyBytes(is,os,1024,true);
//
fileSystem.close();
}
http://192.168.213.201:50070/explorer.html#/
// A code block
var foo = 'bar';
HDFS HA 集群搭建
(20201217)
10.15.0.5
10.15.0.6
10.15.0.7
10.15.0.8
1. 修改ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=10.15.0.5
2. 修改主机名
vim /etc/hostname
hadoop5
3. 修改映射 (命令模式yyp 复制黏贴一行)
vim /etc/hosts
10.15.0.5 hadoop5
10.15.0.6 hadoop6
10.15.0.7 hadoop7
10.15.0.8 hadoop8
4. 重启
reboot
5. 6,7,8 上面重复操作,然后就可以通过crt工具操作了
6.配置免密登录
想在 5 上面操作 ,6,7,8
hadoop5 ssh-keygen -t rsa -- 5上面生成秘钥
ssh-copy-id hadoop5 -- 将秘钥 copy 到 5,6,7,8
ssh-copy-id hadoop6
ssh-copy-id hadoop7
ssh-copy-id hadoop8
确认免密登录是否生效
ssh hadoop5
ssh hadoop6
ssh hadoop7
ssh hadoop8
7. 配置Hadoop集群
在5上面操作完成后同步到6,7,8
将 root 目录下的所有Hadoop2.9.2文件夹删除,保留之前的 hadoop2.9.2.tar.gz文件夹
tar -zxvf hadoop-2.9.2.tar.gz
hadoop5 上面配置环境变量
echo $JAVA_HOME
vim /root/hadoop-2.9.2/etc/hadoop/hadoop-env.sh java_home
vim /root/hadoop-2.9.2/etc/hadoop/core-site.xml 入口 1. fs.defaultFS hdfs://hadoop5:9000
2 hadoop.tmp.dir /root/hadoop-2.9.2/data
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop5:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop-2.9.2/data</value>
</property>
vim /root/hadoop-2.9.2/etc/hadoop/hdfs-site.xml 省略。。。
vim /root/hadoop-2.9.2/etc/hadoop/slaves
hadoop5
hadoop6
hadoop7
hadoop8
同步集群配置
将5上面配置好的 hadoop-2.9.2文件夹同步到 6,7,8 上面
scp -r 文件|目录名 root@hadoop6:/root/
scp -r /root/hadoop-2.9.2 root@hadoop6:/root/
scp -r /root/hadoop-2.9.2 root@hadoop7:/root/
scp -r /root/hadoop-2.9.2 root@hadoop8:/root/
8. 5,6,7,8 重新加载 /etc/profile
source /etc/profile
9. hadoop5 启动集群
在nodeNode的节点上执行格式化
hdfs namenode -format
start-dfs.sh
jps
<--
如果没有执行 hdfs namenode -format ,jps 会发现 NameNode 没有启动
需要在5 执行
stop-dfs.sh
5.6.7.8 都执行下面的删除
rm -rf /root/hadoop-2.9.2/data
5 执行
start-dfs.sh
-->
10 访问测试
http://192.168.121.205:50070
http://hadoop5:50070
[root@hadoop5 ~]# jps
10673 SecondaryNameNode
10420 DataNode
10906 Jps
10237 NameNode
[root@hadoop5 ~]# hdfs dfs -ls /
[root@hadoop5 ~]# hdfs dfs -put /etc/profile /profile.txt
[root@hadoop5 ~]# hdfs dfs -ls /
Found 1 items
-rw-r--r-- 3 root supergroup 2034 2020-12-18 06:52 /profile.txt
[root@hadoop5 ~]#
六.HDFS完全分布式(简单版)
七.ZK搭建高可用HDFS集群
7.1 原理解析
QJM(Quorum Journal Manager)是Hadoop专门为Namenode共享存储开发的组件。其集群运行一组Journal Node,每个Journal 节点暴露一个简单的RPC接口,允许Namenode读取和写入数据,数据存放在Journal节点的本地磁盘。当Namenode写入edit log时,它向集群的所有Journal Node发送写入请求,当多数节点回复确认成功写入之后,edit log就认为是成功写入。例如有3个Journal Node,Namenode如果收到来自2个节点的确认消息,则认为写入成功。
而在故障自动转移的处理上,引入了监控Namenode状态的ZookeeperFailController(ZKFC)。ZKFC一般运行在Namenode的宿主机器上,与Zookeeper集群协作完成故障的自动转移。整个集群架构图如下
7.2 搭建HDFS高可用集群 01 配置ZK
# 0.集群规划 和 环境准备
zk1 192.168.121.111 ---
zk2 192.168.121.112 ---
zk3 192.168.121.113 ---
hadoop12 192.168.121.212 --- datanode & journalnode & namenode(active) & DFSZKFailoverController(zkfc)
hadoop13 192.168.121.213 --- datanode & journalnode & namenode(standby) & DFSZKFailoverController(zkfc)
hadoop14 192.168.121.214 --- datanode & journalnode
环境准备: centos7.x 必须安装: yum install psmisc -y
1.修改Linux主机名
2.修改IP
3.修改主机名和IP的映射关系 /etc/hosts
4.关闭防火墙
5.ssh免登陆
6.安装JDK,配置环境变量等 省略
1.修改Linux主机名
2.修改IP 六台都要修改
[leo@hadoop5 ~]$ su root 。。。。
[root@hadoop5 network-scripts]# ifconfig
[root@hadoop5 network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@hadoop5 network-scripts]# systemctl restart network
[root@hadoop5 network-scripts]# ifconfig
3.修改主机名和IP的映射关系 /etc/hosts
[root@zk1 ~]# scp /etc/hosts root@hadoop14:/etc/hosts
4.关闭防火墙 。。。
5.ssh免登陆
zk1 zk2 zk3 不要做免密登录
Hadoop12 ,Hadoop13,Hadoop14 需要做免密配置
克隆的镜像,不用做
[root@zk1 .ssh]# ll /root/.ssh/
total 24
-rw-------. 1 root root 788 Dec 18 06:19 authorized_keys
-rw-------. 1 root root 1679 Dec 18 06:18 id_rsa
-rw-r--r--. 1 root root 394 Dec 18 06:18 id_rsa.pub
-rw-r--r--. 1 root root 2014 Dec 18 20:00 known_hosts
-rw-------. 1 root root 1679 Dec 16 06:18 y
-rw-r--r--. 1 root root 394 Dec 16 06:18 y.pub
6.安装JDK,配置环境变量等 省略
[root@zk1 ~]# echo $PATH
[root@zk1 ~]# vim /etc/profile
安装zk
1. 安装zk
secureCRT alt+ p 进入到上传页面 (本机不可执行)
put -r "D:\files\OtherCode\编程不良人\编程不良人hadoop全套资料\hadoop全套资料\资料\zookeeper-3.4.12.tar.gz" -- 中文路径不可以执行
put -r "D:\temp\zookeeper-3.4.12.tar.gz" -- OK
2. [root@zk1 ~]# tar -zxvf /root/zookeeper-3.4.12.tar.gz
3. [root@zk1 ~]# mkdir /root/zkdata ---zk1 zk2 zk3 都要执行
4. 创建zookeeper的表示文件myid 内容 分别为 1,2,3
[root@zk1 ~]# echo "1" >> /root/zkdata/myid ---- 1,2,3 三个都要执行 myid 内容分别为 1,2,3
[root@zk1 ~]# vim /root/zkdata/myid
1
5. 创建zookeeper 配置文件 具体内容下一步放入并解释
[root@zk1 ~]# touch /root/zkdata/zoo.cfg -- zoo.cfg ,zoo 是编程不良人老师自己起的 可以是任意值
[root@zk1 ~]# ll /root/zkdata/
total 4
-rw-r--r--. 1 root root 2 Dec 18 21:45 myid
-rw-r--r--. 1 root root 0 Dec 18 21:49 zoo.cfg
[root@zk1 ~]# vim /root/zkdata/zoo.cfg
# zk1 配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkdata
clientPort=3001 -- 3001 zk与客户端通讯端口,
server.1=zk1:3002:3003 --- 3002 zk内部广播端口,3003 zk容错选举端口
server.2=zk2:4002:4003
server.3=zk3:5002:5003
# zk2 配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkdata
clientPort=4001 -- 4001 因为是多台机器, 3001 也可以,自行体会
server.1=zk1:3002:3003
server.2=zk2:4002:4003
server.3=zk3:5002:5003
# zk3 配置
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkdata
clientPort=5001
server.1=zk1:3002:3003
server.2=zk2:4002:4003
server.3=zk3:5002:5003
# 7.启动zk节点
[root@zk2 ~]# cd /root/zookeeper-3.4.12/bin
[root@zk2 bin]# ./zkServer.sh start /root/zkdata/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /root/zkdata/zoo.cfg
Starting zookeeper ... STARTED
[root@zk2 bin]# ./zkServer.sh status /root/zkdata/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /root/zkdata/zoo.cfg
Mode: leader ------------leader follower
[root@zk2 bin]# jps
80358 Jps
79547 QuorumPeerMain
----jps 查看进程
--- (进入zookeeper/bin目录) ./zkServer.sh status /root/zkdata/zoo.cfg -- 查看启动状态
7.2 搭建HDFS高可用集群 02 配置hadoop及联调
# 0.集群规划 和 环境准备
zk1 192.168.121.111 ---
zk2 192.168.121.112 ---
zk3 192.168.121.113 ---
hadoop12 192.168.121.212 --- datanode & journalnode & namenode(active) & DFSZKFailoverController(zkfc)
hadoop13 192.168.121.213 --- datanode & journalnode & namenode(standby) & DFSZKFailoverController(zkfc)
hadoop14 192.168.121.214 --- datanode & journalnode
hdfs ha 搭建步骤
1. 主机名 和 IP 映射 --- vim /etc/hosts vim /etc/hostname
2. 配置环境变量 --- vim /etc/profile
3. 配置ssH 免密登录
12 上面 ssh-keygen -t rsa --- 生成key ssh hadoop12 测试登录 需要输入密码
ssh-copy-id hadoop12 ---- copy key 到 本地 ssh hadoop12 测试登录 无需输入密码
ssh-copy-id hadoop13 ---- 同上测试
ssh-copy-id hadoop14 ---- 同上测试
4. 安装依赖 yum install psmisc -y -- 12 13 14
psmisc 组件用于 : journal node 节点 在前一个active namenode 出错时候 ,登录此namenode ,将其kill掉
5. 12 13 14 中安装 hadoop
5.1 12上面 alt + p
put -r "D:\temp\hadoop-2.9.2.tar.gz"
5.2 12上面
scp /root/hadoop-2.9.2.tar.gz root@hadoop13:/root
scp /root/hadoop-2.9.2.tar.gz root@hadoop14:/root
6. 配置环境变量 vim /etc/profile source /etc/profile echo $PATH
7.修改Hadoop 中4个配置文件的配置
hadoop-env.sh
core-site.xml
hdfs-site.xml
slaves
从12 同步以上4个文件到相应 13 14
scp -r /hadoop-2.9.2/etc/hadoop root@hadoop13:/root/hadoop-2.9.2/etc/
8. 启动集群
8.1 hdfs zkfs -formatZK
8.2 hadoop-daemon.sh start journalnode ----3
8.3 hdfs namenode -format ns
8.4 start-dfs.sh
8.5 hdfs namenode -bootstrapStandby -------
8.6 hadoop-daemon.sh start namenode
9. 测试
hadoop12:50070
hadoop13:50070
7.修改Hadoop 中4个配置文件的配置
7.1 vim /root/hadoop-2.9.2/etc/hadoop/hadoop-env.sh --配置环境变量 echo $JAVA_HOME
7.2 vim /root/hadoop-2.9.2/etc/hadoop/core-site.xml
<!--hdfs主要入口不再是一个具体机器而是一个虚拟的名称 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop-2.9.2/data</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1:3001,zk2:4001,zk3:5001</value>
</property>
7.3 vim /root/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
JournalNode 默认端口号 8485
<configuration>
<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!-- ns下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop12:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop12:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop13:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop13:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop12:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop13:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop13:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop12:8485;hadoop13:8485;hadoop14:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/root/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
</configuration>
7.4 vim /root/hadoop-2.9.2/etc/hadoop/slaves
hadoop12
hadoop13
hadoop14
7.4 同步集群配置 从12 同步以上4个文件到相应 13 14
scp -r /root/hadoop-2.9.2/etc/hadoop root@hadoop13:/root/hadoop-2.9.2/etc/
[root@hadoop12 hadoop]# scp -r /root/hadoop-2.9.2/etc/hadoop/ root@hadoop13:/root/hadoop-2.9.2/etc --- 进入 13 目录 查看 core-site.xml等文件是否修改
[root@hadoop12 hadoop]# scp -r /root/hadoop-2.9.2/etc/hadoop/ root@hadoop14:/root/hadoop-2.9.2/etc
8. 启动集群
8.1 hdfs zkfc -formatZK ---- 在 namenode节点的 12 或者 13 任意一台机器上面,执行如下格式化语句,进行格式化 zk (示例选用 12 )
-----倒数6行提示 Successfully created /hadoop-ha/ns in ZK. 表示成功 在zk 上面创建 hadoop-ha/ns 节点
8.2 启动 journalnode 节点 (journal node 的作用是同步edits log ,需要在edits log 生成前启动 记录所有日志要先于datanode 启动)
hadoop-daemon.sh start journalnode ----12,13,14 上面都要启动
[root@hadoop12 hadoop]# jps
3757 Jps
[root@hadoop12 hadoop]# hadoop-daemon.sh start journalnode
starting journalnode, logging to /root/hadoop-2.9.2/logs/hadoop-root-journalnode-hadoop12.out
[root@hadoop12 hadoop]# jps ---- 1.确认是否有journal服务
4082 JournalNode
4189 Jps
[root@hadoop12 journal]# ls /root --- 2. 确认journal 文件夹是否创建成功 此处生成的目录是 hdfs-site.xml 对journal 的配置
hadoop-2.9.2 hadoop-2.9.2.tar.gz journal
8.3 在 12 或者 13 中选一台作为active namenode 节点,执行格式化操作 hdfs namenode -format ns 在那台执行,哪台就是active ,另一条是standby ,本示例选择 12 作为 active 节点 。
[root@hadoop12 journal]# hdfs namenode -format ns
在这里插入代码片
在这里插入代码片
8.4 在active namenode 节点12 上面启动Namenode start-dfs.sh
[root@hadoop12 ns]# start-dfs.sh
Starting namenodes on [hadoop12 hadoop13]
hadoop13: starting namenode, logging to /root/hadoop-2.9.2/logs/hadoop-root-namenode-hadoop13.out
hadoop12: starting namenode, logging to /root/hadoop-2.9.2/logs/hadoop-root-namenode-hadoop12.out
hadoop12: starting datanode, logging to /root/hadoop-2.9.2/logs/hadoop-root-datanode-hadoop12.out
hadoop14: starting datanode, logging to /root/hadoop-2.9.2/logs/hadoop-root-datanode-hadoop14.out
hadoop13: starting datanode, logging to /root/hadoop-2.9.2/logs/hadoop-root-datanode-hadoop13.out
Starting journal nodes [hadoop12 hadoop13 hadoop14]
hadoop12: journalnode running as process 33402. Stop it first.
hadoop13: journalnode running as process 33190. Stop it first.
hadoop14: journalnode running as process 33546. Stop it first.
Starting ZK Failover Controllers on NN hosts [hadoop12 hadoop13]
hadoop13: starting zkfc, logging to /root/hadoop-2.9.2/logs/hadoop-root-zkfc-hadoop13.out
hadoop12: starting zkfc, logging to /root/hadoop-2.9.2/logs/hadoop-root-zkfc-hadoop12.out
8.5 在 standby namenody 节点 213 执行 hdfs namenode -bootstrapStandby -------
[root@hadoop13 ns]# hdfs namenode -bootstrapStandby
[root@hadoop13 ns]# jps
42913 DataNode
47187 Jps
33190 JournalNode
43274 DFSZKFailoverController
[root@hadoop13 ns]#
8.6 standby 节点 13 上面执行 如下语句单独启动namenode hadoop-daemon.sh start namenode
[root@hadoop13 ns]# jps
42913 DataNode
47187 Jps
33190 JournalNode
43274 DFSZKFailoverController
[root@hadoop13 ns]# hadoop-daemon.sh start namenode
starting namenode, logging to /root/hadoop-2.9.2/logs/hadoop-root-namenod-hadoop13.out
[root@hadoop13 ns]# jps
42913 DataNode
49315 NameNode
49475 Jps
33190 JournalNode
43274 DFSZKFailoverController
[root@hadoop13 ns]#
9. 测试
http://hadoop12:50070 --- 配置本机host 后,可以用这个地址访问,暂时不可以
http://192.168.121.212:50070
http://hadoop13:50070 --- 配置本机host 后,可以用这个地址访问,暂时不可以
http://192.168.121.213:50070
[root@hadoop12 ~]# hdfs dfs -put /etc/profile /profile
[root@hadoop12 ~]# hdfs dfs -ls /
Found 1 items
-rw-r--r-- 3 root supergroup 2034 2020-12-19 06:14 /profile
[root@hadoop12 ~]#
将 212 active 节点宕机后
[root@hadoop12 ~]# jps
43890 DataNode
44420 DFSZKFailoverController
58853 Jps
33402 JournalNode
43722 NameNode
[root@hadoop12 ~]# kill 43722
[root@hadoop12 ~]# jps
59520 Jps
43890 DataNode
44420 DFSZKFailoverController
33402 JournalNode
[root@hadoop12 ~]#
再次将之前宕机的212 namenode 启动
hadoop-daemon.sh start namenode
[root@hadoop12 ~]# jps
59520 Jps
43890 DataNode
44420 DFSZKFailoverController
33402 JournalNode
[root@hadoop12 ~]# hadoop-daemon.sh start namenode
starting namenode, logging to /root/hadoop-2.9.2/logs/hadoop-root-namenode-hadoop12.out
[root@hadoop12 ~]# jps
43890 DataNode
44420 DFSZKFailoverController
33402 JournalNode
60746 Jps
60623 NameNode
[root@hadoop12 ~]#
happy ending 20201219