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

编写集群批量操作脚本

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

cd ~/binrz

(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 ~/binssh-all.sh hostname
此时调用ssh脚本须要输出各虚拟机的明码(因为还没有设置免密登录其它机器)

设置免密登录

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

1.生成公钥和私钥:

cd ~ssh-keygen -t rsa
而后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

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

ssh-copy-id hadoop101ssh-copy-id hadoop102ssh-copy-id hadoop103ssh-copy-id hadoop104ssh-copy-id hadoop105

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

xsync ~/.ssh

批改集群的相干配置文件

1.批改Zookeeper配置文件

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

cd /opt/module/zookeeper-3.6.2/mkdir datatouch myid

(2)批改zoo.cfg文件

cd confmv zoo_sample.cfg zoo.cfgvim zoo.cfg

找到dataDir,将其批改为

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

并减少如下配置

#######################cluster##########################server.1=hadoop101:2888:3888server.2=hadoop102:2888:3888server.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 secureMainjava.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的时候,拍个快照

这是最简略的解决方案