zl程序教程

您现在的位置是:首页 >  后端

当前栏目

高可用Hadoop平台-集成Hive HAProxy详解大数据

集成hadoop平台数据 详解 可用 hive haproxy
2023-06-13 09:20:27 时间
1.概述

这篇博客是接着《高可用Hadoop平台》系列讲,本篇博客是为后面用 Hive 来做数据统计做准备的,介绍如何在 Hadoop HA 平台下集成高可用的 Hive 工具,下面我打算分以下流程来赘述:

集成并配置 Hive 工具 使用 Java API 开发 Hive 代码

下面开始进行环境准备。

2.环境准备

Hive版本:《Hive-0.14》

HAProxy版本:《HAProxy-1.5.11》

注:前提是 Hadoop 的集群已经搭建完成,若还没用完成集群搭建,可以参考《配置高可用的Hadoop平台》

需要安装的工具,我们已经准备好了,接下来给出 Hive 搭建的结构图,如下图所示:

高可用Hadoop平台-集成Hive HAProxy详解大数据

这里由于集群资源有限,所以将 HAProxy1 配置在 NNA 节点,HAProxy2 配置在 NNS 节点,Hive1,Hive2,Hive3分别配置在 DN1,DN2,DN3 节点。如下表所示:


我们将下载好的 Hive 安装包和 HAProxy 安装包用 scp 命令,参考上表格分别分发到对应的节点。

注:hive 指定的 HDFS 必须是相同的,否则,统计的数据源不同,那么统计是没有意义的。

3.集成并配置 Hive 工具

HAProxy 是一款提供高可用性、负载均衡以及基于 TCP(第四层)和 HTTP(第七层)应用的代理软件,HAProxy 是完全免费的、借助 HAProxy 可以快速并且可靠的提供基于TCP 和 HTTP 应用的代理解决方案。HAProxy 在这里的作用起一个代理功能,让 Hive Server 负载均衡;这里我们分别在 NNA 和 NNS 节点都搭建 HAProxy ,是为了防止一个 HAProxy 代理容易引发单点问题。考虑到高可用性,这里我们多用一个节点来承担类似于 HDFS HA 方案中的 standby 角色。

3.1系统环境

首先,在 NNA 和 NNS 节点搭建 HAProxy 工具,这里我们需要先检查下系统环境,因为 HAProxy 工具包需要编译安装。这里我们安装必要的依赖组建,命令如下所示:

# 安装 gcc 组件 

[[email protected]]$ sudo yum -y install gcc* 

# 安装 SSL 

[[email protected]]$ sudo yum -y install openssl-devel pcre-devel

然后,解压并进入到 haproxy 目录文件中,命令如下:

[[email protected]]$ tar -zxvf haproxy-1.5.11.tar.gz cd haproxy-1.5.11

接着,我们开始编译安装 haproxy 组件,命令如下所示:

[[email protected]]$ make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1 

[[email protected]]$ make install

安装完成后,我们输入如下命令,看是否安装成功。

[[email protected]]$./haproxy -vv

若现实如下信息,即表示安装成功。内容如下:

HA-Proxy version 1.5.11 2015/01/31 

Copyright 2000-2015 Willy Tarreau w@1wt.eu 

Build options : 

 TARGET = linux26 

 CPU = generic 

 CC = gcc 

 CFLAGS = -O2 -g -fno-strict-aliasing 

 OPTIONS = 

Default settings : 

 maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200 

Encrypted password support via crypt(3): yes 

Built without zlib support (USE_ZLIB not set) 

Compression algorithms supported : identity 

Built without OpenSSL support (USE_OPENSSL not set) 

Built without PCRE support (using libcs regex instead) 

Built with transparent proxy support using: IP_TRANSPARENT IP_FREEBIND 

Available polling systems : 

 epoll : pref=300, test result OK 

 poll : pref=200, test result OK 

 select : pref=150, test result OK 

Total: 3 (3 usable), will use epoll.
3.2配置 HAProxy 

在 haproxy 目录下,我们新建一个 config.cfg 的配置文件,填写如下内容:

global 

 daemon 

 nbproc 1 

defaults 

 mode tcp #mode { tcp|http|health },tcp 表示4层,http表示7层,health仅作为健康检查使用 

 retries 2 #尝试2次失败则从集群摘除 

 option redispatch #如果失效则强制转换其他服务器 

 option abortonclose #连接数过大自动关闭 

 maxconn 1024 #最大连接数 

 timeout connect 1d #连接超时时间,重要,hive查询数据能返回结果的保证 

 timeout client 1d #同上 

 timeout server 1d #同上 

 timeout check 2000 #健康检查时间 

 log 127.0.0.1 local0 err #[err warning info debug] 

listen admin_stats #定义管理界面 

 bind 0.0.0.0:1090 #管理界面访问IP和端口 

 mode http #管理界面所使用的协议 

 maxconn 10 #最大连接数 

 stats refresh 30s #30秒自动刷新 

 stats uri / #访问url 

 stats realm Hive/ Haproxy #验证窗口提示 

 stats auth admin:123456 #401验证用户名密码 

listen hive #hive后端定义 

 bind 0.0.0.0:10001 #ha作为proxy所绑定的IP和端口 

 mode tcp #以4层方式代理,重要 

 balance leastconn #调度算法 leastconn 最少连接数分配,或者 roundrobin,轮询分配 

 maxconn 1024 #最大连接数 

 server hive_1 10.211.55.18:10000 check inter 180000 rise 1 fall 2 

 server hive_2 10.211.55.15:10000 check inter 180000 rise 1 fall 2 

 server hive_3 10.211.55.17:10000 check inter 180000 rise 1 fall 2 

 #释义:server 主机代名(你自己能看懂就行),IP:端口 每180000毫秒检查一次。也就是三分钟。 

 #hive每有10000端口的请求就会创建一个log,设置短了,/tmp下面会有无数个log文件,删不完。

接着,我们在 NNS 也做相同的操作,搭建 HAProxy。

3.3搭建 Hive

在 DN1 节点上,我们先配置 Hive 的环境变量,配置内容如下:

export HIVE_HOME=/home/hadoop/hive-0.14.0-bin 

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin:$HIVE_HOME/bin

接着,我们配置3个重要文件。


# Set HADOOP_HOME to point to a specific hadoop install directory 

HADOOP_HOME=/home/hadoop/hadoop-2.6.0

# Define some default values that can be overridden by system properties 

hive.log.threshold=ALL 

hive.root.logger=INFO,DRFA 

hive.log.dir=/home/hadoop/logs/hive 

hive.log.file=hive.log

value /home/hive/warehouse /value description location of default database for the warehouse /description /property !-- metadata database connection configuration -- property name javax.jdo.option.ConnectionURL /name value jdbc:mysql://10.211.55.26:3306/hive?useUnicode=true amp;characterEncoding=UTF-8 amp;createDatabaseIfNotExist=true /value description JDBC connect string for a JDBC metastore /description /property property name javax.jdo.option.ConnectionDriverName /name value com.mysql.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 root /value description password to use against metastore database /description /property /configuration

注:由于我这里配置的 Hive 元数据仓库地址是 Mysql ,所以我们在启动 Hive 之前,得将 Mysql 的驱动包放到 Hive 目录的 lib 文件夹下。

  然后,在 DN2 和 DN3 节点做相同的操作。

3.4启动服务 启动 hive 服务

这里,我们先启动 Hive 的第三方服务,命令如下所示:

[[email protected]]$hive --service hiveserver 

注:DN1,DN2 和 DN3 节点都需要启动该服务。

启动代理服务 haproxy

在 hive 的服务成功启动后,我们在到 NNA 和 NNS 节点分别启动 HAProxy 代理服务,命令如下所示:

[[email protected] haproxy-1.5.11]$ ./haproxy -f config.cfg

到这里,如果没有出错,整个高可用的 Hive 工具就搭建完成了。

3.5异常

若是我们在搭建的过程中遇到异常怎么办?首先,我们来逐个排查,我们先启动 hive 服务,若是在启动中报错,或是一直卡在启动中,我可以到 hive 的启动日志中查看具体原因,根据抛出的异常,我们做对应的处理就可以了;其次,在启动 haproxy 服务时,若是出现异常,我们根据它报错的信息,做对应的处理即可。要冷静,莫慌!

常见异常:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user root@dn1 to database metastore

grant all on metastore.* to root@dn1 identified by root; 

flush privileges;
4.Java API使用

搭建好平台后,我们得验证平台是否可用,下面,我们用 Java API 来验证其 HA 是否可用。下面是写得一个测试代码,用来测试平台是否可用,代码表达的意图是:创建表,然后显示表结构。代码如下所示:

/** 

package cn.hdfs.hive.example; 

import java.sql.Connection; 

import java.sql.DriverManager; 

import java.sql.ResultSet; 

import java.sql.Statement; 

 * @author dengjie 

 * @date 2015年3月26日 

 * @description 提供一个JDBC访问hive的原型,若用在实际业务中,可拓展该类。 

public class HiveVisit { 

 static { 

 // 注册jdbc驱动 

 try { 

 Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); 

 } catch (ClassNotFoundException e) { 

 e.printStackTrace(); 

 // 设置 NNA 和 NNS 的连接信息 

 private static String[] url = new String[] { "jdbc:hive://10.211.55.29:10001/default", "jdbc:hive://10.211.55.26:10001/default" }; 

 public static void main(String[] args) throws Exception { 

 System.setProperty("hadoop.home.dir", "/Users/dengjie/HDFS/hadoop-2.5.1"); 

 Connection conn = null; 

 for (int i = 0; i url.length; i++) { 

 try { 

 // 创建连接 

 conn = DriverManager.getConnection(url[i], "", ""); 

 if (!conn.isClosed()) {// 连接成功,即返回连接对象 

 break; 

 } catch (Exception ex) { 

 ex.printStackTrace(); 

 Statement st = conn.createStatement(); 

 String tableName = "stu"; 

 // 删除表 

 st.executeQuery("drop table " + tableName); 

 // 创建表 

 ResultSet rs = st.executeQuery("create table " + tableName + "(" + "id string," + "name string," + "sex string" + ")" + "row format delimited " + "fields terminated by , " + "stored as textfile"); 

 // 显示所有的表 

 String sql = "show tables"; 

 System.out.println("running:" + sql); 

 rs = st.executeQuery(sql); 

 if (rs.next()) { 

 System.out.println(rs.getString(1)); 

 // 得到表信息 

 sql = "describe " + tableName; 

 System.out.println("running:" + sql); 

 rs = st.executeQuery(sql); 

 while (rs.next()) { 

 System.out.println(rs.getString(1) + "/t" + rs.getString(2)); 

 // 关闭资源 

 rs.close(); 

 st.close(); 

 conn.close(); 

}

结果展示,内容如下:

running:show tables 

running:describe stu 

id string 

name string 

sex string 

高可用Hadoop平台-集成Hive HAProxy详解大数据

在启动 haproxy 代理服务之前,切记 hive 服务是否正常启动。 在启动 hive 服务是,确保 hadoop 集群运行正常。 6.结束语

这篇博客就和大家分享到这里,若在研究的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/9950.html

分布式文件系统,分布式数据库区块链并行处理(MPP)数据库,数据挖掘开源大数据平台数据中台数据分析数据开发数据治理数据湖数据采集