hadoop-2.0-cdh4 HA 解决方案安装文档
1.安装NFS,配置共享目录安装配置NFS
NFS是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。CentOS系统中如何安装和配置nfs呢,下面我们就来学习一下方法。首先我们来介绍一些会用到的CentOS系统命令。
1.安装
$yum -y install nfs-utils
2.创建共享目录
$su root (切换到root用户,因为NFS只能被root用户使用)
$mkdir –p /smp/hadoop-cdh4
$chmod –R 777 /smp/hadoop-cdh4 (因为是root用户创建,要给当前用户赋可读写的权限)
3.配置
$vi /etc/exports
在配置文件中添加你要共享的目录等信息,例如:
/smp/hadoop-cdh4 *(rw,sync,no_root_squash)
内容具体参数说明如下:
[共享的目录] [主机名或IP(参数,参数)]
其中参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay。
CentOS系统中,当主机名或IP地址为空时,则代表共享给任意客户机提供服务。
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
下面是一些NFS共享的常用参数:
1.ro 只读访问
2.rw 读写访问
3.sync 所有数据在请求时写入共享
4.async NFS在写入数据前可以相应请求
5.secure NFS通过1024以下的安全TCP/IP端口发送
6.insecure NFS通过1024以上的端口发送
7.wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
8.no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
9.hide 在NFS共享目录中不共享其子目录
10.no_hide 共享NFS目录的子目录
11.subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
12.no_subtree_check 和上面相对,不检查父目录权限
13.all_squash共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
14.no_all_squash 保留共享文件的UID和GID(默认)
15.root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
16.no_root_squash root用户具有根目录的完全管理访问权限
17.anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
4.启动
$/etc/init.d/nfs restart
在你要共享的机器上同样使用root用户创建同步的目录并赋读写权限,并挂在该目录,具体的命令如下:
$mkdir –p /smp/avatarshare
$mount -v -t nfs -o tcp,soft,retry=20,timeo=20,rsize=32768,wsize=32768hadoop04:/smp/hadoop-cdh4 /smp/hadoop-cdh4
到此我们就将NFS配置并启动好了
4.安装zookeeper-3.4.2
下载zookeeper-3.4.2.tar.gz http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.2/zookeeper-3.4.2.tar.gz
将tar包解压到指定目录
tar zxvf zookeeper-3.4.2.tar.gz
修改zookeeper配置
将zookeeper安装目录下conf/zoo_sample.cfg重命名为zoo.cfg
修改其中的内容
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/hadoop/zookeeper
# the port at which the clients will connect
clientPort=2181
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
在配置的dataDir目录下创建一个myid文件,里面写入一个0-255之间的一个随意数字,每个zookeeper上这个文件的数字要是不一样的
修改下面的内容变成你自己的服务器地址
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
分别启动所有的zookeeper
bin/zkServer.sh start
使用客户端连接zookeeper测试是否成功
bin/zkCli.sh -server ip地址:clientPort
2.修改hadoop安装目录下etc/hadoop/core-site.xml
加入以下内容
<!--fs.default.name for MRV1 ,fs.defaultFS for MRV2(yarn) -->
<property>
<name>fs.defaultFS</name>
<!--这个地方的值要和hdfs-site.xml文件中的dfs.federation.nameservices一致-->
<value>hdfs://dinglicom</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
3.修改hdfs-site.xml
<!--配置dfs.nameservices 这个名称可以随意,如果同时还使用HDFS 的Federation机制,则应该使用逗号分隔nameservices列表-->
<property>
<name>dfs.federation.nameservices</name>
<value>dinglicom</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoop-cdh4-nn</value>
</property>
<!--配置:dfs.ha.namenodes.. 下面的dinglicom是nameservice ID,nn1和nn2是每台namenode的serviceId。-->
<property>
<name>dfs.ha.namenodes.dinglicom</name>
<value>nn1,nn2</value>
</property>
<!--配置rpc通信地址:dfs.namenode.rpc-address..-->
<property>
<name>dfs.namenode.rpc-address.dinglicom.nn1</name>
<value>hadoop01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.dinglicom.nn2</name>
<value>hadoop02:8020</value>
</property>
<!--配置http通信地址:dfs.namenode.http-address..-->
<property>
<name>dfs.namenode.http-address.dinglicom.nn1</name>
<value>hadoop01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.dinglicom.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--配置 dfs.namenode.shared.edits.dir 是主备namenode共享目录,这里要求主备都可以读写,采用NFS实现共享-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>/smp/hadoop-cdh4</value>
</property>
<!--配置客户端failover,解决客户端故障转移-->
<property>
<name>dfs.client.failover.proxy.provider.dinglicom</name>
<value>org.apache.Hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置:Fencing,
这里dfs.ha.fencing.methods实现的方法有两种sshfence和shell,我下面实现的是sshfence,dfs.ha.fencing.ssh.private-key-files这个是ssh的key file ,用于在Active 节点切换期间的安全机制,确保在任何时间都只有一个NameNode 处于活跃状态。在故障切换期间,haadmin 命令确保在将其它NameNode 转换为Active 状态之前Active 节点处在Standby 状态,或其进程已被终止。
至少应该配置一个,因为没有默认配置,因此如果配置则HA 机制将会失效。
如果要实现自定义的安全机制,参照org.apache.hadoop.ha.NodeFencer
-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/smp/.ssh/id_rsa</value>
</property>
<!--启用失败自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置zk集群信息-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
<!--datanode数据存放目录-->
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop-cdh4-dn</value>
</property>
4.namenode格式化
bin/hadoop namenode -format -clusterid cluster1
5. HDFS (HA) 的初始化
设定所有的必要配置项后,必须首先同步两个NameNode 上的元数据。如果是新建的HDFS 集群,则应首先格式化一个NameNode ,或者想把非HA 集群转换为HA 集群,按照dfs.namenode.name.dir 、dfs.namenode.edits.dir 的配置把当前NameNode 节点的元数据目录复制到另一个NameNode. 还应该确保共享存储目录下(dfs.namenode.shared.edits.dir ) 包含NameNode 所有的元数据
6.zk格式化
bin/hdfs zkfc -formatZK
7.HDFS(HA) 的管理
sbin/start-dfs.sh
默认以HA 方式启动集群,启动后为Standby 状态,使用如下命令设置Active 节点 (手动方式)
bin/hdfs haadmin –DFSHAadmin –transitionToActive nn1
如果让nn2 成为变为active nn1 变为standby ,则
# bin/hdfs haadmin -DfSHAadmin -failover nn1 nn2
如果失败(is not ready to become active) 则
# bin/hdfs haadmin -DfSHAadmin -failover --forceactive nn1 nn2
具体参照bin/hdfs haadmin命令
页:
[1]