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&serverTimezone=GMT&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>