日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
大数据组件安装(非CDH)和使用 总文章
代码下载链接:
https://pan.baidu.com/s/1VhxRXB63vz_4QZyKVFqoZQ
提取码:2v0l
Hadoop HA--集群搭建 的角色分配
1.集群部署节点角色的规划:
1.部署7节点:
server01 namenode zkfc
server02 namenode zkfc
server03 resourcemanager
server04 resourcemanager
server05 datanode nodemanager zookeeper journal node
server06 datanode nodemanager zookeeper journal node
server07 datanode nodemanager zookeeper journal node
2.部署3节点:
server01 namenode datanode resourcemanager nodemanager zookeeper journal node zkfc
server02 namenode datanode resourcemanager nodemanager zookeeper journal node zkfc
server03 datanode nodemanager zookeeper journal node
hdfs集群:
server01:namenode(主节点) datanode(从节点)
server02:namenode(主节点的备节点)datanode(从节点)
server03:datanode(从节点)
yarn集群:
server01:resourcemanager(主节点) nodemanager(从节点)
server02:resourcemanager(主节点的备节点) nodemanager(从节点)
server03:nodemanager(从节点)
NameNode之间共享数据(NFS 、Quorum Journal Node(用得多)):
两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。
当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。
standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。
standby可以确保在集群出错时,命名空间状态已经完全同步了。
3.每台Linux都需要执行时间同步命令进行时间同步:ntpdate ntp6.aliyun.com
4.配置环境变量
1.vim /etc/profile 在profile文件最后添加:
export JAVA_HOME=/root/java/jdk1.8.0_45
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ZOOKEEPER_HOME=/root/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
export KE_HOME=/root/kafka-eagle
export PATH=${KE_HOME}/bin:$PATH
export HADOOP_HOME=/root/hadoopHA
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HIVE_HOME=/root/hive
export PATH=$PATH:$HIVE_HOME/bin
2.刷新配置:source /etc/profile
zookeeper
1.安装zookeeper之前的准备工作:
1.卸载openjdk:
1.rpm -qa | grep java:查询出 java相关的 openjdk
2.rpm -e --nodeps 要卸载的软件名:卸载java相关的 openjdk
2.安装sum公司提供的linux版本的JDK
注意:如果需要给多台linux都安装JDK时,可以scp命令把jdk推送到多台linux下
命令:scp -r /root/java/jdk1.8.0_45 root@linux的IP:/root/java/ 然后输入别的linux下用户的密码
把当前jdk目录“/root/java/jdk1.8.0_45”推送到别的linux下,在推送之前首先需要在别的linux下执行“mkdir -p /root/java”
1.tar -zxvf jdk.xx.tar.gz
2.vi /etc/profile
在profile文件末尾添加以下配置:每个环境变量的末尾不能带有“/”
export JAVA_HOME=jdk的根目录的绝对路径
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
比如:
export JAVA_HOME=/root/java/jdk1.8.0_45
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3.重新加载环境变量配置文件:source /etc/profile
4.查看最新JDK版本:java -version
5.关闭防火墙
1.service iptables stop
2.永久关闭防火墙(推荐):chkconfig iptables off
3.查看关闭情况:chkconfig iptables --list
6.关闭selinux,修改后需重启
vi /etc/sysconfig/selinux
把“SELINUX=enforcing”这一行注释掉, 然后下一行添加:SELINUX=disabled
7.修改hosts文件:
linux:vi /etc/hosts
window:C:\Windows\System32\drivers\etc
linux每台机器都应该在hosts文件中配置相同的域名映射文件,windows也应该把对应的linux 的ip和域名给配置上。
hosts文件中添加如下配置:
192.168.25.100 node1
192.168.25.101 node2
192.168.25.102 node3
8.CentOS7下用ntpdate同步时间问题:
当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间。
安装 ntp:yum install -y ntp
时间同步命令:ntpdate ntp6.aliyun.com
作用:当使用了多台服务器进行zookeeper集群时,必须保证每台服务器的时间都是相同的准确的,才能进行正确的zookeeper集群。
因为zookeeper的特性中顺序性、实时性需要保证zookeeper集群中的每台服务器的时间都是相同的准确的。
2.安装zookeeper
1.tar -zxvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
mkdir -p /root/zookeeperdata
2.修改Zookeeper配置文件
1.cd /root/zookeeper/conf
2.cp zoo_sample.cfg zoo.cfg
3.vi zoo.cfg
1.zoo.cfg修改如下信息:dataDir=/root/zookeeperdata
2.zoo.cfg文件末尾添加如下信息:
server.1=IP地址/域名:2888:3888
server.2=IP地址/域名:2888:3888
server.3=IP地址/域名:2888:3888
如:
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
3.在/root/zookeeperdata目录下创建myid文件。
比如:在第一个zookeeper的Linux下,/root/zookeeperdata目录下的myid文件内容为1。
在第一个zookeeper的Linux下,/root/zookeeperdata目录下的myid文件内容为2。
命令:echo 内容 > myid
4.把第一台Linux下配置好的zookeeper推送到别的Linux下。
1.首先每台Linux都先执行“mkdir -p /root/zookeeperdata”
2.然后再执行 scp -r /root/zookeeperdata root@linux的IP:/root/ 然后修改myid文件内容
3.然后再执行 scp -r /root/zookeeper root@linux的IP:/root/
4.每台Linux都需要配置环境变量:
1.vi /etc/profile
2.在profile文件末尾添加以下配置:每个环境变量的末尾不能带有“/”
export ZOOKEEPER_HOME=zookeeper安装目录安装目录的绝对路径
export PATH=$PATH:$ZOOKEEPER_HOME/bin
如:
export ZOOKEEPER_HOME=/root/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
5.重新加载环境变量配置文件:source /etc/profile
5.每台Linux下启动zookeeper进行集群:
1.每台机器下启动zookeeper:
cd /root/zookeeper/bin/
zkServer.sh start
2.或者编写一个脚本来批量启动所有机器:
启动脚本记得要改成自己的主机名和自己的文件位置!!
1.一键启动:vim zkStart.sh(逐一启动每台linux下的zookeeper,包括node1、node2、node3远程的linux下的zookeeper)
#!/bin/bash
for host in node1 node2 node3
do
{
echo $host start
ssh $host "source /etc/profile;/root/zookeeper/bin/zkServer.sh start"
echo "$host zk is running"
}
done
2.一键关闭:vim zkStop.sh(逐一关闭每台linux下的zookeeper,包括node1、node2、node3远程的linux下的zookeeper)
#! /bin/bash
for host in node1 node2 node3
do
{
echo "$host zk is stopping"
ssh $host "/root/zookeeper/bin/zkServer.sh stop"
}
wait
done
3.修改sh脚本的执行权限:
chmod 777 zkStart.sh
chmod 777 zkStop.sh
4.执行一键启动脚本:./zkStart.sh:
因为会逐一启动每台linux下的zookeeper,包括node1、node2、node3远程的linux下的zookeeper,所以需要输入远程linux下用户的密码
5.jps命令查看zookeeper进程:
1.命令:jps
2.jps命令的打印结果:下面信息表示为启动zookeeper集群成功
99881 Jps
99503 QuorumPeerMain
3.jps命令作用解析:
1.jps:
是用于查看有权访问的hotspot虚拟机的进程,当未指定hostid时,默认查看本机jvm进程,
否则查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。
jps可以列出jvm进程lvmid,主类类名,main函数参数, jvm参数,jar名称等信息。
2.QuorumPeerMain:
Zookeeper集群启动的入口类是QuorumPeerMain来加载配置启动QuorumPeer线程。
6.查看集群状态、主从信息:
1.cd /root/zookeeper/bin/
2../zkServer.sh status # 查看状态:一个leader,两个follower
3.“follower跟随者”的打印结果:
JMX enabled by default
Using config: /root/zookeeper/bin/../conf/zoo.cfg
Mode: follower
4.“leader领导者”的打印结果:
JMX enabled by default
Using config: /root/zookeeper/bin/../conf/zoo.cfg
Mode: leader
7.进入zookeeper客户端,查看zookeeper集群信息
1.cd /root/zookeeper/bin/
2../zkCli.sh # ls / 或 ls /zookeeper 或 ls /zookeeper/quota
8.如果启动不成功,可以观察 zookeeper.out日志,查看错误信息进行排查
tail -100f zookeeper.out
3./root/zookeeper/conf/zoo.cfg 配置文件中参数说明:
1.tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。
2.initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,
而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。
总的时间长度就是 10*2000=20秒。
3.syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
4.dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;
5.clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;
6.server.A=B:C:D
A是一个数字,表示这个是第几号服务器,
B是这个服务器的IP地址,
C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,
D是在leader挂掉时专门用来进行选举leader所用的端口。
4.kafka-eagle监控zookeeper状态的监控工具:
1.tar -zxvf kafka-eagle-1.0.8-bin.tar.gz
mv kafka-eagle-1.0.8 kafka-eagle
2.每台Linux都需要配置环境变量:
1.vi /etc/profile
2.在profile文件末尾添加以下配置:每个环境变量的末尾不能带有“/”
export KE_HOME=kafka-eagle的安装目录的绝对路径
export PATH=${KE_HOME}/bin:$PATH
如:
export KE_HOME=/root/kafka-eagle
export PATH=${KE_HOME}/bin:$PATH
3.重新加载环境变量配置文件:source /etc/profile
3.修改配置文件system-config.properties:
1.cd /root/kafka-eagle/conf/
2.vi system-config.properties
system-config.properties配置文件修改如下内容:
kafka.zk.list=node1:2181,node2:2181,node3:2181
4.修改ke.sh权限:
cd /root/kafka-eagle/bin/
chmod 777 ke.sh
5.把配置好的到别的多台linux下
命令:scp -r /root/kafka-eagle/ root@linux的IP:/root/ 然后输入别的linux下用户的密码
6.启动kafka-eagle:
cd /root/kafka-eagle/bin/
./ke.sh start
7.谷歌浏览器访问:192.168.25.100:8048/ke
Hadoop HA--集群搭建
1.安装hadoop 之前的准备工作
1.yum install -y vim 建议安装 vim 编辑器
2.配置好各虚拟机的网络(采用NAT联网模式)
1.第一种:通过Linux图形界面进行修改(桌面版本Centos)
进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 ->
method选择为manual -> 点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply
2.第二种:修改配置文件方式
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static" ### IP地址为静态
HWADDR="00:0C:29:3C:BF:E7"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
IPADDR="192.168.1.101" ### 具体的静态固定IP
NETMASK="255.255.255.0" ### 子网掩码
GATEWAY="192.168.1.1" ### 网关IP
3.修改各个虚拟机主机名
1.vi /etc/sysconfig/network
2.network文件中配置:
NETWORKING=yes
HOSTNAME=主机名
4.修改hosts中的主机名和IP的映射关系
1.vi /etc/hosts
2.hosts文件中配置:
192.168.1.100 NODE1
192.168.1.101 NODE2
192.168.1.102 NODE3
5.每台机器之间都需要配置ssh免密登陆:即每台机器之间都不需要密码而是使用私钥进行登录
1.生成ssh免登陆密钥:ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
2.将公钥拷贝到要免密登陆的目标机器上(每一台机器,包括自己):ssh-copy-id IP地址/主机名
3.第一台Linux 自己配置连接自己 免密登录:ssh-copy-id 192.168.25.100 或 ssh-copy-id node1
4.第二台Linux 自己配置连接自己 免密登录:ssh-copy-id 192.168.25.101 或 ssh-copy-id node2
6.同步每个机器的时间(集群需要)
1.常用的手动进行时间的同步(一般不使用):date -s "2017-03-03 03:03:03"
2.网络同步:
yum install ntpdate
ntpdate cn.pool.ntp.org
ntpdate ntp6.aliyun.com
3.查看linux当前时间的命令:date
7.关闭防火墙 和 selinux
1.查看防火墙状态:service iptables status
2.关闭防火墙:service iptables stop
3.查看防火墙开机启动状态:chkconfig iptables --list
4.永久关闭防火墙:chkconfig iptables off
5.关闭 selinux
1.vi /etc/sysconfig/selinux
2.把下面#后面的那一行注释掉, 改成下面那一行
#SELINUX=enforcing
SELINUX=disabled
6.查看slinux状态:sestatus。为disabled 则表示关闭成功
8.安装JDK
1.上传jdk:rz jdk-8u65-linux-x64.tar.gz
2.解压jdk:tar -zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps
3.将java添加到环境变量中(用vim有特殊单词颜色标记可以减少出错率):vim /etc/profile
在profile文件最后添加:
export JAVA_HOME=/root/java/jdk1.8.0_45
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ZOOKEEPER_HOME=/root/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
export KE_HOME=/root/kafka-eagle
export PATH=${KE_HOME}/bin:$PATH
export HADOOP_HOME=/root/hadoopHA
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HIVE_HOME=/root/hive
export PATH=$PATH:$HIVE_HOME/bin
4.刷新配置:source /etc/profile
5.每台Linux的环境变量都需要一致:
scp -r /etc/profile root@node2:/etc 刷新配置:source /etc/profile
scp -r /etc/profile root@node3:/etc 刷新配置:source /etc/profile
2.安装hadoop
1.tar zxvf hadoop-2.7.4-with-centos-6.7.tar.gz -C /root/
解压到指定的目录/root/hadoop, 安装目录可以自定义
Linux:hadoop-2.7.4-with-centos-6.7.tar.gz
Window:hadoop-2.7.4-with-windows.tar.gz
2.配置Hadoop相关的 环境变量
1.编辑环境变量的profile配置文件: vi /etc/profile
2.profile配置文件末尾添加如下配置信息:
export JAVA_HOME=/root/apps/jdk1.8.0_65(jdk目录的绝对路径)
export HADOOP_HOME=/root/hadoopHA(hadoop目录的绝对路径)
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.保存配置文件,重新加载配置文件:source /etc/profile
注意:
1.配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
2.修改hosts中的主机名和IP的映射关系
1.vi /etc/hosts
2.hosts文件中配置:
192.168.1.100 NODE1
192.168.1.101 NODE2
192.168.1.102 NODE3
3.配置 hadoop-env.sh
1.cd /root/hadoopHA/etc/hadoop
2.vim hadoop-env.sh
3.hadoop-env.sh 修改如下,保证能够引用到javahome:export JAVA_HOME=/root/java/jdk1.8.0_45
4.配置 core-site.xml
1.cd /root/hadoopHA/etc/hadoop
2.core-site.xml 修改如下:
<configuration>
<!-- 集群名称在这里指定:<value>hdfs://集群名</value>。该值来自于hdfs-site.xml中的配置 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。
会在格式化namenode的时候创建 hadoop临时目录:根据core-site.xml中的 hadoop.tmp.dir 所配置 /root/hadoopTmpData 生成目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoopTmpData</value>
</property>
<!-- ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
<property>
<name>ha.zookeeper.quorum</name>
<value>NODE1:2181,NODE2:2181,NODE3:2181</value>
</property>
</configuration>
5.配置 hdfs-site.xml
1.cd /root/hadoopHA/etc/hadoop
2.hdfs-site.xml 修改如下:
<configuration>
<!--指定hdfs的nameservice集群名称为cluster1,需要和core-site.xml中的<value>hdfs://集群名</value>保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<!-- cluster1下面有两个NameNode,分别是nn1(hdfs集群中server01中的namenode主节点) 和 nn2(hdfs集群中server02中的namenode主节点的备节点) -->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nn1</name>
<value>NODE1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn1</name>
<value>NODE1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nn2</name>
<value>NODE2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn2</name>
<value>NODE2:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://NODE1:8485;NODE2:8485;NODE3:8485/cluster1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置,并且该目录需要先创建出来:mkdir -p /root/journalData -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/root/journalData</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆。
用于某个主机kill掉另外一个主机中的namenode,防止原来那个主机从zookeeper断开连接后,又重新立即连接到zookeeper。
因此两个namenode都需要互相配置免密登录,配置的目录为秘钥所在的目录 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
6.配置 mapred-site.xml
1.cd /root/hadoopHA/etc/hadoop
2.mv mapred-site.xml.template mapred-site.xml
3.hdfs-site.xml 修改如下:
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7.配置 yarn-site.xml
1.cd /root/hadoopHA/etc/hadoop
2.yarn-site.xml 修改如下:
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字:分别是 rm1(yarn集群中server01中的resourcemanager主节点) 和 rm2(yarn集群中server02resourcemanager主节点的备节点) -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 指定rm1的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>NODE1</value>
</property>
<!-- 指定rm2的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>NODE2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>NODE1:2181,NODE2:2181,NODE3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
8.修改 $HADOOP_HOME/etc/hadoop目录下的 slaves文件:slaves 文件里面记录的是集群主机名
1.cd /root/hadoopHA/etc/hadoop
2.vim slaves
删除 slaves文件中的信息localhost,添加集群中的所有主机名如下:
node1
node2
node3
9.把 /root目录下的 hadoop文件夹($HADOOP_HOME目录) 推送给第二台、第三台linux:
scp -r /root/hadoopHA root@node2:/root
scp -r /root/hadoopHA root@node3:/root
把 /etc目录下的 profile文件(环境变量) 推送给第二台、第三台linux的/etc目录下:
scp -r /etc/profile root@node2:/etc 重新加载配置文件:source /etc/profile
scp -r /etc/profile root@node3:/etc 重新加载配置文件:source /etc/profile
Hadoop HA--集群搭建--集群启动
1.每台Linux下启动zookeeper进行集群:
1.每台机器下启动zookeeper:
cd /root/zookeeper/bin/
zkServer.sh start
2.查看zookeeper集群状态、主从信息:
1.cd /root/zookeeper/bin/
2../zkServer.sh status # 查看状态:一个leader,两个follower
3.“follower跟随者”的打印结果:
JMX enabled by default
Using config: /root/zookeeper/bin/../conf/zoo.cfg
Mode: follower
4.“leader领导者”的打印结果:
JMX enabled by default
Using config: /root/zookeeper/bin/../conf/zoo.cfg
Mode: leader
3.分别在node1、node2、node3上 手动启动journalnode
1.cd /root/hadoopHA/sbin
2.hadoop-daemon.sh start journalnode
3.运行jps命令检验,分别在node1、node2、node3上多了JournalNode进程
4.格式化node1、node2 上的 namenode
1.本质是对namenode进行初始化,两个命令都可,一定要在namenode机器上格式化,格式化的时候就会创建 hadoop临时目录。
即格式化后会在根据core-site.xml中的 hadoop.tmp.dir 所配置 /root/hadoopTmpData 生成目录。
同 core-site.xml 的 hadoop.tmp.dir,如果需要再次格式化,需要把每台服务器的 hadoop.tmp.dir 指定的数据文件夹删除。
2.配置了Hadoop的环境变量的配置后,任意目录下执行下面命令即可
格式一:hdfs namenode -format 输入 y
格式二:hadoop namenode -format 输入 y
3.hadoop临时目录(/root/hadoopTmpData)下自动生成以下目录和文件:
1.自动生成该目录:/root/hadoopTmpData/dfs/name/current
2.该目录下自动生成以下文件:fsimage_0000000000000000000、fsimage_0000000000000000000.md5、seen_txid VERSION
4.注意:要保证node1 和 node2上 hadoop临时目录中的元数据相同,因此把node1中格式化后的生成的hadoop临时目录(/root/hadoopTmpData)推送到node2中
scp -r /root/hadoopTmpData root@node2:/root
scp -r /root/hadoopTmpData root@node3:/root
5.格式化ZKFC (只需要在node1上执行即可)
执行 hdfs zkfc -formatZK 最终会显示成功创建集群....
显示成功信息:Successfully created /hadoop-ha/cluster1 in ZK.
6.hdfs 集群启动(脚本一键启动(推荐) )
如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
1.只需要在node1上 启动 hdfs 集群:(即可启动node1 和 node2 中的 namenode、datanode)
cd /root/hadoopHA/sbin
./start-dfs.sh
2.停止 hdfs 集群:
cd /root/hadoopHA/sbin
./stop-dfs.sh
7.yarn集群启动(脚本一键启动(推荐) )
1.在node1上 启动 yarn集群:(只启动了yarn集群中server01中的resourcemanager主节点)
cd /root/hadoopHA/sbin
./start-yarn.sh
2.还需要在 node2上 启动 yarn 集群:(只启动了yarn集群中server02中的resourcemanager主节点的备节点)
cd /root/hadoopHA/sbin
./yarn-daemon.sh start resourcemanager
3.停止 yarn 集群:
cd /root/hadoopHA/sbin
./stop-yarn.sh
测试 hadoopHA集群
3.node1:8088 访问active状态的节点
4.node2:8088 无法访问standby状态的节点,只有在节点变成active状态才能访问
5.测试上传文件
hadoop fs -put /root/install.log /
hadoop fs -ls /
6.运行mapreduce 测试计算π值
cd /root/hadoopHA/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.7.4.jar pi 4 8
7.测试集群工作状态的一些指令 :
查看hdfs的各节点状态信息:hdfs dfsadmin -report
获取一个namenode节点的HA状态:hdfs haadmin -getServiceState nn1
示例:
[root@NODE1 mapreduce]# hdfs haadmin -getServiceState nn1
active
[root@NODE1 mapreduce]# hdfs haadmin -getServiceState nn2
standby
java程序 操作的hadoopHA集群
必须在项目的\src\main\resources 目录下存放配置core-site.xml、hdfs-site.xml:
只需要把 hadoop根目录下/etc/hadoop目录中的core-site.xml、hdfs-site.xml 拷贝到 项目的\src\main\resources 目录下即可