• hadoop ha集群搭建


    一、虚拟机准备

    1)克隆:原来装了一台虚拟机,现在要克隆出4台一样的虚拟机

    虚拟机右击-》管理-》克隆 ,【创建完整克隆】就可以了

    CentOS 64,CentOS 64-1,CentOS 64-2 ,CentOS 64-3  三台机器 

    2)修改网络IP:

    在-1机器上

    su root  进入root角色

    cd   /etc/sysconfig/network-script

    vi   ifcfg-ens33

    修改IPADDR=192.168.60.127

    保存退出

    service network restart  #重启网卡,生效

    在-2机器上

    su root  进入root角色

    cd   /etc/sysconfig/network-script

    vi   ifcfg-ens33

    修改IPADDR=192.168.60.126

    保存退出

    service network restart  #重启网卡,生效

    在-3机器上

    su root  进入root角色

    cd   /etc/sysconfig/network-script

    vi   ifcfg-ens33

    修改IPADDR=192.168.60.125

    保存退出

    service network restart  #重启网卡,生效

    3)配置hosts

    在第一台机器上

    vi /etc/hosts

    192.168.60.125  slave3

    192.168.60.127  slave1

    192.168.60.126  slave2

    192.168.60.128  master

    在第二台机器上

    vi /etc/hosts

    192.168.60.125  slave3

    192.168.60.127  slave1

    192.168.60.126  slave2

    192.168.60.128  master

    在第三台机器上 

    vi /etc/hosts

    192.168.60.125  slave3

    192.168.60.127  slave1

    192.168.60.126  slave2

    192.168.60.128  master

    在第四台机器上 

    vi /etc/hosts

    192.168.60.125  slave3

    192.168.60.127  slave1

    192.168.60.126  slave2

    192.168.60.128  master

    4)配置免密登录

    yum install ssh

    yum install openssh-server

    yum install openssh-client

     
    确认sshserver是否启动了:
       ps -e |grep ssh

    如果没有则可以这样启动:sudo /etc/init.d/ssh start

    ssh-server配置文件位于/ etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。
    然后重启SSH服务:
    sudo /etc/init.d/ssh stop
    sudo /etc/init.d/ssh start
    然后使用以下方式登陆SSH:
    ssh zhou@192.168.***.** zhou为192.168.***.**机器上的用户,需要输入密码。
    断开连接:exit
     
    1.检查是否装了SSH包
    rpm -qa |grep ssh
    2.没有安装SSH直接YUM安装 yum install openssh-server
    3.检查SSH服务是否为开机启动 chkconfig --list sshd
    4.设置开机启动SSH服务 chkconfig --level 2345 sshd on
    5.重新启动下SSH服务 service sshd restart
    6.验证是否启动了22端口 netstat -antp |grep sshd
     
     
    在三台主机上都执行命令:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
    解释一下,ssh-keygen代表生成密钥;-t(注意区分大小写)表示指定生成的密钥类型;dsa是dsa密钥认证的意思,即密钥类型;-P用 于提供密语;-f指定生成的密钥文件。(关于密钥密语的相关知识这里就不详细介绍了,里面会涉及SSH的一些知识,如果读者有兴趣,可以自行查阅资料。)
    执行上面命令后:三台虚拟机的/root/.ssh/目录下,都会生成id_dsa和id_dsa.pub这两个文件
    其中:id_dsa是私钥,id_dsa.pub是公钥
     
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    这段话的意思是把公钥加到用于认证的公钥文件中,这里的authorized_keys是用于认证的公钥文件。
    至此无密码登录本机已设置完毕。
     
     
    因克隆出来的三台主机名都叫wcy,ssh连到别的机器上也不好分辨出来
    hostname     #查看当前机器主机名
    hostnamectl set-hostname 主机名   #设置修改主机名
    使三台机器主机名与域名对应:master slave1 slave2  slave3
     
    rm -rf *                 #删除文件夹下所有文件
    rm -rf id_dsa_*     #删除以id_dsa_名称开头的所有文件
     
    共享公钥
    在slave1机器上执行:
    scp是远程拷贝文件,拷贝/root/.ssh/id_dsa.pub文件,拷贝到master主机上,root是master主机的用户名,目录用:分隔,拷贝到master主机的/root/.ssh/目录上,重命名为id_dsa.pub_1
    在master主机上,把从slave1上拷贝过来的id_dsa.pub_1共享
    a.在master主机上,cat id_dsa.pub >> authorized_keys   #把master上的公钥共享,>>是cat  1 >>2 ,是把1文件内容追加到2文件里,cat 1>2,是把1文件覆盖2文件
    操作后,可以ssh localhost不需要密码来登录自己
    b.在master主机上,cat id_dsa.pub_1 >> authorized_keys   #把slave1主机上拷贝过来的公钥共享,然后这时在slave1主机上就可以登录到master上不需要密码ssh master,但在master上还不能直接登录到slave1
    c.在master主机上,cat id_dsa.pub_2 >> authorized_keys   #把slave2主机上拷贝过来的公钥共享,然后这时在slave2主机上就可以登录到master上不需要密码ssh master,但在master上还不能直接登录到slave2
    d.在master主机上,分发authorized_keys  文件到slave1,slave2上,让master也能直接不需要密码来登录他们
        scp authorized_keys root@slave1:/root/.ssh/
        scp authorized_keys root@slave2:/root/.ssh/
    这时在master上能直接ssh slave1         ssh slave2

     二、安装

    1.安装Zookeeper

    参见zookeeper安装

     

    2.安装hadoop

    1)下载软件:hadoop-2.7.4.tar.gz

        解压:tar zxvf hadoop-2.7.4.tar.gz

    2)配置:

    a.添加环境变量

    vi  /etc/profile

    export HADOOP_HOME=/usr/hadoop-2.7.4
    export PATH=$HADOOP_HOME/bin:$PATH

    source /etc/profile

    分发环境变量:

    scp /etc/profile root@slave1:/etc/profile

    scp /etc/profile root@slave2:/etc/profile

    在各slave上source /etc/profile

    b.修改配置文件(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)

    cd   /usr/hadoop-2.7.4/etc/hadoop

    vi   core-site.xml    #修改核心配置文件

     
    <configuration>
         <!-- 指定hdfs的nameservice为cluster -->
         <property>
             <name>fs.defaultFS</name>
             <value>hdfs://cluster/</value>
         </property>
         <!-- 指定hadoop临时目录,tmp这个目录需要提前建立好 -->
         <property>
             <name>hadoop.tmp.dir</name>
             <value>/usr/hadoop-2.7.4/tmp</value>
         </property>
         <property>
             <name>io.file.buffer.size</name>
             <value>4096</value>
         </property>
         <!-- 指定zookeeper地址 -->
         <property>
             <name>ha.zookeeper.quorum</name>
             <value>192.168.60.128:2181,192.168.60.127:2181,192.168.60.126:2181</value>
         </property>
         <!--多长时间创建CheckPoint NameNode截点上运行的CheckPointer 从Current文件夹创建CheckPoint;默认:0 由fs.trash
        .interval项指定 -->
         <property>
             <name>fs.trash.checkpoint.interval</name>
             <value>0</value>
         </property>
         <!--多少分钟.Trash下的CheckPoint目录会被删除,该配置服务器设置优先级大于客户端,默认:0 不删除 -->
         <property>
             <name>fs.trash.interval</name>
             <value>1440</value>
         </property>
    </configuration> 
     

     修改hdfs-site.xml

    vi hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/usr/hadoop-2.7.4/hdfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>/usr/hadoop-2.7.4/hdfs/data</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.webhdfs.enabled</name>
            <value>true</value>
        </property>
        <property> 
            <name>dfs.permissions</name> 
            <value>false</value> 
        </property>
        <!--nameservices逻辑名 -->
        <property>
            <name>dfs.nameservices</name>
            <value>cluster</value>
        </property>
        <!--设置NameNode IDs 此版本最大只支持两个NameNode -->
        <property>
            <name>dfs.ha.namenodes.cluster</name>
            <value>nn1,nn2</value>
        </property>
        <!-- Hdfs HA: dfs.namenode.rpc-address.[nameservice ID] rpc 通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.cluster.nn1</name>
            <value>master:9000</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.cluster.nn2</name>
            <value>slave1:9000</value>
        </property>
        <!-- Hdfs HA: dfs.namenode.http-address.[nameservice ID] http 通信地址 -->
        <property>
            <name>dfs.namenode.http-address.cluster.nn1</name>
            <value>master:50070</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.cluster.nn2</name>
            <value>slave1:50070</value>
        </property>
        <property> 
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value> 
        </property> 
        <!-- 启动故障自动恢复 --> 
        <!--==================Namenode editlog同步 ============================================ -->
        <!--保证数据恢复 -->
        <property>
            <name>dfs.journalnode.http-address</name>
            <value>0.0.0.0:8480</value>
        </property>
        <property>
            <name>dfs.journalnode.rpc-address</name>
            <value>0.0.0.0:8485</value>
        </property>
        <!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->
        <!--格式:qjournal://<host1:port1>;<host2:port2>;<host3:port3>/<journalId> 端口同journalnode.rpc-address -->
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://master:8485;slave1:8485;slave2:8485/cluster</value>
        </property>
        <!-- 指定journal --> 
        <property> 
            <name>dfs.client.failover.proxy.provider.cluster</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <!-- 指定 cluster 出故障时,哪个实现类负责执行故障切换 -->
        <property> 
            <name>dfs.journalnode.edits.dir</name>
            <value>/usr/hadoop-2.7.4/journaldata/jn</value>
        </property>
        <property>
            <name>dfs.qjournal.start-segment.timeout.ms</name>
            <value>600000</value>
        </property>
        <property>
            <name>dfs.qjournal.select-input-streams.timeout.ms</name>
            <value>600000</value>
        </property>
        <property>
            <name>dfs.qjournal.write-txns.timeout.ms</name>
            <value>600000</value>
        </property>
        <!-- 指定JournalNode集群在对nameNode的目录进行共享时,自己存储数据的磁盘路径 -->
        <property> 
            <name>dfs.ha.fencing.methods</name> 
            <value>shell(/bin/true)</value> 
        </property> 
        <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
        <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/root/.ssh/id_rsa</value> 
        </property> 
        <property> 
            <name>dfs.ha.fencing.ssh.connect-timeout</name>
            <value>10000</value>
        </property> 
        <property> 
            <name>dfs.namenode.handler.count</name>
            <value>100</value>
        </property> 
    </configuration>

    修改mapred-site.xml

    vi mapred-site.xml

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>mapreduce.jobtracker.http.address</name>
            <value>master:50030</value>
        </property>
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>master:10020</value>
        </property>
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>master:19888</value>
        </property>
        <property>
            <name>mapred.compress.map.output</name>
            <value>true</value>
        </property>
        <property>
            <name>yarn.app.mapreduce.am.staging-dir</name>
            <value>/usr/hadoop-2.7.4/yarn</value>
        </property>
    </configuration> 

    修改yarn-site.xml

    vi  yarn-site.xml

    <configuration>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
        </property>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.resourcemanager.address</name>
            <value>master:8032</value>
        </property>
        <property>
            <name>yarn.resourcemanager.scheduler.address</name>
            <value>master:8030</value>
        </property>
        <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
            <value>master:8031</value>
        </property>
        <property>
            <name>yarn.resourcemanager.admin.address</name>
            <value>master:8033</value>
        </property>
        <property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>master:8088</value>
        </property>
    </configuration>

    修改slaves:

    在配置文件目录下创建slaves文件,写入内容:

    cd  /usr/hadoop-2.7.4/etc/hadoop

    vi slaves

    slave1

    slave2

    修改hadoop-env.sh

    vi  hadoop-env.sh

    export JAVA_HOME=/usr/java/jdk1.8.0_111

    将配置好的hadoop打包,拷贝到slave1,slave2

    tar  zcvf  hadoop-2.7.4.tar.gz hadoop-2.7.4

    scp   hadoop-2.7.4.tar.gz  root@slave1:/usr

    scp   hadoop-2.7.4.tar.gz  root@slave2:/usr

    在slave1,slave2上解压包

    tar  zxvf   hadoop-2.7.4.tar.gz

    三、集群启动步骤

    1.启动zookeeper集群(分别在server.1,2,3上启动zk)

    zkServer.sh start 分别启动三台集群

    2.启动journalnode(分别在在master、slave1、slave2上执行)

    cd   /usr/hadoop-2.7.4/sbin

    ./hadoop-daemon.sh start journalnode

    三台机器上执行以上命令

    用jps命令检验刚才的journalnode是否启动成功

    [root@slave1 usr]# jps
    3792 JournalNode
    2933 QuorumPeerMain
    4013 Jps

    3.格式化HDFS上

    在master执行命令:

    cd  /usr/hadoop-2.7.4/bin

    hdfs namenode -format       #该命令会格式化hdfs

    格式化后会在根据/usr/hadoop-2.7.4/etc/hadoop/core-site.xml中hadoop.tmp.dir配置生成个文件,

    这里我配置的是/usr/hadoop-2.7.4/tmp,然后将新生成的文件/usr/hadoop-2.7.4/tmp

    4.格式化ZKFC(在master上执行即可)

    cd   /usr/hadoop-2.7.4

    ./bin/hdfs zkfc -formatZK

    5.启动HDFS(在master上执行)

    cd   /usr/hadoop-2.7.4

    ./sbin/start-dfs.sh

    6.启动YARN(分别在slave1,slave2上执行)

    cd   /usr/hadoop-2.7.4

    ./sbin/start-yarn.sh

    启动后检查进程:

    master

    [root@master hadoop-2.7.4]# jps
    3987 JournalNode
    30996 NameNode
    933 Jps
    2635 QuorumPeerMain
    31420 DFSZKFailoverController
    [root@master hadoop-2.7.4]# cd /usr/zookeeper-3.4.10/
    [root@master zookeeper-3.4.10]# cd bin
    [root@master bin]# ll

    slave1

    [root@slave1 hadoop-2.7.4]# jps
    3792 JournalNode
    2933 QuorumPeerMain
    30860 DFSZKFailoverController
    1021 Jps
    30687 DataNode
    [root@slave1 hadoop-2.7.4]# cd /usr/zookeeper-3.4.10/bin
    [root@slave1 bin]# ll

    slave2

    [root@slave2 hadoop-2.7.4]# jps
    2946 QuorumPeerMain
    65282 Jps
    30346 DataNode
    3775 JournalNode

    停止hadoop步骤:

    1.先在三台机器上分别停止zk服务

    zkServer.sh  stop

    2.在master上./sbin/stop-all.sh

    会停止master上的namenode和slave1、slave2上的datanode

  • 相关阅读:
    bash 学习笔记5
    zookeeper启动脚本修改
    java enmu 使用说明
    bash 学习笔记4
    zookeep集群搭建说明
    bash 学习笔记3
    集群配置问题
    hadoop hdfs 总结(1)
    bash 学习笔记6
    bash pitfall
  • 原文地址:https://www.cnblogs.com/ngy0217/p/10054447.html
Copyright © 2020-2023  润新知