• 离线电商数仓(十七)之用户行为数据仓库(三)高可用mysql (HA mysql,ubuntu)


    0 架构

    一 安装mysql

    分别在hadoop102 与hadoop103 安装mysql,安装过程见:

     大数据实战(二十三):电商数仓(十六)之用户行为数据采集(十六)Ubuntu mysql 安装   

    二 配置互为主从的MySQL

    1.到/usr/share/mysql下找mysql服务端配置的模版
    sudo cp my-default.cnf /etc/my.cnf

    2.编辑my.cnf
    在[mysqld]下配置:

    server_id = 103
    log-bin=mysql-bin
    binlog_format=mixed
    relay_log=mysql-relay

    另外一台,配置也一样,只需要修改servei_id

    3.重启mysql服务
    sudo /etc/init.d/mysql restart

    4.在主机上使用root@localhost登录,授权从机可以使用哪个用户登录

    在hadoop103上:

    1)给主机创建从机用户

    create user 'slave'@'%' identified by '123456';

    2)修改slave密码格式

    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

    3)授权从机可以使用哪个用户登录

    grant replication slave on *.* to 'slave'@'%';

    4) flush privileges;

    在hadoop102上:重复1)-- 4)

    5.查看主机binlog文件的最新位置
    show master status;

    6.在从机上执行以下语句

    change master to master_user='slave', master_password='123456',master_host='192.168.1.133',master_log_file='mysql-bin.000001',master_log_pos=1310;

    7.在从机上开启同步线程
    start slave

    8.查看同步线程的状态
    show slave status G

    将hadoop102 作为主机,hadoop103作为从机

    重复 5-8 步骤

    change master to master_user='slave', master_password='123456',master_host='192.168.1.133',master_log_file='mysql-bin.000001',master_log_pos=1362;

    三 在hadoop103和hadoop102安装keepalive软件

    在hadoop103上

    1. 安装libssl-dev: sudo apt-get install libssl-dev

    2. 安装libpopt-dev :  sudo apt-get install libpopt-dev 

    3. 安装keepalived:sudo apt-get install keepalived

    4 配置

    sudo vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    global_defs {
        router_id MySQL-ha
    }
    vrrp_instance VI_1 {
        state master #初始状态
        interface eth0 #网卡
        virtual_router_id 51 #虚拟路由id
        priority 100 #优先级
        advert_int 1 #Keepalived心跳间隔
        nopreempt #只在高优先级配置,原master恢复之后不重新上位
        authentication {
            auth_type PASS #认证相关
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.99 #虚拟ip,要与集群在同一网段上
        }
    } 
    
    #声明虚拟服务器
    virtual_server 192.168.1.99 3306 { #
        delay_loop 6
        persistence_timeout 30
        protocol TCP
        #声明真实服务器
        real_server 192.168.1.133 3306 { #本机IP
            notify_down /usr/lib/mysql/killkeepalived.sh #真实服务故障后调用脚本
            TCP_CHECK {
                connect_timeout 3 #超时时间
                nb_get_retry 1 #重试次数
                delay_before_retry 1 #重试时间间隔
            }
        }
    }

    5 编辑当前机器keepalived检测到mysql故障时的通知脚本

    sudo vim /usr/lib/mysql/killkeepalived.sh

    添加如下内容:
    #!/bin/bash
    #停止当前机器的keepalived进程
    sudo service keepalived stop

    之后 sudo chmod 777 /usr/lib/mysql/killkeepalived.sh

    6 开机自启动

    sudo update-rc.d keepalived default

    7 启动keepalived服务,只需要当前启动,以后都可以开机自启动

    sudo service keepalived start

    8.查看当前机器是否持有虚拟ip
    ip a

    在hadoop102上:

    重复1-8 步

    补充: mysql和keepalived服务都是开机自启动,keepalived服务一启动就需要向mysql的3306端口发送
                心跳,所以需要保证在开机自启动时,keepalived一定要在mysql启动之后再启动!

                如何查看一个自启动服务在开机时的启动顺序?
                所有自启动的开机服务,都会在/etc/init.d下生成一个启动脚本!
                    例如mysql的开机自启动脚本就在 /etc/init.d/mysql
                          chkconfig: 2345(启动级别,-代表全级别) 64(开机的启动的顺序,号小的先启动) 36(关机时服务停止的顺序)
                    例如keepalived的开机自启动脚本就在 /etc/init.d/keepalived
                          chkconfig: - 86 14

                          64<86

    四 安装hive

    1.配置
    保证环境变量中有JAVA_HOME,HADOOP_HOME,HIVE_HOME即可

    2.配置hive的元数据存储在mysql中
    ①拷贝Mysql的驱动到 $HIVE_HOME/lib中
    ②编辑hive-site.xml文件,配置元数据的存储位置

    虚拟ip

    ?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.1.99:3306/metastone?createDatabaseIfNotExist=true&amp;serverTimezone=GMT&amp;useSSL=false</value>
        <description>JDBC connect string for a JDBC metastore</description>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>username to use against metastore database</description>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
        <description>password to use against metastore database</description>
      </property>
      <property>
                  <name>hive.metastore.schema.verification</name>
                  <value>false</value>
          </property>
    
          <property>
                   <name>hive.execution.engine</name>
                   <value>tez</value>
          </property>
          <property>
                  <name>hive.cli.print.header</name>
                  <value>true</value>
          </property>
    
    <property>
            <name>hive.cli.print.current.db</name>
            <value>true</value>
    </property>


    ③metastore的库的编码必须为latin1

    七、安装Tez
    ①解压缩,将tez的tar包上传到hdfs
    ②在$HIVE_HOME/conf/中,编写tez-site.xml
    ③编写$HIVE_HOME/conf/hive-site.xml
    ④编写$HIVE_HOME/conf/hive-env.sh,让hive启动时,加载tez的jar包
    ⑤编写yarn-site.xml,并分发,关闭虚拟内存检查

    五 安装Tez

    Tez是一个Hive的运行引擎,性能优于MR。为什么优于MR呢?看下图。

     

    用Hive直接编写MR程序假设有四个有依赖关系的MR作业,上图中,绿色是Reduce Task,云状表示写屏蔽需要中间结果持久化写到HDFS。

    Tez可以将多个有依赖的作业转换为一个作业这样只需写一次HDFS,且中间节点较少,从而大大提升作业的计算性能

    ①解压缩,将tez的tar包上传到hdfs

    1)下载tez的依赖包:http://tez.apache.org

    2)拷贝apache-tez-0.9.1-bin.tar.gz到hadoop102/opt/software目录

    [atguigu@hadoop103 software]$ ls
    apache-tez-0.9.1-bin.tar.gz

    4)将apache-tez-0.9.1-bin.tar.gz上传到HDFS/tez目录下

    [atguigu@hadoop103 conf]$ hadoop fs -mkdir /tez
    [atguigu@hadoop103 conf]$ hadoop fs -put /opt/software/apache-tez-0.9.1-bin.tar.gz/ /tez

    3)解压缩apache-tez-0.9.1-bin.tar.gz

    [atguigu@hadoop103 software]$ tar -zxvf apache-tez-0.9.1-bin.tar.gz -C /opt/module

    4)修改名称

    [atguigu@hadoop103 module]$ mv apache-tez-0.9.1-bin/ tez-0.9.1

    ②在$HIVE_HOME/conf/中,编写tez-site.xml

    1)进入Hive的配置目录:/opt/module/hive/conf

    [atguigu@hadoop103 conf]$ pwd
    /opt/module/hive/conf

    2)在Hive/opt/module/hive/conf下面创建一个tez-site.xml文件

    [atguigu@hadoop103 conf]$ pwd
    /opt/module/hive/conf
    [atguigu@hadoop102 conf]$ vim tez-site.xml

    添加如下内容

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
        <name>tez.lib.uris</name>
        <value>${fs.defaultFS}/tez/apache-tez-0.9.1-bin.tar.gz</value>
    </property>
    <property>
         <name>tez.use.cluster.hadoop-libs</name>
         <value>true</value>
    </property>
    <property>
         <name>tez.history.logging.service.class</name>        <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
    </property>
    </configuration>

    2)在hive-env.sh文件中添加tez环境变量配置和依赖包环境变量配置

    编写$HIVE_HOME/conf/hive-env.sh,让hive启动时,加载tez的jar包

    [atguigu@hadoop102 conf]$ vim hive-env.sh

    添加如下配置

    # Set HADOOP_HOME to point to a specific hadoop install directory
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    
    # Hive Configuration Directory can be controlled by:
    export HIVE_CONF_DIR=/opt/module/hive/conf
    
    # Folder containing extra libraries required for hive compilation/execution can be controlled by:
    export TEZ_HOME=/opt/module/tez-0.9.1    #是你的tez的解压目录
    export TEZ_JARS=""
    for jar in `ls $TEZ_HOME |grep jar`; do
        export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
    done
    for jar in `ls $TEZ_HOME/lib`; do
        export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
    done
    
    export HIVE_AUX_JARS_PATH=/opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS
    (如果没有hadoop-lzo-0.4.20.jar 从该文件夹下任选一个jar包)

    ③编写$HIVE_HOME/conf/hive-site.xml

    关闭元数据检查

    [atguigu@hadoop103 conf]$ vim hive-site.xml

    增加如下配置:

    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>

    hive-site.xml文件中添加如下配置更改hive计算引擎

    <property>
        <name>hive.execution.engine</name>
        <value>tez</value>
    </property>

    ⑤编写yarn-site.xml,并分发,关闭虚拟内存检查

    <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    </property>
  • 相关阅读:
    2018ICPC青岛I Soldier Game (线段树)
    2018icpc青岛
    HDU2899 Strange fuction(模拟退火)
    CF833B The Bakery(线段树维护dp)
    CF685B Kay and Snowflake(重心性质)
    使用paramiko模块远程连接遇到paramiko.ssh_exception.NoValidConnectionsError的解决办法
    django中使用celery异步发送邮件
    Celey异步发送邮件时报django.core.exceptions.ImproperlyConfigured的解决办法
    ubantu中安装redis及遇到的问题
    Celery异步处理任务时遇到的错误ValueError: not enough values to unpack (expected 3, got 0)
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13516964.html
Copyright © 2020-2023  润新知