离线电商数仓(十七)之用户行为数据仓库(三)高可用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>
原文地址:https://www.cnblogs.com/qiu-hua/p/13516964.html