1 准备工作

1. 安装oracle virtualbox

2. 下载centos 6.5

  http://mirrors.163.com/centos/6.5/isos/i386/

 

3. JRE jdk7u51

 

4. 虚拟机网络选择-》桥接方式

 

5. C:\Windows\System32\drivers\etc\hosts

 

 

虚拟机设置

1,修改主机名和网络所需的网关

   /etc/sysconfig/network

 

GATEWAY = 192.168.1.1

2,  修改eth0(修改为静态IP)

   /etc/sysconfig/network-scripts/ifcfg-eth0

 

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.1.191

 

3, 关闭iptables 防火墙

  service iptables stop

  chkconfig iptables off

  

4,关闭selinux

  /etc/selinux/config

  

5,配置163 yum源

   http://mirrors.163.com/.help/centos.html(根据该连接给出的文档配置就可以)

   运行yummakecache生产本地缓存

6,配置dns

  /etc/resolv.conf

  nameserver 61.139.2.69(任意的DNS服务器IP)

7,安装jdk rpm的或者tar.gz

  rpm -ivh

   tar–zxvf jdk压缩名

8, 配置主机名的反向解析

  /etc/hosts

  192.168.1.191 hadoop1

9, vi .bashrc或修改 /etc/profile 文件(配置环境变量,然后sourceprofile)

  export JAVA_HOME=/usr/java/latest

  export PATH=$PATH:$JAVA_HOME/bin

 

2 hadoop基本安装

2.1 添加ssh免密码登陆

2.1.1 执行如下命令生成密钥

  $ ssh-keygen -tdsa -P '' -f ~/.ssh/id_dsa

 $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

 命令执行完之后可以在当前用户目录下查看.ssh文件夹下的文件

 [root@hadoop1 .ssh]# ls
authorized_keys  id_dsa  id_dsa.pub  known_hosts

2.1.2然后测试 ssh hadoop(当前主机名),如果可以直接登陆则配置成功

[root@hadoop1 hadoop]# ssh hadoop1
Last login: Sat Sep 20 22:30:52 2014 from hadoop1

2.1.3 配置成功后再将密钥同步到集群中的其他机器上使用命令

scp ~/.ssh/ authorized_keys  hadoop2:~/.ssh/ authorized_keys

scp ~/.ssh/ authorized_keys  hadoop3:~/.ssh/authorized_keys

这样主机hadoop1就能免密码登陆到主机hadoop1和hadoop2中了

2.2 安装hadoop

2.2.1 将下载的hadoop安装包上传到linux系统中执行如下命令安装

 tar –zxvfhadoop-2.2.0.tar.gz

2.2.2 配置环境变量

编辑/etc/profile 文件,然后执行source /etc/profile,是环境变量立即生效

export JAVA_HOME=/usr/java/jdk1.7.0_60 
 export HADOOP_HOME=/usr/hadoop
 export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

2.2.3 配置hadoop变量

修改/etc/hadoop/etc/hadoop/ hadoop-env.sh
# set to the root of your Java installation
  exportJAVA_HOME=/usr/java/jdk1.7.0_60# Assuming your installation directory is /usr/hadoop
 export HADOOP_PREFIX=/usr/hadoop

 

3 hadoop HA配置

参照官方文档http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

 

3.1 修改hdfs-site.xml 文件

 

<property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
<property>
 <name>dfs.ha.namenodes.mycluster</name>
  <value>ns1,ns2</value>
</property>
  <property>
   <name>dfs.namenode.rpc-address.mycluster.ns1</name>
    <value>hadoop1:4001</value>
  </property>
  <property>
   <name>dfs.namenode.http-address.mycluster.ns1</name>
    <value>hadoop1:4011</value>
  </property>
  <property>
   <name>dfs.namenode.rpc-address.mycluster.ns2</name>
    <value>hadoop2:4001</value>
  </property>
  <property>
   <name>dfs.namenode.http-address.mycluster.ns2</name>
    <value>hadoop2:4011</value>
  </property>
  <property>
 <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>
</property>
 
<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_dsa</value>
</property>
<property>
 <name>dfs.journalnode.edits.dir</name>
 <value>/root/data/journal/node/local/data</value>
</property>

注意:官网文档配置的dfs.ha.fencing.ssh.private-key-files的属性值是/root/.ssh/id_rsa,我使用的dsa的免密码登陆所以改为 /root/.ssh/id_dsa

3.2 修改core-site.xml 文件

<property>

  <name>fs.defaultFS</name>

  <value>hdfs://mycluster</value>

</property>

3.3 配置好之后将配置文件同步到集群中的其他机器上然后按步骤执行

 第一步:在每台机器上执行journalnode

Hadoop-daemon.sh start journalnode

第二步在hadoop1上格式化一个namenode节点

Hdfs namenode –format

第三步:在hadoop1上初始化journalnode的共享编辑

Hdfs namenode- initializeSharedEdits

第四步在hadoop1上启动namenode

第五步在没有格式化的namenode节点上即hadoop2执行

hdfs namenode –bootstrapStandby

第六步:启动hadoop2上的namenode

上述步骤执行完整之后在浏览器中测试可以看到 hadoop1和hadoop2都是standby状态

将standby状态转为active状态在对应主机上执行命令

hdfs haadmin – transitionToActive ns1

至此手动切换namenode的配置完成

配置完成之后启动和关闭命令

start-dfs.sh和stop-dfs.sh

3.3 配置zookpper使namenode自动切换

1 首先配置好zookeper的集群配置参考官网文档

http://zookeeper.apache.org/doc/r3.3.6/zookeeperStarted.html

2 配置hdfs-site.xml

<property>

  <name>dfs.ha.automatic-failover.enabled</name>

   <value>true</value>

 </property>

3配置core-site.xml

<property>

  <name>ha.zookeeper.quorum</name>

<value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>

 </property>

4 格式化ZooKeeper

$ hdfs zkfc –formatZK

5 启动hadoop Ha集群

start-dfs.sh

至此 自动切换namenode节点完成