大数据(hdfs的扩容兼容及其高可用HA)

HDFS的集群扩容,减容 [了解]
热扩容,减容
  • 减容

    1. 创建一个新的文件 位置 名字 随便
    host.exclusion
    hadoop2
    2. 配置 hdfs-site.xml
    dfs.hosts.exclude 文件的位置 (不加 file://)
    <property>
        <name>dfs.hosts.exclude</name>
        <value>/opt/install/hadoop-2.5.2/host.exclusion</value>
    </property>
    3. 通过命令刷新集群
    bin/hdfs dfsadmin -refreshNodes
    4. 把删除的节点 从slaves 删除
    5. 把hdfs-site.xml
    dfs.hosts.exclude 的信息删除
    6. kill 掉 被删除的DataNode
  • 扩容

    # ,如果新节点克隆主节点,则删除新节点下面的 data文件夹中的数据,否则主节点和新节点只可显示一个
    1. 保证新加的机器 (hosts配置 域名设置 iptables selinux关闭 配置主机到从机 SSH免密码登陆 hadoop安装(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml))
    2. 启动新机器的datanode
    sbin/hadoop-daemon.sh start datanode
    3. 平衡处理sbin/start-balancer.sh,为了数据散列均匀
    4. 修改集群中所有的slave配置文件 把新加入的节点配置进去

 

HA(高可用)的HDFS集群
  • 准备集群中三个节点

    防火墙,selinux,ip,host,主机名,jdk,ssh
    zk ssh 中间节点 操作 所有节点
  • 安装zk集群(奇数个节点)

    1. 上传zookeeper-3.4.5.tar.gz,并解压缩
    2. zookeeper安装目录下创建一个data文件夹 /opt/install/zookeeper-3.4.5/data
    3. 修改zookeeper的配置文件
      zoo_sample.cfg 改名成zoo.cfg
      dataDir=/opt/install/zookeeper-3.4.5/data
       server.1=hadoop:2888:3888  
      server.2=hadoop1:2888:3888
      server.3=hadoop2:2888:3888
    4. dataDir所对应的路径下创建myid文件 并分别设置 1,2,3
    5. 集群同步 scp -r zookeeper-3.4.5/ root@hadoop1:/opt/install/
    6. zookeeper_home/bin/zkServer.sh start|stop|status
      zookeeper_home/bin/zkCli.sh
  • 安装Hadoop

    1. 解压缩 释放hadoop的安装包
    2. 配置文件 同步全集群
      hadoop-env.sh
      core-site.xml
      <property>
               <name>fs.defaultFS</name>
               <value>hdfs://ns1/</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:2181,hadoop1:2181,hadoop2:2181</value>
      </property>
      hdfs-site.xml
      <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
                  <property>
                     <name>dfs.nameservices</name>
                     <value>ns1</value>
                  </property>
                  <property>
                     <name>dfs.ha.namenodes.ns1</name>
                     <value>nn1,nn2</value>
                  </property>
                  <!-- nn1的RPC通信地址 -->
                  <property>
                       <name>dfs.namenode.rpc-address.ns1.nn1</name>
                       <value>hadoop:8020</value>
                 </property>
                 <!-- nn1的http通信地址 -->
                 <property>
                     <name>dfs.namenode.http-address.ns1.nn1</name>
                     <value>hadoop:50070</value>
                 </property>
                 <!-- nn2的RPC通信地址 -->
                 <property>
                      <name>dfs.namenode.rpc-address.ns1.nn2</name>
                      <value>hadoop1:8020</value>
                 </property>
                  <!-- nn2的http通信地址 -->
                  <property>
                       <name>dfs.namenode.http-address.ns1.nn2</name>
                       <value>hadoop1:50070</value>
                 </property>
                  <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
                  <property>
                        <name>dfs.namenode.shared.edits.dir</name>
                        <value>qjournal://hadoop:8485;hadoop1:8485;hadoop2:8485/ns1</value>
                  </property>
                   <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
                    <property>
                        <name>dfs.journalnode.edits.dir</name>
                        <value>/opt/install/hadoop-2.5.2/journaldata</value>
                    </property>
                    <!-- 开启NameNode失败自动切换 -->
                    <property>
                        <name>dfs.ha.automatic-failover.enabled</name>
                        <value>true</value>
                    </property>
                    <!-- 配置失败自动切换实现方式 -->
                   <property>
                        <name>dfs.client.failover.proxy.provider.ns1</name>
                        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                    </property>
                    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
                    <property>
                        <name>dfs.ha.fencing.methods</name>
                        <value>
                            sshfence
                            shell(/bin/true)
                        </value>
                    </property>
                    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
                    <property>
                        <name>dfs.ha.fencing.ssh.private-key-files</name>
                        <value>/root/.ssh/id_rsa</value>
                    </property>
                    <!-- 配置sshfence隔离机制超时时间 -->
                    <property>
                        <name>dfs.ha.fencing.ssh.connect-timeout</name>
                       <value>30000</value>
                   </property>

      mapred-site.xml[一致]
      yarn-site.xml[一致]
      slaves[一致]
    3. 启动zk , journalnode
      sbin/hadoop-daemon.sh start journalnode
    3. 格式化
      bin/hdfs namenode -format
      scp -r data/tmp/* root@hadoop1:/opt/install/hadoop-2.5.2/data/tmp
    4. 启动
      bin/hdfs zkfc -formatZK [第一次]
      sbin/start-dfs.sh
  • Java代码

     Configuration configuration = new Configuration();
    configuration.set("fs.defaultFS","hdfs://ns1/");

    FileSystem fileSystem = FileSystem.get(configuration);

 

猜你喜欢

转载自www.cnblogs.com/lhc-hhh/p/10324287.html
今日推荐