乐趣区

关于hadoop:Hadoop3x完全分布式集群搭建教程二

以下操作全副须要切换到 hadoop 用户

编写集群批量操作脚本

1. 在 /home/hadoop/bin 目录下上传脚本

cd ~/bin
rz

(1)xsync
这个脚本的作用就是将指定目录的所有文件复制到其余虚拟机雷同目录中
用法为:

xsync 文件门路

留神:因为要保障集群每台机器的配置都雷同,所以任意一台机器有批改都须要及时应用 xsync 脚本散发批改后的文件给其它机器
(2)ssh

  • 有以下几个文件

ips_zk、ips_hadoop、ssh-all.sh、zk-ssh-all.sh

  • 其中 ssh-all.sh、zk-ssh-all.sh 实现多机操作

两个脚本的区别是前者操作 hadoop 集群,后者操作 zookeeper 集群

用法为:

ssh-all.sh 命令
  • ips:用于寄存要操作的主机列表,用回车或空格隔开
  • 而后批改权限
chmod -R 777 ~/bin

2. 测试脚本

xsync ~/bin
ssh-all.sh hostname

此时调用 ssh 脚本须要输出各虚拟机的明码(因为还没有设置免密登录其它机器)

设置免密登录

实现任意一台虚拟机都能够免密登录到其它虚拟机,即任意一台虚拟机执行 ssh hadoop10x 不须要输明码

1. 生成公钥和私钥:

cd ~
ssh-keygen -t rsa

而后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

2. 将公钥拷贝到要免密登录的指标机器上

ssh-copy-id hadoop101
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
ssh-copy-id hadoop105

3. 把整个.ssh 文件夹散发到其它虚拟机

xsync ~/.ssh

批改集群的相干配置文件

1. 批改 Zookeeper 配置文件

(1)在 hadoop101 上创立 data 目录,创立 myid 文件

cd /opt/module/zookeeper-3.6.2/
mkdir data
touch myid

(2)批改 zoo.cfg 文件

cd conf
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg

找到dataDir,将其批改为

dataDir=/opt/module/zookeeper-3.6.2/data

并减少如下配置

#######################cluster##########################
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888

(3)散发

xsync /opt/module

4. 批改 zookeeper 集群的 myid 文件
讲 hadoop101、hadoop102、hadoop103 的 myid 文件内容别离批改为
123

[hadoop@hadoop101 ~]$ vim /opt/module/zookeeper-3.6.2/data/myid
[hadoop@hadoop101 data]$ ssh hadoop102
[hadoop@hadoop102 ~]$ vim /opt/module/zookeeper-3.6.2/data/myid
[hadoop@hadoop102 ~]$ ssh hadoop103
[hadoop@hadoop103 ~]$ vim /opt/module/zookeeper-3.6.2/data/myid

2. 批改 HDFS、YARN、MapReduce 配置文件

  • 须要批改的文件有:

core-site.xml
hadoop-env.sh
workers(hadoop2.x 版本里的名字为 slaves)
hdfs-site.xml
yarn-site.xml
yarn-env.sh
mapred-site.xml
mapred-env.sh

以上配置文内容比拟多(因为配置的是 HA 集群),所以就不贴出来了,都在我之前分享的网盘链接里。须要将其上传并笼罩至 /opt/module/hadoop-3.1.3/etc/hadoop

  • 而后,在集群上散发配置
xsync /opt/module/hadoop-3.1.3/etc

第一次启动集群

1.Zookeeper

  • 批量启动 zookeeper 服务
zk-ssh-all.sh  zkServer.sh
  • 查看是否启动胜利
zk-ssh-all.sh  zkServer.sh status

  • 初始化 HA 的 zookeeper 信息(只有第一次启动须要)
hdfs zkfc -formatZK
  • 启动 zkclient,并连贯 zookeeper 集群
zkCli.sh -server hadoop101:2181,hadoop102:2181,hadoop103:2181

2.HDFS

(1)启动 NameNode

  • 同步两台 NameNode 的信息
# 在 hadoop101 上启动 journalnode 
hdfs --daemon start journalnode 
#在 hadoop102 上启动 journalnode 
hdfs -‐daemon start journalnode
  • hadoop101 初始化 namenode
hdfs namenode -format
  • 启动 hadoop101 namenode
hdfs --daemon start namenode
  • 在 hadoop102 上同步第一个 namenode 状态(第一次启动前执行, 当前不必每次都执行)
hdfs namenode -bootstrapStandby
  • 启动 hadoop102 namenode
hdfs --daemon start namenode

能拜访 http://hadoop101:50070/http://hadoop102:50070/ 则启动胜利

  • 启动 ZKFC(激活其中一台 namenode)
hdfs --daemon start zkfc

再次拜访http://hadoop101:50070/,就会发现

(2)启动 DataNode

  • 先批量批改 ${HADOOP_HOME}/etc/hadoop/tmp 目录下的文件权限为 751
ssh-all.sh chmod -R 751 ${HADOOP_HOME}/etc/hadoop/tmp
  • 启动所有的 datanode,在标记为 active 的 namenode 节点上执行
hdfs --workers --daemon start datanode

执行胜利后,点击 web 页面的 Datanodes

往下滑一点,看到此画面就是启动胜利

3.YARN

  • 在 hadoop101 上启动 yarn
start-yarn.sh
  • 查看各节点的过程信息是否有 ResourceManager 和 NodeManager
./ssh-all.sh jps

hadoop101 有 ResourceManager 过程
hadoop103 hadoop104 hadoop105 有 NodeManager 过程
即为启动胜利

  • 在 hadoop102 上再启动一个 yarn(启动 yarn-HA)
yarn-daemon.sh start resourcemanager

此时 hadoop102 也有 ResourceManager 过程

之后,如何启动和进行一个残缺的集群

(1)启动

  • 启动 zookeeper
zk-ssh-all_zookeeper.shzkServer.sh start 
  • 在 hadoop101 上启动所有
start-all.sh 

(2)进行

  • 在 hadoop101 上,进行所有

stop-all.sh

  • 进行 zookeeper

zk-ssh-all.sh zkServer.sh stop

遇到的问题

无奈启动 datanode

查看 hadoop103 日志,倡议我批改 tmp 文件夹权限,理由是

2020-11-19 12:07:30,375 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
java.io.IOException: The path component: '/opt/module/hadoop-3.1.3/tmp' in 'opt/module/hadoop-3.1.3/tmp/dn_socket9866' has permissions 0777 uid 1000 and gid 1000. It is not protected because it is world-writable. This might help: 'chmod o-w /opt/module/hadoop-3.1.3/tmp'. For more information: https://wiki.apache.org/hadoop/SocketPathSecurity
    at org.apache.hadoop.net.unix.DomainSocket.validateSocketPathSecurity0(Native Method)

简略来说,就是给的权限太大了,不平安,所以就让我批改权限

ssh-all.sh chmod g-w /opt/module/hadoop-3.1.3/tmp

批改完之后,

No such file or directory when trying to bind to 'opt/module/hadoop-3.1.3/tmp/dn_socket9866'

又通知我,没有 dn_socket9866 文件夹,可是这些文件夹应该能主动创立吧,没事,我本人建一个(在 datanode 机器上创立)

mkdir  /opt/module/hadoop-3.1.3/tmp/dn_socket9866

后果还是雷同的报错,等等!!!我发现了问题,opt 后面没有斜杠,我去!!!搞半天是我的配置文件出错了,这也太蠢了

关上 hdfs-site.xml 文件,批改一波,批改完再散发一波,而后把方才创立的文件夹删除

ssh-all.sh rm -rf /opt/module/hadoop-3.1.3/tmp/dn_socket9866

再次启动 datanode,5555,胜利了

总结:看日志真的很有用

如果 hdfs 崩了怎么办

  • 删除以下文件夹
ssh-all.sh rm -rf /opt/module/hadoop-3.1.3/tmp/*
ssh-all.sh rm -rf /opt/module/hadoop-3.1.3/logs/*
  • 或者配置完 hadoop 的时候,拍个快照

这是最简略的解决方案

退出移动版