首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在 IBM CAMP 服务器上实现开源 Hadoop HDFS 的高可用性-2

在 IBM CAMP 服务器上实现开源 Hadoop HDFS 的高可用性-2

HDFS HA 的配置步骤:本文详解
架构图如下:
图 4.HDFS 利用 QJM 实现 HA 的架构图Hadoop2.2.0 的源码编译
因为使用 IBM 的 JDK,目前需要在 Apache 官方网站上下载的源码包,然后打上补丁进行手动编译。具体编译步骤请参考,这里不在详细描述。编译成功后,会自动生成 ./hadoop-dist/target/hadoop-2.2.0.tar.gz 文件。
安装配置 Hadoop2.2.0 之前,进行环境设置
在 PLinux 系统上创建一个普通用户,本文创建一个用户名"hadoop"的用户。
1
2
[root@plinux09 ~]# id hadoop
uid=500(hadoop) gid=501(hadoop) groups=501(hadoop)




创建目录/bigdata 与/hadoopdata,并且使用 chown -R 命令把这两个目录属性设置成 hadoop 用户和组。其中/bigdata 目录下存放所有的开源组件,/hadoopdata 用于存放 hdfs 的 NameNode 与 DataNode 数据。
1
2
3
4
5
[root@plinux09 ~]# chown -R hadoop:hadoop /bigdata /hadoopdata/
[root@plinux09 ~]# ll /
total 110
drwxr-xr-x.   9 hadoop hadoop  4096 Jan  9 22:17 bigdata
drwxr-xr-x.   5 hadoop hadoop  4096 Jan  9 23:05 hadoopdata




关闭所有分区上的 SELinux 与 Iptables,关闭 Selinux 后需要重启系统才能生效。
1
2
3
4
[root@rhel226 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@rhel226 ~]# service iptables stop
[root@rhel226 ~]# chkconfig --level 345 iptables off




SSH 无密码验证配置
配置/etc/hosts 文件
1
2
3
4
5
[root@plinux09 ~]# cat /etc/hosts
10.10.10.24 plinux09
10.10.10.25 plinux10
10.10.10.27 plinux11
10.10.10.28 plinux12




在四个 plinux 系统上分别使用命令 ssh-keygen 生成的密钥对 id_rsa 和 id_rsa.pub,默认存放在"/home/hadoop/.ssh"目录下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[hadoop@plinux09 ~]$ ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Created directory '/home/test/.ssh'.
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
89:23:48:5b:f9:e5:6b:9b:32:b5:66:81:24:b4:e6:3b test@plinux09
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|    ..           |
|  ..o.  .        |
| . ++..+ .       |
|  oo.o+.S        |
|    ....o.       |
|     . .oo       |
|    E o.+o       |
|     . =o        |
+-----------------+

[hadoop@plinux09 .ssh]$ ls -al /home/hadoop/.ssh
-rw------- 1 hadoop hadoop 1675 Dec 23 13:36 id_rsa
-rw-r--r-- 1 hadoop hadoop  395 Dec 23 13:36 id_rsa.pub




然后把所有的公钥的内容添加 authorized_keys 文件里,再把这个文件分别拷贝到每台机器的相同目录下。
1
[hadoop@plinux09 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys




设置 authorized_keys 文件属性为 600,否则 ssh 无密码验证不能生效。
1
2
3
4
5
[hadoop@plinux09 ~]$ chmod 600 ~/.ssh/authorized_keys
[hadoop@plinux09 ~]$ ll .ssh/
-rw-------. 1 hadoop hadoop 1193 Jan  9 21:06 authorized_keys
-rw-------. 1 hadoop hadoop 1675 Jan  9 21:00 id_rsa
-rw-r--r--. 1 hadoop hadoop  397 Jan  9 21:00 id_rsa.pub




配置/etc/security/limits.conf 文件,添加以下内容:
1
2
3
4
5
6
7
8
9
[hadoop@plinux09 ~]$ vim /etc/security/limits.conf
hadoop             soft    nproc           -1
hadoop             hard    nproc           -1
hadoop             soft    nofile          -1
hadoop             hard    nofile          65536
hadoop             soft    memlock         -1
hadoop             hard    memlock         -1
hadoop             soft    sigpending      -1
hadoop             hard    sigpending      -1




安装配置 Hadoop2.2.0,实现手动方式 NameNode HA 的切换
首先对编译生成的 hadoop-2.2.0.tar.gz 文件进行解压。
1
[hadoop@plinux09 bigdata]$ tar -zxvf hadoop-2.2.0.tar.gz




然后设置系统环境变量,修改~/.bash_profile 文件,添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
export JAVA_HOME=/bigdata/ibm-java-ppc64-70
export CLASSPATH=.CLASSPATHJAVA_HOME/libJAVA_HOME/jre/lib
export HADOOP_HOME=/bigdata/hadoop
export ZOOKEEPER=/bigdata/zookeeper
export ZOO_LOG_DIR=/bigdata/zookeeper/data/logs
export HBASE_HOME=/bigdata/hbase
export HIVE_HOME=/bigdata/hive
export
PATH=$ZOOKEEPER/binPROTOBUF/binHBASE_HOME/binJAVA_HOME/binJAVA_HOME/jre/binHADOOP_HOME:\
  $HADOOP_HOME/binHADOOP_HOME/sbinHIVE_HOME:$HIVE_HOME/bin:$PATH
export HADOOP_HOME_WARN_SUPPRESS=1




运行以下命令使之生效:
1
[hadoop@plinux09 bigdata]$ . ~/.bash_profile




配置 hdfs-site.xml 文件,以便实现手动方式的 NameNode HA 切换
1
[hadoop@plinux09 bigdata]$ vim /bigdata/hadoop/etc/hadoop/hdfs-site.xml




<!-- "dfs.nameservices"来定义 nameservices 的名字,这个名字可以任意定义,这里定义成"mycluster"。-->
1
2
3
4
<property>
   <name>dfs.nameservices</name>
   <value>mycluster</value>
</property>




<!-- "dfs.ha.namenodes.[nameservice ID]" 来标识每个 NameNode,每个 NameNode 的标识必须唯一,并且最多有两个 NameNode。这里将两个 NameNode 分别取名为 nn1,nn2。-->
1
2
3
4
<property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
</property>




<!-- "dfs.namenode.rpc-address. [nameservice ID].[name node ID]" 来定义每个 NameNode 的 IP 或 Hostname 以及端口号。-->
1
2
3
4
5
6
7
8
<property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>plinux09:8020</value>
</property>
<property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>plinux10:8020</value>
</property>




<!-- "dfs.namenode.http-address. [nameservice ID].[name node ID]" 来定义 HTTP 服务的端口号。-->
1
2
3
4
5
6
7
8
<property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>plinux09:50070</value>
</property>
<property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>plinux10:50070</value>
</property>




<!-- "dfs.namenode.shared.edits.dir" 共享存储目录的位置。这是配置备份节点需要随时保持同步活动节点所作更改的远程共享目录,只能配置一个目录,这个目录挂载到两个 NameNode 上都必须是可读写的,且必须是绝对路径。-->
1
2
3
4
<property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://plinux09:8485;plinux10:8485;plinux11:8485/mycluster</value>
</property>




<!-- "dfs.client.failover.proxy.provider.[nameservice ID]" HDFS 客户端用来和活动的 namenode 进行联系的 Java 类。配置的 Java 类是用来给 HDFS 客户端判断哪个 NameNode 节点是活动的,当前是哪个 NameNode 处理客户端的请求。目前 Hadoop 唯一的实现类是 ConfiguredFailoverProxyProvider。-->
1
2
3
4
5
<property>
   <name>dfs.client.failover.proxy.provider.mycluster</name>                  
     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
     </value>
   </property>




<!-- "dfs.ha.fencing.methods" 用于停止活动 NameNode 节点的故障转移期间的脚本或 Java 类的列表。在任何时候只有一个 NameNode 处于活动状态,对于 HA 集群的操作是至关重要的,因此,在故障转移期间,启动备份节点前,首先需要确保活动节点处于等待状态,或者进程被中止,为了达到这个目的,您至少要配置一个强行中止的方法,或者回车分隔的列表,这是为了一个一个的尝试中止,直到其中一个返回成功,表明活动节点已停止。Hadoop 提供了两个方法:shell 和 sshfence,要实现您自己的方法,请看 org.apache.hadoop.ha.NodeFencer 类。-->
1
2
3
4
5
6
7
8
9
<property>
                     <name>dfs.ha.fencing.methods</name>
                     <value>sshfence(hdfs)
                     shell(/bin/true)</value>
             </property>
             <property>
                     <name>dfs.ha.fencing.ssh.private-key-files</name>
                     <value>/home/hadoop/.ssh/id_rsa</value>
             </property>




<!-- "dfs.journalnode.edits.dir" 用来定义 journaldata 的存储路径。-->
1
2
3
4
<property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/bigdata/hadoop/journalnode</value>
</property>




*注意: sshfence(hdfs)后是"回车",这是源代码里定义成这种格式,否则使用其它符号 HA 将不能正常切换。
返回列表