美文网首页
大数据Hadoop2.7+zookeeper+Hbase+Hiv

大数据Hadoop2.7+zookeeper+Hbase+Hiv

作者: SUSUR_28f6 | 来源:发表于2019-10-04 18:33 被阅读0次

    最近在新电脑上配置大数据开发环境,踩了不少坑,更具网上的一些方法整理了一套比较简单的hadoop+zookeeper+hbase+hive环境的搭建(由于虚拟机环境均以root用户操作);

    • 除了zookeeper的myid,其他设置所有虚拟机上都一样,所以可以一台虚拟机全部安装配置完以后直接完全克隆几个,再配置单独的静态ip,hostname和myid即可;
    • 当然最稳妥的是配置完ssh后直接克隆,每配置完一个工具以后scp到各个节点下,每装完一个工具后都测试运行一下,确保无误;
    • 要养成每次成功安装完一个工具后都快照的习惯,无数突发情况带来的教训啊;

    所需环境和工具

    • VMware虚拟机
    • CentOS7并配置好各个节点的静态ip(先装一台CentOS,最后再克隆多台
    • JDK1.8
    • mysql5.7
    • Xshell或FinalShell

    HostName及HOST配置

    由于分布式环境需要连接各个节点的linux系统,为了方便我们需要配置了HostName主机名和hosts文件;

    1. 设置hostname

    hostnamectl set-hostname susur1 #susur1为1号节点名
    

    2. 查看hostname

    [root@susur1 ~]# hostname
    susur1
    

    显示出你配置的hostname就算成功了;

    3. 配置hosts文件(地址/etc/hosts)

    vim /etc/hosts
    

    将这个追加的hosts文件最下面(格式为:节点ip + 节点hostname);

    192.168.160.129 susur1
    192.168.160.130 susur2
    192.168.160.131 susur3
    

    你也可以将这段hosts代码加到主机的hosts文件,这样就可以方便的通过hostname访问虚拟机上的linux系统;

    ======MacOS的地址和Linux的一样====,Windows的地址为C:\Windows\System32\drivers\etc;==

    配置成功以后测试一些可不可以ping通;

    hekaideMacBook-Pro:~ hekai$ ping susur1
    PING susur1 (192.168.160.129): 56 data bytes
    64 bytes from 192.168.160.129: icmp_seq=0 ttl=64 time=0.260 ms
    64 bytes from 192.168.160.129: icmp_seq=1 ttl=64 time=0.222 ms
    64 bytes from 192.168.160.129: icmp_seq=2 ttl=64 time=0.182 ms
    

    配置ssh免密钥登陆

    为了保证分布式环境下各个节点直接可以无障碍相互访问,我们需要配置ssh密钥保证各个节点可以相互免密钥登陆;

    1. 查看ssh是否启动

    systemctl status sshd.service
    

    如果报命令不存在的话需要安装ssh

    2. yum安装ssh(ubuntu是apt)

    yum install -y openssl openssh-server
    

    3. 修改配置文件

    ssh连接时如果报权限错误,我们需要修改sshd配置文件,打开权限;

    # 输入指令
    vim /etc/ssh/sshd_config
    # 将 PermitRootLogin, RSAAuthentication, PubkeyAuthentication 设置为 yes
    

    4.启动ssh服务

    #开启ssh服务
    systemctl start sshd.service
    #设置开机运行
    systemctl enable sshd.service
    #重启ssh服务
    systemctl restart sshd.service
    

    5.生成ssh公钥私钥

    ####一路回车即可
    [root@susur1 ~]]#  ssh-keygen -t rsa
    

    6.设置.ssh文件访问权限

    #在root目录下
    cd ~
    chmod 700 .ssh
    chmod 600 .ssh/*
    ls -la .ssh
    

    7.拷贝公钥

    在生成完公钥和私钥之后.ssh文件目录下为:

    -rw-------. 1 root root 1679 Sep 24 20:15 id_rsa
    -rw-r--r--. 1 root root  393 Sep 24 20:15 id_rsa.pub
    -rw-r--r--. 1 root root  552 Sep 25 11:33 known_hosts
    

    我们将id_rsa.pub复制为authorized_keys

    cp id_rsa.pub authorized_keys
    
    #这里解释一下:在别的教程中的方式是将公钥文件复制到别的节点下的.ssh文件中的,这样确实是规范的;
    #ssh免密钥登陆的原理是通过私钥验证对应的公钥完成免密钥登陆;
    #由于我们最后再直接克隆系统所有信息都是一样,所以只需要在一台机器上配置即可,无需传输公钥文件;
    

    8.验证ssh免密钥(克隆系统以后验证)

    ssh susur2 #hostname
    

    ZooKeeper安装及配置

    • 首先从官网上下载合适的zookeeper版本 我下载的是3.4.14(3.5的版本我之前测试的时候不稳定)

    <html>
    https://www.apache.org/dyn/closer.cgi/zookeeper/
    </html>

    将下载的tar包上传到Linux系统
    • 解压tar包
    mkdir /usr/local/zookeeper #新建zookeeper目录
    
    tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/zookeeper/ #解压到zookeeper目录
    
    • 进入到conf目录下配置配置文件
    cd /usr/local/zookeeper/zookeeper-3.4.14/conf
    cp zoo_sample.cfg zoo.cfg#默认是没有zoo.cfg的所有要将zoo_sample.cfg改名
    vim zoo.cfg#配置zoo.cfg
    
      • 需要修改的部分
    #修改data文件目录
    dataDir=/usr/local/zookeeper/zookeeper-3.4.14/data
    
    #zookeeper集群的节点,添加到末尾
    server.1=susur1:2888:3888
    server.2=susur2:2888:3888
    server.3=susur3:2888:3888
    
    • 创建data文件目录
    mkdir -p /usr/local/zookeeper/zookeeper-3.4.14/data
    
    • 设置当前zookeeper的权值(1号节点为1,2号节点为2,3号节点为3...)
    echo 1 > /usr/local/zookeeper/zookeeper-3.4.14/data/myid
    
    • 配置环境变量
    vim /etc/profile
    
    #zookeeper
    export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.14
    export PATH=$ZOOKEEPER_HOME/bin:$PATH
    
    • 启动zookeeper集群(每个节点都要启动)
    zkServer.sh start
    zkServer.sh status
    zkServer.sh stop
    

    搭建hadooper*

    http://hadoop.apache.org/releases.html 同上官网下载tar包(下载bin版本)我用的是版本是2.7.7

    • 上传Linux 解压
    mkdir /usr/local/hadoop
    
    tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/hadoop/
    
    • 修改配置文件(hadoop的配置文件所有节点都一样即可,最后克隆完即可运行)
    cd /usr/local/hadoop/hadoop-2.7.7/etc/hadoop
    
    • 配置JAVA_HOME
      • hadoop-env.sh
      • mapred-env.sh
      • yarn-env.sh

    将这个三个文件中的JAMA_HOME路径改为系统上的jdk路径

    export JAVA_HOME=/usr/local/java/jdk1.8.0_221/
    
    • core-site.xml
      <property>
      <name>fs.defaultFS</name>
      <value>hdfs://susur</value>
      </property>
      <property>
      <name>ha.zookeeper.quorum</name>
      <value>susur1:2181,susur2:2181,susur3:2181</value>
      </property>
    <!-- 指定hadoop运行时产生文件的存储目录 -->
      <property>
      <name>hadoop.tmp.dir</name>
      <value>/usr/local/hadoop/hadoop-2.7.7/tmp</value>
      </property>
    
    • hdfs-site.xml
     <property>
            <name>dfs.nameservices</name>
            <value>susur</value>
        </property>
        <property>
            <name>dfs.ha.namenodes.susur</name>
            <value>nn1,nn2</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.susur.nn1</name>
            <value>susur1:8020</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.susur.nn2</name>
            <value>susur2:8020</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.susur.nn1</name>
            <value>susur1:50070</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.susur.nn2</name>
            <value>susur2:50070</value>
        </property>
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://susur1:8485;susur2:8485;susur3:8485/susur</value>
        </property>
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/var/tmp/hadoop/ha/jn</value>
        </property>
        <property>
            <name>dfs.client.failover.proxy.provider.susur</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>sshfence</value>
            <value>shell(true)</value>
        </property>
        <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>
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
       
       <!--访问免验证-->
       <property>
            <name>dfs.permissions</name>
            <value>false</value>
            <description>
                If "true", enable permission checking in HDFS.
                If "false", permission checking is turned off,
                but all other behavior is unchanged.
                Switching from one parameter value to the other does not change the mode,
                owner or group of files or directories.
            </description>
        </property>
    
    • mapred-site.xml
    <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
    </property>
    
    <property>
       <name>mapreduce.jobhistory.address</name>
       <value>susur1:10020</value>
    </property>
    <property>
       <name>mapreduce.jobhistory.webapp.address</name>
       <value>susur1:19888</value>
    </property>
    
    • yarn-sit.xml
    
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      
      <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
      </property>
      <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>mr_susur</value>
      </property>
      <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
      </property>
      <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>susur3</value>
      </property>
      <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>susur1</value>
      </property>
      <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>susur1:2181,susur2:2181,susur3:2181</value>
      </property>
    
    • 修改slaves(hadoop3.0以上是workers)
    susur1
    susur2
    susur3
    
    • 配置环境变量
      • vim /etc/profile
    #hadoope
    export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
    export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    
    • 启动hadoop(启动前所有节点都需先启动zookeeper,status确认状态)
      • [susur123]启动JournalNode
        • [susur123] hadoop-daemon.sh start journalnode
      • 格式化NameNode[a,s]
        • [susur1] hdfs namenode -format
        • [susur1] hadoop-daemon.sh start namenode
        • [susur2] hdfs namenode -bootstrapStandby
      • 格式化ZKFC
        • [susur1] hdfs zkfc -formatZK
      • 启动集群(只需1号节点启动)
    start-dfs.sh
    
    • JPS查看状态
    #如主节点上的jps如下
    [root@susur1 ~]# jps
    49536 JournalNode
    45713 QuorumPeerMain
    50130 NodeManager
    49253 DataNode
    50469 Jps
    49080 NameNode
    49944 ResourceManager
    49773 DFSZKFailoverController
    

    访问网页 susur1:50070(要访问主节点,status查看zookeeper的主节点是哪个)

    Hbase安装与配置

    https://hbase.apache.org/downloads.html
    官网下载合适的版本,我下的是1.3.5,上传到Linux 解压tar包(下载bin包);

    mkdir /usr/local/hbase
    
    tar -zxvf hbase-1.3.5-bin.tar.gz -C /usr/local/hbase
    
    • 修改配置文件

      • cd /usr/local/hbase/hbase-1.3.5/conf/
      • 配置 RegionServer
      • vim regionservers
        
        susur1
        susur2
        susur3
        
      • 配置备用节点 backup-masters(没有就新建)
      • vim backup-masters
        
        susur1
        
      • 配置Hbase核心配置文件
      • vim hbase-site.xml
        
        <property>
        <name>hbase.rootdir</name>
        <value>hdfs://susur/hbase</value>
        </property>
        <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
        </property>
        <property>
        <name>hbase.zookeeper.quorum</name>
        <value>susur1:2181,susur2:2181,susur3:2181</value>
        </property>
        
      • 拷贝hbfs-site.xml到hbase的conf目录下
      • cp /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/hdfs-site.xml /usr/local/hbase/hbase-1.3.5/conf
        
      • 配置环境变量
      • vim /etc/profile
        
        #hbase
        export HBASE_HOME=/usr/local/hbase/hbase-1.3.5
        export PATH=$HBASE_HOME/bin:$PATH
        
      • 克隆完后启动
    • 启动集群

    zkServer.sh start
    start-all.sh
    [3] yarn-daemon.sh start resourcemanager
    

    -启动HBase

    [1] start-hbase.sh
    
    • 访问网址 susur1:16010

    安装配置Hive

    • mysql新建hive数据库
    #由于hive是基于mysql存储的所以需要一个对应的库
    
    create database hive;
    
    mkdir /usr/local/hive
    
    tar -zxvf apache-hive-2.3.6-bin.tar.gz -C /usr/local/hive
    
    • 修改配置文件hive-site.xml
    cp hive-default.xml.template hive-site.xml
    vim hive-site.xml
    
    <!--设置库名-->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive</value>
    </property>
    <!--配置RDBMS本地存储-->
    <property>
    <name>hive.metastore.local</name>
    <value>true</value>
    </property>
    <!--配置mysql连接,如果没有hive库则新建-->
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    </property>
    
    <!--配置jdbc驱动-->
    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    </property>
    <!--mysql用户名root-->
    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    </property>
    <!--配置mysql密码-->
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
    </property>
    
    cp /usr/local/hive/apache-hive-2.3.6-bin/lib/jine-2.12.jar /usr/local/hadoop/hadoop-2.7.7/share/hadoop/yarn/lib
    
    • 配置环境变量
    vim /etc/profile
    
    #hive
    export HIVE_HOME=/usr/local/hive/apache-hive-2.3.6-bin
    export PATH=$HIVE_HOME/bin:$PATH
    
    
    • 启动Hive
    hive
    

    注意事项以及一些可能会遇到的问题

    • 这套分布式环境是基于zookeeper做节点的管理的,hbase和hive都是为依赖与hadoop环境的,所以启动顺序为zookeeper -> hadoop -> hbase -> hive
    • 环境变量配置完记得 source /etc/profile !!!!!!!
    • 如果在hql处理中特别慢,优先适当增加主节点分配的内存和cpu核心;
    • 如果遇到zookeeper启动完status显示not running 可能是防火墙问题
    #关闭防火墙
    systemctl stop firewalld.service
    #禁止开机启动
    systemctl disable firewalld.service 
    
    • ssh登陆默认是同用户名,所以要保证每台虚拟机上的用户名相同,如果主机ssh虚拟机请设置登陆用户
    • 格式化namenode报错,先检查各个节点上的JournalNode是否启动,然后删除生成的数据和日志文件,我这里设置的是Hadoop目录下的tmp目录,吧tmp删除后重新hdfs namenode -format
    • mysql设置密码报密码太简单,请修改密码限制
    mysql> set global validate_password_policy=0;
    mysql> set global validate_password_length=1;
    
    • mysql连接时报错,设置mysql权限
    grant all privileges on *.* to 'root'@'%' identified by '123456';
    

    如果主机navicat连接虚拟机上的mysql,设置ssh连接

    • eclipse(idea)连接hadoop时报权限错误,或者没有找着文件目录,都是权限问题修改hdfs-site.xml文件,关闭权限验证,这里我已经给你们关了

        <!--访问免验证-->
         <property>
              <name>dfs.permissions</name>
              <value>false</value>
              <description>
                  If "true", enable permission checking in HDFS.
                  If "false", permission checking is turned off,
                  but all other behavior is unchanged.
                  Switching from one parameter value to the other does not change the mode,
                  owner or group of files or directories.
              </description>
          </property>
      
      //Java代码中设置hadoop登陆用户"root"
      Properties properties = System.getProperties();
      properties.setProperty("HADOOP_USER_NAME", "root");
      

    相关文章

      网友评论

          本文标题:大数据Hadoop2.7+zookeeper+Hbase+Hiv

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