大数据(六) --高可用完全分布式搭建

版权声明:本文版权归宋坤所有,转载请注明出处 https://blog.csdn.net/skisqibao/article/details/83038752

说明

    搭建之前, 先根据HDFS三种模式一文将集群的初始环境配置OK.

高可用完全分布式搭建

集群规划

NN(active) NN(standby) DN ZK ZKFC JNN
node01
node02
node03
node04
  1. 在node01节点上将上传的Hadoop压缩包解压

这里我将文件解压到/opt/software/hadoop文件夹下.
tar -zxf hadoop-2.6.5.tar.gz -C /opt/software/hadoop

进入配置文件修改目录
cd /opt/software/hadoop/hadoop-2.6.5/etc/hadoop/

  1. 修改hdfs-site.xml配置

vim hdfs-site.xml
  编辑文件, 在configuration标签对中插入:

<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>node01:8020</value>
</property>
<property>
  		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
  		<value>node02:8020</value>
</property>
<!--  配置集群两个namenode节点的本地位置  -->
<property>
  		<name>dfs.namenode.http-address.mycluster.nn1</name>
  		<value>node01:50070</value>
</property>
<property>
  		<name>dfs.namenode.http-address.mycluster.nn2</name>
  		<value>node02:50070</value>
</property>
<!--  配置集群两个namenode节点的网络位置  -->
<property>
  		<name>dfs.namenode.shared.edits.dir</name>
  		<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<!--  配置集群三个journalnode节点的位置  -->
<property>
  		<name>dfs.journalnode.edits.dir</name>
  		<value>/var/sxt/hadoop/ha/jn</value>
</property>
<!--  配置JNN生成文件存放地址  -->
<property>
  		<name>dfs.client.failover.proxy.provider.mycluster</name>  	  		
  		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--  配置ZKFC代理  -->
<property>
  		<name>dfs.ha.fencing.methods</name>
  		<value>sshfence</value>
</property>
<!--  配置zookeeper进程对非本节点操作时的连接方式  -->
<property>
  		<name>dfs.ha.fencing.ssh.private-key-files</name>
  		<value>/root/.ssh/id_rsa</value>
</property>
<!--  配置上述ssh连接密钥所在位置  -->
<property>
   		<name>dfs.ha.automatic-failover.enabled</name>
   		<value>true</value>
 </property>
<!--  配置开启失败容错监控  -->
  1. 修改core-site.xml配置

vim core-site.xml
  编辑文件, 在configuration标签对中插入

<property>
   		<name>fs.defaultFS</name>
   		<value>hdfs://mycluster</value>
</property>
<property>
   		<name>ha.zookeeper.quorum</name>
   		<value>node02:2181,node03:2181,node04:2181</value>
</property>

  其中fs.defaultFS配置的是hdfs文件目录的前缀, 此处的mycluster为hdfs-site.xml中配置的集群服务名.

  ha.zookeeper.quorum配置的是集群协调服务进程zookeeper.

  1. 修改slaves配置文件
vim slaves

编辑slaves, 在文件中写入:

node02
node03
node04

  slaves中配置的是从节点(DataNode)主机名(hostname), 高可用完全分布式, 我们设计的也是三个DN节点.

  在编辑文件时, 要注意纵向写的格式, 主机名后也不可以带空格, 否则可能会导致主机解析失败.

  1. 安装包分发

  根据上述步骤配置好之后, 需要将配置好的文件发到其他三个节点上.

cd /opt/software/hadoop		将hadoop下的hadoop-2.6.5包发送

scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node03:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node04:/opt/software/hadoop/

或使用一种更简单的指令
scp -r hadoop-2.6.5 node02:`pwd`
scp -r hadoop-2.6.5 node03:`pwd`
scp -r hadoop-2.6.5 node04:`pwd`

  发送时, 如果其他节点上没有/opt/software/hadoop/目录, 那么需要自己建立之后再发送. 发送完毕之后要保证所有节点的hadoop目录所在路径都是一致的.

  1. 修改hadoop-evn.sh文件

  此步可先跳过, 该文件可以不修改. 当启动hdfs出现" JAVA_HOME cannot find or set" 类似的说明java_home没有配置的提示时, 可再手动配置(前提是执行java -version成功在显示器打印java版本).

vim hadoop-evn.sh

编辑文件, 找到export JAVA_HOME=${JAVA_HOME}那一行

将 = 后的内容改为JAVA_HOME的确切路径, 可使用 echo $JAVA_HOME查看
export JAVA_HOME=/usr/local/jdk1.8.0_181

  修改完成之后还要使用scp命令将修改的文件发送到各个节点上:

scp hadoop-evn.sh node02:`pwd`
scp hadoop-evn.sh node03:`pwd`
scp hadoop-evn.sh node04:`pwd`
  1. 将hadoop配置到用户环境变量中

  此处配置好后, 可以在任意位置使用hdfs的指令.

vim ~/.bashrc
在文件最后插入
export PATH=$PATH:/opt/software/hadoop/hadoop-2.6.5/bin:/opt/software/hadoop/hadoop-2.6.5/sbin
  1. 搭建zookeeper集群

  zookeeper节点规划在node02, node03 ,node04 节点上

首先, 在 node02 上解压zookeeper的压缩包
tar -zxf zookeeper-3.4.10.tar.gz -C /opt/software/zookeeper

进入解压文件, 修改conf目录下的zoo_sample.cfg
mv zoo_sample.cfg zoo.cfg		重命名

  修改zoo.cfg文件

vim zoo.cfg		

修改dataDir的值
dataDir=/var/qb/zookeeper		设置zookeeper目录, 路径任意, 需自己创建

在文件最后加入zookeeper节点的服务位置
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888

  发送安装包, 将zookeeper安装包发送到node03, node04节点上

cd /opt/software/zookeeper

scp -r zookeeper-3.4.10 node03:`pwd`
scp -r zookeeper-3.4.10 node04:`pwd`

  在各个zookeeper节点的dataDir设置的目录下创建myid文件, 修改文件内容

vim /var/qb/zookeeper/myid	在各个节点的myid中写入相应ID号
1			对应node02节点
2			对应node03节点
3			对应node04节点

  最后, 启动zookeeper进程

cd /opt/software/zookeeper/zookeeper-3.4.10/bin

./zkServer.sh start
  1. 格式化NameNode

  在node01, node02, node03 上分别执行启动journalnode的命令.

hadoop-daemon.sh start journalnode

  随便选一台NameNode(node01 || node02)作为active节点进行格式化.

hdfs namenode -format	
hadoop-daemon.sh start namenode

  另一台NameNode节点执行

hdfs namenode  -bootstrapStandby

  格式化ZKFC进程

hdfs zkfc -formatZK
  1. 启动HDFS

  关闭所有节点上的进程

stop-dfs.sh

  启动HDFS

start-dfs.sh
  1. 查看启动进程
jps
  1. 操作HDFS文件系统
创建目录 hdfs dfs -mkdir -p /abc/cba
上传文件 hdfs dfs -D dfs.blocksize=1048576 -put  text.txt
...
  1. 关闭HDFS
stop-dfs.sh
或
killall java

注:下次启动时, 要先启动zookeeper进程, 再启动hdfs

猜你喜欢

转载自blog.csdn.net/skisqibao/article/details/83038752