搭建HA HDFS集群

一、搭建zookeeper集群 (奇数个节点 3个节点 )

1. 上传zookeeper到linux服务器,并解压缩/opt/install中
2. zookeeper_home/conf
   zoo_sample.cfg 改名 成 zoo.cfg
   cp zoo_sample.cfg zoo.cfg
3. 修改zoo.cfg
# zookeeper_home 创建 data目录
dataDir=/opt/install/zookeeper-3.4.5/data

server.0=hadoop.baizhiedu.com:2888:3888
server.1=hadoop1.baizhiedu.com:2888:3888
server.2=hadoop2.baizhiedu.com:2888:3888

4. data目录下面创建一个myid文件
#第一台服务器  myid  0
#第二台服务器  myid  1
#第三台服务器  myid  2

5. scp 把zookeepr 拷贝到 集群的每一个节点
scp -r 

6. 对应服务器 修改 myid 文件的值

7. 启动zookeeper集群
bin/zkServer.sh start 
bin/zkServer.sh status 查看集群状态

#client访问 zk  leader
bin/zkCli.sh 

2、Hadoop基本环境

3、

core-site.xml
<property>        
    <name>fs.default.name</name>
    <value>hdfs://ns</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/install/hadoop-2.5.2/data/tmp</value>
  </property>
  <property>
      <name>ha.zookeeper.quorum</name>
   <value>hadoop.baizhiedu.com:2181,hadoop1.baizhiedu.com:2181,hadoop2.baizhiedu.com:2181</value>
  </property>
  
hdfs-site.xml
<property>        
     <name>dfs.replication</name>
     <value>3</value>
  </property>
  <property>
     <name>dfs.permissions.enabled</name>
     <value>false</value>
  </property>
  <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
  <property>
  <name>dfs.nameservices</name>
  <value>ns</value>
  </property>
  <!-- ns下面有两个NameNode,分别是nn1,nn2 -->
  <property>
  <name>dfs.ha.namenodes.ns</name>
  <value>nn1,nn2</value>
  </property>
  <!-- nn1的RPC通信地址 -->
  <property>
  <name>dfs.namenode.rpc-address.ns.nn1</name>
  <value>hadoop.zzedu.com:8020</value>
  </property>
  <!-- nn1的http通信地址 -->
  <property>
  <name>dfs.namenode.http-address.ns.nn1</name>
  <value>hadoop.zzedu.com:50070</value>
  </property>
  <!-- nn2的RPC通信地址 -->
  <property>
  <name>dfs.namenode.rpc-address.ns.nn2</name>
  <value>hadoop2.zzedu.com:8020</value>
  </property>
  <!-- nn2的http通信地址 -->
  <property>
  <name>dfs.namenode.http-address.ns.nn2</name>
  <value>hadoop2.zzedu.com:50070</value>
  </property>

<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop.zzedu.com:8485;hadoop2.zzedu.com:8485;hadoop3.zzedu.com:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/install/hadoop-2.5.2/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>

yarn-site.xml
<property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
  </property>
   <property>
        <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
     </property>
     <!-- 指定resourcemanager地址 -->
     <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop.baizhiedu.com</value>
      </property>

yarn-env.sh添加如下内容
export JAVA_HOME=/usr/java/jdk1.7.0_71

首先启动各个节点的Zookeeper,在各个节点上执行以下命令:
bin/zkServer.sh start

在某一个namenode节点执行如下命令,创建命名空间
bin/hdfs zkfc -formatZK

在每个journalnode节点用如下命令启动journalnode
sbin/hadoop-daemon.sh start journalnode

在主namenode节点格式化namenode和journalnode目录
bin/hdfs namenode -format ns

在主namenode节点启动namenode进程
sbin/hadoop-daemon.sh start namenode

在备namenode节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!然后用第二个命令启动备namenode进程!

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

在两个namenode节点都执行以下命令
sbin/hadoop-daemon.sh start zkfc

在所有datanode节点都执行以下命令启动datanode
sbin/hadoop-daemon.sh start datanode

日常启停命令
sbin/start-dfs.sh
sbin/stop-dfs.sh

#保证2个主节点 都要与从节点 ssh免密登录

猜你喜欢

转载自blog.csdn.net/qq_42393859/article/details/82781630