IP规划
HOST | NN | NN | JN | DN | ZKFC | ZK |
node01 | * | * | * | |||
node02 | * | * | * | * | * | |
node03 | * | * | * | |||
node04 | * | * |
hadoop:2.6.5
JDK8安装
上传并解压
tar -zxvf xxx.tar.gz
配置环境变量
export JAVA_HOME=/usr/local/jdk8
export CLASSPATH=.:/usr/local/jdk8/lib
export PATH=$PATH:/usr/local/jdk8/bin
设置主机名
静态的(Static hostname)
“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。
瞬态的(Tansient hostname)
“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。
灵活的(Pretty hostname)
“灵活”主机名也有人叫做“别名”主机名。
“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如xh01@f5)。
“静态”主机名和“瞬态”主机名都遵从作为互联网域名同样的字符限制规则。
免密
生成公司钥
ssh-keygen -t rsa
cat id_rsa.pub >> authorized_keys
另外一种算法
ssh-keygen -t dsa -P '' -f ./id_dsa
cat id_dsa.pub >> authorized_keys
scp ./id_dsa.pub node01:`pwd`/node02.pub
-P指定密码为空,使用dsa算法
配置authorized_keys文件
把所有的节点上的id_rsa.pub都汇聚到authorized_keys文件中,分别上传到4台机器的/root/.ssh目录下
测试
Zookeeper的集群搭建
Zk java语言开发
基于内存存储数据,也需要在磁盘上做持久化
/tmp目录很危险,存在操作系统自动删除数据的风险的
Linux的数据一般放在/var目录下,软件放/opt目录下
解压
tar -zxvf zookeeper-3.4.6.tar.gz
修改配置文件
创建存放数据的目录: mkdir -p /var/bigdata/hadoop/zk
参数说明:
dataDir---指定zk数据文件的存放路径
Server.1中的1是权重的意思,配置server.1、server.2、server.3为了保证任意2台zookeeper启动,都过50%(含)即选举成功
2888,3888分别代码zk使用时的端口和选举的端口,2181集群连接通信的端口
配置权重文件myid
Myid文件存放/var/bigdata/hadoop/zk即zoo.cfg的dataDir配置项指定的目录下
其内容为其权重值,即zoo.cfg中server.后的值
配置环境变量
Vim /etc/profile
export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/sbin
上传zk到node3,node4节点
在node3,node4执行创建目录命令:
mkdir -p /opt/bigdata、mkdir -p /var/bigdata/hadoop/zk
把node2的zookeeper安装包上传到node3,node4
scp -r ./zookeeper-3.4.6 node3:`pwd`
scp -r ./zookeeper-3.4.6 node4:`pwd`
`pwd`意思是就是当前目录,这样就复制到远程集群相应的目录了
配置node3,node4的权重--myid文件(与node2一样)
配置zookeeper环境变量(与node2一样)
启动zk
启动第1台node2:
报错的原因是配置文件配置了3台,目前只启动了1台(如果再启动一台还报错,可能是配置文件配置错误或防火墙没有关闭)
第1台是folower
启动第2台node3:
第2台是leader
第3台是follower
Zookeeper启动命令
zkServer.sh start 启动
zkServer.sh stop 关闭
zkServer.sh status 查看状态
Hadoop的安装
Hadoop2.X的nn节点最多2个,3.X最多5个
修改配置文件
Core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node2:2181,node3:2181,node4:2181</value>
</property>
</configuration>
说明:
fs.defaultFS配置项表示默认的文件系统,可以为具体某个物理节点或指定一个集群名, hdfs://mycluster中的hdfs:是前缀,固定的。
Mycluster: 自定义的
ha.zookeeper.quorum:配置项,指定zookeeper的地址
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value> 表示副本的数量
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/data</value>
</property>
#以下是 一对多,逻辑到物理节点的映射
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node2:50070</value>
</property>
#以下是JN在哪里启动,数据存那个磁盘
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/jn</value>
</property>
#HA角色切换的代理类和实现方法,我们用的ssh免密
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
#开启自动化: 启动zkfc
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
别忘了配置hadoop-env.sh中的JAVA_HOME
指定从节点
3.X不叫slaves改为workers
上传其他节点
scp -r ./hadoop-2.6.5 node2:`pwd`
scp -r ./hadoop-2.6.5 node3:`pwd`
scp -r ./hadoop-2.6.5 node4:`pwd`
配置hadoop的环境变量
在profile添加如下内容:
export HADOOP_HOME=/opt/bigdata/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
初始化
JN
先启动JN hadoop-daemon.sh start journalnode
在node1节点上执行
hadoop-daemon.sh start journalnode
在node2节点上执行
hadoop-daemon.sh start journalnode
在node2节点上执行
hadoop-daemon.sh start journalnode
查看 hadoop-root-journalnode-node3.log
Nn
1格式化
选择一个NN 做格式化:hdfs namenode -format <只有第一次搭建做,以后不用做>
2台nn随便挑一台格式化,在node1进行格式化: hdfs namenode -format
本机JN目录多出:
再看看node3 的日志
再看看node的jn目录(也会增加这些东西)
在节点node1(nn节点)上启动nn
启动这个格式化的NN ,以备另外一台同步 hadoop-daemon.sh start namenode
hadoop-daemon.sh start namenode
在节点node2上:
即在另外一台nn机器: hdfs namenode -bootstrapStandby
执行 hdfs namenode -bootstrapStandby 启动namenode的从节点
格式化zk
hdfs zkfc -formatZK <只有第一次搭建做,以后不用做>
在node4上操作
在node1节点对zk进行格式化
hdfs zkfc -formatZK
Node4的zk客户端查看,发现确实创建了hadoop-ha这个节点
格式化,就是创建zk目录
start-dfs.sh
格式化以后,在node1节点上执行start-dfs.sh
在node3节点发现edits,
Zk的节点变化
浏览器:http://192.168.10.60:50070/
谁抢到锁,谁active
报错
是因为hadoop-env.sh的JAVA_HOME没有配置(因为ssh远程登录其他节点无法读取profile的变量)
Hadoop重启
stop-dfs.sh
start-dfs.sh
你会发现namenode会自动切换到node2上
没有datanode
如果jsp没有datanode节点,就把dfs目录下内容都删了,所有机器的