搭建 hadoop HA

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Moneywa/article/details/53730852
hadoop2.4.0
zookeeper3.4.6

说明:总共三个节点,namenode1、namenode2、datanode


一、集群配置ssh免密码登录:

在三台机器上都执行以下命令:
// 在namenode1节点生成SSH密钥对
[hadoop@namenode1 ~]$ cd /usr/bin/
[hadoop@namenode1 bin]$ ./ssh-keygen -t rsa
// 将公钥复制到集群所有节点机器上
[hadoop@namenode1 bin]$ ssh-copy-id namenode1
[hadoop@namenode1 bin]$ ssh-copy-id namenode2
[hadoop@namenode1 bin]$ ssh-copy-id datanode

// 测试是否可以免密码登录 namenode2,无需密码即可登录
[hadoop@namenode1 bin]$ ssh namenode2


二、zookeeper 安装
  1. 解压 zookeeper 到 /opt 下
  2. 建立软连接:$ln -s zookeeper-3.4.6 zookeeper
  3. 更改权限:$chown -R hadoop:hadoop zookeeper
                         $chown -R hadoop:hadoop zookeeper-3.4.6
  1. 切换到hadoop用户,进入目录:$cd /opt/zookeeper/conf/
  2. 复制配置文件并编辑:
          $cp zoo_sample.cfg zoo.cfg
          $vim zoo.cfg
     
dataDir=/opt/hadoopdata/zookeeperdata #zookeeper保存数据的目录
dataLogDir=/opt/hadoopdata/zookeeperdata/log #zookeeper日志存放目录
maxClientCnxns=200 #连接zookeeper客户端最大数量

#设置zookeeper节点
server.1=namenode1:2888:3888
server.2=namenode2:2888:3888
server.3=datanode:2888:3888

  1. 创建数据存放目录,并修改权限chown...
  2. 在/opt /hadoopdata/zookeeperdata 下创建文件myid 写入 数字1
  3. 配置IP与主机名的对应关系,root $vim /etc/hosts(每个节点都得配置)

192.168.0.202 namenode1
192.168.0.203 namenode2
192.168.0.204 datanode

  1. 将文件夹 hadoopdata 和 zookeeper-3.4.6 拷贝到另外的两个主机:
     $scp -r hadoopdata zookeeper-3.4.6 datanode:/opt/
      $scp -r 文件夹1 文件夹2 主机2名称或IP:目录

  1. 在另外的两个主机同样建立软连接,更改权限。
  2. 在主机namenode2中修改myid文件内容为 数字2,datanode 为3
到此,zookeeper集群安装完成。

  1. 启动集群:
          $cd /opt/zookeeper/bin/
          $./zkServer.sh start
  
          $ ./zkServer.sh status  # 查看zookeeper状态


二、安装hadoop

  1. 解压安装包:$ tar zxvf hadoop-2.4.0.tar.gz
  2. 建立软连接:$ln -s hadoop-2.4.0 hadoop
  3. 修改权限:$chown -R hadoop:hadoop hadoop
                     $chown -R hadoop:hadoop hadoop-2.4.0
  4. 切换到 hadoop 用户:$su - hadoop
  5. 配置 hadoop 环境脚本:$ cd /opt/hadoop/etc/hadoop/
                                               $ vim hadoop-env.sh
      
export JAVA_HOME=/usr/java/jdk1.7.0_79
export HADOOP_HEAPSIZE=2048  #设置内存大小

export HADOOP_NAMENODE_OPTS="-Xmx1024m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"

export HADOOP_PID_DIR=/opt/hadoop/pids
export HADOOP_LOG_DIR=/opt/hadoopdata/hadooplogs


  1. 配置 core-site.xml文件

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://educluster</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>namenode1:2181,namenode2:2181,datanode:2181</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
        <!-- 128K  -->
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/opt/mydisk/disk01/hadoopdata/tmp,file:/opt/mydisk/disk02/hadoopdata/tmp</value>
    </property>
</configuration>

  1. hdfs-site.xml


<property>
     <name>dfs.nameservices</name>
     <value> educluster</value>
</property>

<property>
     <name>dfs.ha.namenodes. educluster</name>
     <value> nn1,nn2</value>
</property>

<property>
     <name>dfs.namenode.rpc-address.educluster. nn1</name>
     <value>namenode1:8020</value>
</property>
<property>
     <name>dfs.namenode.rpc-address.educluster.nn2</name>
     <value>namenode2:8020</value>
</property>
<property>
     <name>dfs.namenode.http-address.educluster.nn1</name>
     <value>namenode1:50070</value>
</property>
<property>
     <name>dfs.namenode.http-address.educluster.nn2</name>
     <value>namenode2:50070</value>
</property>
<property>
     <name>dfs.namenode.shared.edits.dir</name>
     <value>qjournal://namenode1:8485;namenode2:8485;datanode:8485/educluster</value>
</property>
<property>
     <name>dfs.client.failover.proxy.provider.eduluster</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>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
     <name>dfs.journalnode.edits.dir</name>
     <value>/opt/mydisk/journaldata</value>
</property>
<!-- 启动自动故障转移 -->
<property>
     <name>dfs.ha.automatic-failover.enabled</name>
     <value>true</value>
</property>
<property>
     <name>dfs.namenode.checkpoint.dir</name>
     <value>file:/opt/hadoopdata/sname</value>
</property>
<property>
     <name>dfs.namenode.name.dir</name>
     <value>file:/opt/hadoopdata/name</value>
</property>
<property>
     <name>dfs.datanode.data.dir</name>
     <value>file:/opt/mydisk/disk01,file:/opt/mydisk/disk02</value>
</property>
<!-- 副本数 -->
<property>
     <name>dfs.replication</name>
     <value>1</value>
</property>
<property>
     <name>dfs.webhdfs.enabled</name>
     <value>true</value>
</property>
<property>
     <name>dfs.datanode.handler.count</name>
     <value>200</value>
</property>
<property>
     <name>dfs.namenode.handler.count</name>
     <value>150</value>
</property>
<property>
     <name>dfs.datanode.max.transfer.threads</name>
     <value>8192</value>
</property>
<property>
     <name>dfs.hosts.exclude</name>
     <value>/opt/hadoop/etc/hadoop/excludes</value>
</property>

  1. 编辑salves,写入 DataNode的 hostname,即:datanode

  1. 在三个主机中的 /opt 下使用root建立目录 mydisk,并将权限给hadoop用户。

[hadoop@localhost ~]$ su
[root@localhost hadoop]# cd /opt/
[root@localhost opt]# mkdir mydisk
[root@localhost opt]# chown -R hadoop:hadoop mydisk

  1. 三个主机创建以下目录:

[root@localhost opt]# exit
[hadoop@localhost hadoop]$ cd /opt/mydisk/
[hadoop@localhost mydisk]$ mkdir -p disk01/hadoopdata/tmp
[hadoop@localhost mydisk]$ mkdir -p disk02/hadoopdata/tmp
[hadoop@localhost mydisk]$ mkdir journaldata
#namenode下-----------------------------
[hadoop@localhost opt]$ cd ../hadoopdata
[hadoop@localhost hadoopdata]$ mkdir sname
[hadoop@localhost hadoopdata]$ mkdir name
#---------------------------------------
[hadoop@localhost hadoopdata]$ cd /opt/hadoop/etc/hadoop/
[hadoop@localhost hadoop]$ touch excludes

  1. 在namenode1 中执行以下命令,将hadoop及其配置发送到namenode2和datanode中。

[hadoop@localhost opt]$ scp -r hadoop-2.4.0 root@namenode2:/opt/
[hadoop@localhost opt]$ scp -r hadoop-2.4.0 root@datanode:/opt/

  1. 在namenode2 和 datanode 中 建立软连接,并分配权限

[root@localhost opt]# ln -s hadoop-2.4.0 hadoop
[root@localhost opt]# chown -R hadoop:hadoop  hadoop-2.4.0
[root@localhost opt]# chown -R hadoop:hadoop  hadoop

  1. 配置环境变量,写入HADOOP_HOME,保存后记得 source ~/.bash_profile 使其生效。

    [hadoop@localhost opt]$ vim ~/.bash_profile
    export HADOOP_HOME=/opt/hadoop/
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    [hadoop@localhost opt]$ source ~/.bash_profile

  1. 启动,在此之前 zookeeper 已经启动
          1)三个主机启动 journalnode
[hadoop@localhost log]$ cd /opt/hadoop/sbin/
[hadoop@localhost sbin]$ ./hadoop-daemon.sh start journalnode

 2)在namenode1上格式化 zkfc :

$ cd /opt/hadoop/bin/
$ ./hdfs zkfc -formatZK
   格式化后 执行
$/opt/zookeeper/bin/zkCli.sh 再执行 ls / 看到下面的内容即成功。

          3)在namenode1 上 格式化、启动 namenode
[hadoop@localhost sbin]$ cd /opt/hadoop/bin/
[hadoop@localhost bin]$ ./hadoop namenode -format
[hadoop@localhost sbin]$ ./hadoop-daemon.sh start namenode

          4)在namenode2 上同步,并启动namenode

$ cd /opt/hadoop/bin/
$./hdfs namenode -bootstrapStandby
$cd ../sbin
$./hadoop-daemon.sh start namenode

          5)在namenode1 上启动dfs:$./start-dfs.sh












猜你喜欢

转载自blog.csdn.net/Moneywa/article/details/53730852