解压,配置环境变量,启动
根目录下bin/zkServer.sh start
这里是三台虚拟机,hadoop001,hadoop002,hadoop003
命令行客户端:
[[email protected] bin]# ./zkCli.sh (之后回车)
相关命令:
[zk: localhost:2181(CONNECTED) 2] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] (查看) delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path (删除) get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port [zk: localhost:2181(CONNECTED) 3]
对于三台机器来说,可以先装好一台,然后使用scp -r命令把文件夹和文件传到两外两台上,如果是很多台的话,可以配置shell脚本
hadoop001: 192.168.137.200
zk
NN(active) (对于两台NN来说,会有一个是active,另一个是standby)
DN
DFSZKFailoverController(ZKFC) 进程
JN 进程 (journalnode)
hadoop002: 192.168.137.201
zk
NN(standby)
DN
DFSZKFailoverController(ZKFC) 进程
JN 进程
hadoop003: 192.168.137.202
zk
DN
JN 进程
热备(实时备份): 元数据信息想要热备,必然要有一个公共的存储的地方(JN)
注:DN向NN做的两个工作,一、向两个NN发送心跳(虽然有一个是热备,但是有成为active的可能),二、向NN发送块报告(有多少个块,块有什么问题)
zkfc报告时用的都是RPC请求(好像整个流程都是RPC)
两个NN的元数据放在JN里面(共享存储)
Hadoop2.x里standby1个,而在3.x里standby可以有多个
命名服务 (CDH):nameservice1 (hadoop001+hadoop002)(这个不关心谁是active,只是去访问命名空间,命名空间是hadoop001+hadoop002,里面有一个是active)
nameservice1在配置文件core-site.xml里面改成了mycluster <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> hdfs dfs -ls hdfs://nameservice1/ 假设NN1 active: hdfs dfs -ls hdfs://192.168.137.131:8020/ active 可以的访问, 有读写权限(这个是NN1) hdfs dfs -ls hdfs://192.168.137.132:8020/ standby 可以, read only(这里的读写指的是对DN的操作)
所起的进程(这里的zkfc是线程)
hadoop001: 192.168.137.200
zk
RM(ZKFC 线程)(是RM里的一个子线程,ps -ef看不到)
NM
hadoop002: 192.168.137.201
zk
RM(ZKFC 线程)
NM
hadoop003:
zk
NM
相关知识:
1.DN(数据存储)和NM(计算)部署在同一台: 数据本地化 减少网络消耗,让计算更加的快
2.ZKFC是线程
3.RMStateStore: 在ZK
4.元数据存储在/rmstore 在zk上
https://blog.csdn.net/weixin_37677769/article/details/82903881
注:问题: A机器是中心调度机器,B机器shell脚本(某个服务的),A调B的shell,无密码调用的的话,需要谁给谁密钥?
答案: A给B
根据RSA加密的流程,A的公钥给了B才行
配置文件:
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
slaves
根据配置信息执行下面的语句;
mkdir /opt/software/hadoop/tmp && chmod -R 777 /opt/software/hadoop/tmp && mkdir -p /opt/software/hadoop/data/dfs/
把每个zookeeper启动:zkServer.sh start (每台机器) 先全部启动JN, hadoop-daemon.sh start journalnode 然后格式化第一台的namenode:hadoop namenode -format 把data/dfs/name发送到另外两台 然后再hadoop的bin目录下执行:hdfs zkfc -formatZK 查看是否带有successful 然后启动hdfs:start-dfs.sh 启动yarn:start-yarn.sh 但是hadoop002的resourcemanager需要单独启动(hadoop001启动不了hadoop002的) :yarn-daemon.sh start resourcemanager
先关yarn(单独关hadoop002的),再关hdfs,最后把每个zk关掉
zkServer.sh start(每台机器,而且都配置了环境变量,不然需要在zookeeper根目录下执行:bin/zkServer.sh start) start-dfs.sh start-yarn.sh yarn-daemon.sh start resourcemanager(hadoop002上执行) $HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
hdfs dfsadmin -report HDFS:http://192.168.137.200:50070/ HDFS:http://192.168.137.201:50070/ ResourceManger(Active):http://192.168.137.200:8088 ResourceManger(Standby):http://192.168.137.201:8088/cluster/cluster JobHistory:http://192.168.137.200:19888/jobhistory