hadoop2.x hdfs完全分布式 HA 搭建

官网链接
hadoop配置文件主页:http://hadoop.apache.org/docs/r2.5.2/

HDFS hapdoop HA全分布配置:http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

总结步骤:
准备工作:
1.
配置java环境变量  可以在/etc/profile 或者在/root/.bash_profile中进行配置
2.
配置免密码登录  特别是namenode之间可以相互免密码登录
3.
准备zookeeper
a)三台zookeeper:hadoop1,hadoop2,hadoop3
b)编辑zoo.cfg配置文件
修改dataDir=/opt/zookeeper   //可自定义文件位置
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
在dataDir目录中创建一个myid的文件,文件内容为1,2,3  (1,2,3分别为上面的server.后数字)

HADOOP配置文件
1.
在hadoop-env.sh中配置java_home
export JAVA_HOME=/usr/java/jdk1.7.0_79
2.
配置slaves:放datanode的主机映射名
例:
    node2
    node3
    node4
3.
配置hdfs-site.xml
<configuration>
    <!-- 配置服务名 -->
  <property>
      <name>dfs.nameservices</name>
      <value>xiaobing</value>
  </property>
    <!-- 配置权限关闭 可以使其他用户可以进行访问 -->
  <property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
  </property>
    <!-- 给namenode命名 -->
  <property>
      <name>dfs.ha.namenodes.xiaobing</name>
      <value>nn1,nn2</value>
  </property>
    <!-- 为第一个namenode建立rpc 数据通信协议 -->
  <property>
      <name>dfs.namenode.rpc-address.xiaobing.nn1</name>
      <value>node1:8020</value>
  </property>
    <!-- 为第二个namenode建立rpc 数据通信协议 -->
  <property>
      <name>dfs.namenode.rpc-address.xiaobing.nn2</name>
      <value>node4:8020</value>
  </property>
    <!-- 为第一个namenode建立http协议 -->
  <property>
      <name>dfs.namenode.http-address.xiaobing.nn1</name>
      <value>node1:50070</value>
  </property>
    <!-- 为第二个namenode建立http协议 -->
  <property>
      <name>dfs.namenode.http-address.xiaobing.nn2</name>
      <value>node4:50070</value>
  </property>
    <!--  配置journalnode的主机名端口,随便起个文件名  -->
  <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://node2:8485;node3:8485;node4:8485/abcdir</value>
  </property>
    <!-- 配置failover机制 -->
  <property>
      <name>dfs.client.failover.proxy.provider.xiaobing</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
  </property>
    <!-- 配置本地私钥,使failover controller 可以ssh namenode进行检查 -->
  <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_dsa</value>
  </property>
    <!-- 设置自动接管  -->
  <property>
      <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
  </property> 
</configuration>
4.配置core-site.xml
<configuration>
    <!-- 配置访问服务名 -->
    <property>
          <name>fs.defaultFS</name>
          <value>hdfs://xiaobing</value>
    </property>
    <!-- 配置nomenode的fsimage文件生成文件位置 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/data</value>
    </property>
    <!-- 配置journalnode的edits文件存放路径 -->
    <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>/opt/jn/data</value>
    </property>
    <!-- 配置zookeeper的主机名 端口 -->    
    <property>
           <name>ha.zookeeper.quorum</name>
           <value>node1:2181,node2:2181,node3:2181</value>
     </property>
</configuration>
5.启动所有的zookeeper  
    zkServer.sh start

6.启动所有JournalNode:
    hadoop-daemon.sh start journalnode
7.在其中任意一个namenode上格式化:hdfs namenode -format
8.把刚刚格式化之后的元数据拷贝到另外一个namenode上
a)启动刚刚格式化的namenode
b)在任一没有格式化的namenode上执行:hdfs namenode -bootstrapStandby
c)启动第二个namenode
9.在其中一个namenode上初始化zkfc:hdfs zkfc -formatZK
10.停止上面节点:stop-dfs.sh
11.全面启动:start-dfs.sh
原文地址:https://www.cnblogs.com/bingzhikun/p/4972441.html