美文网首页大数据&云计算大数据,机器学习,人工智能大数据
大数据平台hadoop搭建(单机、集群、基于zookeeper高

大数据平台hadoop搭建(单机、集群、基于zookeeper高

作者: enjoy_muming | 来源:发表于2019-01-18 22:56 被阅读6次

    hadoop环境搭建,初始如果只有一台可用server虚拟机可以只使用单机版,单台搭建hdfs环境。生产环境式hdfs环境搭建大都采用高可用机制,即基于zookeeper来实现集群高可用,下述将三种方式部署均做一介绍。
    机器环境:
    10.176.2.101 master
    10.176.2.103 zjx03
    10.176.2.105 zjx05

    hadoop集群准备工作:
    主机名设置(三台机器均修改好需要的主机名,根据上篇大数据平台环境搭建准备做过的不用再做)
    vim /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=zjx05

    需要进行切换用户生效:
    su - root

    也可百度下设置用户名和密码,另外需要将进行网络通信的主机名与ip加入/etc/hosts 。这里面配置的是其它主机的ip与主机名的映射,由此才可以通过主机名进行访问。

    vim /etc/hosts
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.176.2.101 master
    10.176.2.103 zjx03
    10.176.2.105 zjx05
    10.176.2.111 yjy11
    10.176.2.113 yjy13
    10.176.2.115 yjy15

    可以使用主机名进行测试:
    ssh master date

    用户名创建(另两台机器也创建,用户创建生产环境需要创建,此处该步骤省略,均使用root用户)
    useradd -u 8000 hadoop
    echo '123456' | passwd --stdin hadoop
    给hadoop用户增加sudo权限,增加内容(另外两台主机上都得配置)
    vim /etc/sudoers
    hadoop ALL=(ALL) ALL

    主机互信(集群环境必备)
    如果之前没有生成过私钥与秘钥,使用下一个步骤生成私钥与密钥,生成文件在家目录下,此处在目录/root/.ssh下
    ssh-keygen -t rsa
    cd /root/.ssh
    ls
    ls看到会有公钥与私钥文件:
    id_rsa id_rsa.pub (其中id_rsa是私钥,id_rsa.pub是公钥)
    cp id_rsa.pub authorized_keys (拷贝一个文件,注意此处是公钥id_rsa.pub文件)
    上述在另两台机器上同样进行生成生成authorized_keys。
    ssh 10.176.2.101 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh 10.176.2.103 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh 10.176.2.105 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    该操作类似于使用ssh-copy-id root命令操作
    出于安全性考虑,将这个授权key文件赋予600权限:
    chmod 600 ~/.ssh/authorized_keys
    将这个包含了所有互信机器认证key的认证文件,分发到各个机器中去
    scp ~/.ssh/authorized_keys 10.176.2.103:~/.ssh/
    scp ~/.ssh/authorized_keys 10.176.2.105:~/.ssh/
    验证互信,各节点执行下面命令,能不输入密码显示时间,配置成功
    ssh 10.176.2.101 date;ssh 10.176.2.103 date;ssh 10.176.2.105 date;
    检测成功,上述将authorized_keys分发复制到其它机器上也可以使用脚本(后续多台集群可以参考,此处可暂不用)
    vi bulkcp.sh

    #! /bin/bash
    for((i=101;i<=105;i=i+2))
    do
    scp -r $1 10.176.2.$i:$2
    echo scp -r $1 10.176.2.$i:$2
    done
    

    ./bulkcp.sh ~/.ssh ~/.ssh
    可参考:
    https://www.cnblogs.com/jyzhao/p/3781072.html
    防火墙关闭
    service iptables stop(关闭)
    chkconfig iptables off (永久关闭,使用永久关闭,三台机器均操作)
    service iptables status
    可参考:
    https://www.cnblogs.com/maybo/p/5250668.html
    重启网络服务
    service network restart

    jdk安装
    考虑安装hadoop(2.7版本),此处使用jdk8,经测兼容
    下载jdk1.8oracle官网,1.8.191版本,将tar.gz包jdk1.8.0_191.tar.gz上传至/usr/lib/java/目录下,此处目录任意,为了方便管理上传至此目录。
    解压
    tar -zxvf jdk1.8.0_191.tar.gz
    配置环境变量(环境变量配置,配置环境很常用,建议记住)
    vim /etc/profile

    export JAVA_HOME=/usr/java/jdk1.8.0_191
    export PATH=$PATH:$JAVA_HOME/bin
    

    刷新环境变量(记住该命令刷新环境变量)
    source /etc/profile
    将其拷贝至其它机器:
    scp -r /usr/lib/java/jdk1.8.0_191 zjx03:/usr/lib/java/
    scp -r /usr/lib/java/jdk1.8.0_191 zjx05:/usr/lib/java/
    拷贝至另两台机器后也要类似配置环境变量然后source /etc/profile

    mkdir -p /opt/softwares (用于后续存放zookeeper、hadoop等包)
    下载好的zookeepertar.gz包上传至该目录(上传至此目录不放家目录是由于开始本人linux虚拟机家目录下分区只有2g):
    zookeeper版本:zookeeper-3.4.5-cdh5.12.2
    tar -zxvf zookeeper-3.4.5-cdh5.12.2.tar.gz
    hadoop版本:hadoop-2.7.7
    tar -zxvf hadoop-2.7.7.tar.gz
    rm -rf zookeeper-3.4.5-cdh5.12.2.tar.gz
    rm -rf hadoop-2.7.7.tar.gz (删除tar.gz包节约空间)
    cd /opt/softwares/hadoop-2.7.7
    cd share/
    rm -rf doc/ (删除不必要的文件 一般是windows下的说明文件,节省空间)
    cd ..
    cd etc/
    cd hadoop/
    rm -rf *.cmd
    1.单机版hadoop环境搭建

    3.基于zookeeper的hadoop集群环境搭建
    先安装配置zookeeper
    cd /opt/softwares/zookeeper-3.4.5-cdh5.12.2/conf/
    cp zoo_sample.cfg zoo.cfg
    vim zoo.cfg

    # dataDir=/tmp/zookeeper
    #下述新增在注释的dataDir后面
    dataDir=/opt/softwares/zookeeper-3.4.5-cdh5.12.2/zkData
    # 下述server配置放在该文件最末
    server.1=master:2888:3888
    server.2=zjx03:2888:3888
    server.3=zjx05:2888:3888
    

    dataDir=/opt/softwares/zookeeper-3.4.5-cdh5.12.2/zkData 这个下面是myid文件,必须这样写,最后的添加2888端口是leader和flower之间通信的端口,3888端口是flower之间选举的端口。
    mkdir /opt/softwares/zookeeper-3.4.5-cdh5.12.2/zkData
    touch /opt/softwares/zookeeper-3.4.5-cdh5.12.2/zkData/myid
    echo 1 > /opt/softwares/zookeeper-3.4.5-cdh5.12.2/zkData/myid
    myid中的值和server.1,server.2,server.3中的对应应分别按照机器写入1,2,3),创建的文件夹zkData存储zookeeper产生的数据(类似后续hadoop配置中创建的tmp文件夹,此处也可以创建为tmp)
    将配置好的zookeeper拷贝到其它节点
    scp -r /opt/softwares/zookeeper-3.4.5-cdh5.12.2 zjx03:/opt/softwares/
    scp -r /opt/softwares/zookeeper-3.4.5-cdh5.12.2 zjx05:/opt/softwares/
    修改zjx03、zjx05机器节点上对应的myid
    zjx03:
    echo 2 > /opt/softwares/zookeeper-3.4.5-cdh5.12.2/zkData/myid
    zjx05:
    echo 3 > /opt/softwares/zookeeper-3.4.5-cdh5.12.2/zkData/myid
    启动zookeeper
    cd /opt/softwares/zookeeper-3.4.5-cdh5.12.2/bin
    ./zkServer.sh start
    ./zkServer.sh status
    后续停止zookeeper为./zkServer.sh stop
    由于安装于本机测试使用,每次需要停止集群(生产环境一般不会停止集群,只会对单个宕机的节点进行启动修复),此处将zookpeer配置环境变量,方便启动,同样对另两台进行同样配置
    vim /etc/profile

    export ZOOKEEPER_HOME=/opt/softwares/zookeeper-3.4.5-cdh5.12.2
    export PATH=$ZOOKEEPER_HOME/bin:$PATH
    

    source /etc/profile
    启动zookeeper
    zkServer.sh start
    查看zookeeper状态
    zkServer.sh status
    停止zookeeper
    zkServer.sh stop
    安装hadoop集群,配置hdfs(hadoop2.x所有的配置文件都在HADOOP_HOME/etc/hadoop目录下)
    配置环境变量
    vim /etc/profile

    export HADOOP_HOME=/opt/softwares/hadoop-2.7.7
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    source  /etc/profile
    

    安装配置
    cd /opt/softwares/hadoop-2.7.7/etc/hadoop
    vim hadoop-env.sh
    export JAVA_HOME=/usr/java/jdk1.8.0_191
    vim core-site.xml

    <configuration>
            <!--单节点部署如下配置 -->
            <!--
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://master:9000</value>
            </property>
            -->
            <!--指定hdfs的nameservice为ns1-->
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://ns1</value>
            </property>
    
            <!--指定hadoop临时目录-->
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/opt/softwares/hadoop-2.7.7/data/tmp</value>
            </property>
            <!--指定zookeeper地址-->
            <property>
                    <name>ha.zookeeper.quorum</name>
                    <value>master:2181,zjx03:2181,zjx05:2181</value>
            </property>
    </configuration>
    

    vim hdfs-site.xml

    <configuration>
        <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
        <property>
            <name>dfs.nameservices</name>
            <value>ns1</value>
        </property>
    
        <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
        <property>
            <name>dfs.ha.namenodes.ns1</name>
            <value>nn1,nn2</value>
        </property>
        
        <!-- nn1的RPC通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.ns1.nn1</name>
            <value>master:9000</value>
        </property>
    
        <!-- nn1的http通信地址,有个管理界面用于下载文件 -->
        <property>
            <name>dfs.namenode.http-address.ns1.nn1</name>
            <value>master:50070</value>
        </property>
    
        <!-- nn2的RPC通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.ns1.nn2</name>
            <value>zjx03:9000</value>
        </property>
        
        <!-- nn2的http通信地址 -->
        <property>
            <name>dfs.namenode.http-address.ns1.nn2</name>
            <value>zjx03:50070</value>
        </property>
    
        <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://master:8485;zjx03:8485;zjx05:8485/ns1</value>
        </property>
    
        <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/opt/softwares/hadoop-2.7.7/journal</value>
        </property>
        
        <!-- 开启NameNode失败自动切换 -->
        <property>
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
        <!-- 配置失败自动切换实现方式,通过ConfiguredFailoverProxyProvider这个类实现自动切换 -->
        <property>
            <name>dfs.client.failover.proxy.provider.ns1</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property> 
        
    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行,隔离机制sshfence的意思是:当一个namenode坏了,但还没有宕机,这样的话还处于active状态,为让另一个namenode正常成为active,另外一个namenode会向坏掉的 namenode发一个命令把它杀掉。shell(/bin/true)的意思是:如果active节点,完全宕机,那zkfc就不能汇报信息了,这样,standby很长时间收不到消息,当收不到消息时,standby就启动一个脚本,如果这个脚本返回true,就会变成active-->
        <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隔离机制超时时间(active坏了之后,standby如果没有在30秒之内未连接上,那么standby将变成active) -->
        <property>
            <name>dfs.ha.fencing.ssh.connect-timeout</name>
            <value>30000</value>
        </property>
        <property>
            <name>dfs.permissions</name>
            <value>false</value>
        </property>
            <!--下述两个配置为单机版hadoop配置-->
        <!--
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    
        <property>
            <name>dfs.permissions.enabled</name>
            <value>false</value>
        </property>
        -->
    
    </configuration>             
    

    vim mapred-site.xml

    <configuration>
        <!-- 告诉hadoop以后MR运行在yarn上 -->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    

    vim yarn-env.xml

    export JAVA_HOME=/usr/lib/java/jdk1.8.0_191
    

    vim yarn-site.xml

    <configuration>
    
    <!-- Site specific YARN configuration properties -->
        <!--RM高可靠 -->
        <property>
            <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
        </property>
        <!-- 指定RM的cluster id -->
        <property>
            <name>yarn.resourcemanager.cluster-id</name>
            <value>yrc</value>
        </property>
        <!-- 指定RM的名字 -->
        <property>
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>rm1,rm2</value>
        </property>
        <!-- 分别指定RM的地址 -->
        <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>master</value>
        </property>
        <property>
            <name>yarn.resourcemanager.hostname.rm2</name>
            <value>zjx03</value>
        </property>
        <!-- 指定zk集群地址 -->
        <property>
            <name>yarn.resourcemanager.zk-address</name>
            <value>master:2181,zjx03:2181,zjx05:2181</value>
        </property>
        
        <!--reduce获取数据时通过shuffle方式-->
        <!--
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        -->
    
        <!-- NodeManager获取数据的方式是shuffle-->
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
              <!-- 指定YARN的老大(resourcemanager)的地址 -->
            <!--
        <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>master</value>
            </property>
        -->
    </configuration>
    

    vim slaves (用于指定集群在网络中的主机节点有那些)

    master
    zjx03
    zjx05
    

    将配置好的hadoop拷贝到其他节点
    scp -r /opt/softwares/hadoop-2.7.7 zjx03:/opt/softwares/
    scp -r /opt/softwares/hadoop-2.7.7 zjx05:/opt/softwares/

    配置完成,启动,先启动zookeeper(三台机器均启动zookeeper,此时查看zookeeper状态会有leader与flower节点),再启动hdfs
    zkServer.sh start (三台均启动)
    hadoop-daemons.sh start journalnode (三台均启)
    格式化hdfs(只需要格式化一次,后续启动集群不用再格式化,不要格式化多次,多次格式化会造成namenodeId不一致,需要删除/opt/softwares/hadoop-2.7.7/data/tmp/下所有文件重新格式化才不报错)
    hdfs namenode -format
    首次格式化后/opt/softwares/hadoop-2.7.7/data/tmp下的文件复制到另外两个节点对应目录下
    scp -r /opt/softwares/hadoop-2.7.7/data/tmp zjx03:/opt/softwares/hadoop-2.7.7/data/
    scp -r /opt/softwares/hadoop-2.7.7/data/tmp zjx05:/opt/softwares/hadoop-2.7.7/data/
    格式化ZK(在master上执行,若不能启动结点再在其他机器上执行,作用是协助namenode进行高可靠,向zookeeper汇报)
    hdfs zkfc -formatZK (同样只需要格式化一次)
    启动zk
    hadoop-daemon.sh start zkfc
    启动HDFS(master上执行)
    start-dfs.sh
    启动YARN(zjx03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,分开了就要分别在不同的机器上启动)
    start-yarn.sh

    不足之处还望指正,谢谢!Q:1098077157

    相关文章

      网友评论

        本文标题:大数据平台hadoop搭建(单机、集群、基于zookeeper高

        本文链接:https://www.haomeiwen.com/subject/ignndqtx.html