1.概述

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

  1. 环境准备
  2. 集成并配置 Hive 工具
  3. 使用 Java API 开发 Hive 代码

  下面开始进行环境准备。

2.环境准备

  Hive版本:《Hive-0.14

  HAProxy版本:《HAProxy-1.5.11

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

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

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

服务器 角色
NNA HAProxy1
NNS  HAProxy2
DN1 Hive1
DN2  Hive2
DN3 Hive3

  我们将下载好的 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 组件
[hadoop@nna]$ sudo yum -y install gcc* # 安装 SSL
[hadoop@nna]$ sudo yum -y install openssl-devel pcre-devel

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

[hadoop@nna]$ tar -zxvf haproxy-1.5..tar.gz && cd haproxy-1.5.

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

[hadoop@nna]$ make TARGET=linux2628 USE_PCRE= USE_OPENSSL= USE_ZLIB= USE_CRYPT_H= USE_LIBCRYPT=
[hadoop@nna]$ make install

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

[hadoop@nna]$./haproxy -vv

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

HA-Proxy version 1.5. //
Copyright - Willy Tarreau <w@1wt.eu> Build options :
TARGET = linux26
CPU = generic
CC = gcc
CFLAGS = -O2 -g -fno-strict-aliasing
OPTIONS = Default settings :
maxconn = , bufsize = , maxrewrite = , maxpollevents = Encrypted password support via crypt(): 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 libc's regex instead)
Built with transparent proxy support using: IP_TRANSPARENT IP_FREEBIND Available polling systems :
epoll : pref=, test result OK
poll : pref=, test result OK
select : pref=, test result OK
Total: ( usable), will use epoll.

3.2配置 HAProxy

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

global
daemon
nbproc defaults
mode tcp #mode { tcp|http|health },tcp 表示4层,http表示7层,health仅作为健康检查使用
retries #尝试2次失败则从集群摘除
option redispatch #如果失效则强制转换其他服务器
option abortonclose #连接数过大自动关闭
maxconn #最大连接数
timeout connect 1d #连接超时时间,重要,hive查询数据能返回结果的保证
timeout client 1d #同上
timeout server 1d #同上
timeout check #健康检查时间
log 127.0.0.1 local0 err #[err warning info debug] listen admin_stats #定义管理界面
bind 0.0.0.0: #管理界面访问IP和端口
mode http #管理界面所使用的协议
maxconn #最大连接数
stats refresh 30s #30秒自动刷新
stats uri / #访问url
stats realm Hive\ Haproxy #验证窗口提示
stats auth admin: #401验证用户名密码 listen hive #hive后端定义
bind 0.0.0.0: #ha作为proxy所绑定的IP和端口
mode tcp #以4层方式代理,重要
balance leastconn #调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分配
maxconn #最大连接数
server hive_1 10.211.55.18: check inter rise fall
server hive_2 10.211.55.15: check inter rise fall
server hive_3 10.211.55.17: check inter rise fall
#释义:server 主机代名(你自己能看懂就行),IP:端口 每180000毫秒检查一次。也就是三分钟。
#hive每有10000端口的请求就会创建一个log,设置短了,/tmp下面会有无数个log文件,删不完。

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

3.3搭建 Hive

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

export HIVE_HOME=/home/hadoop/hive-0.14.-bin
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin:$HIVE_HOME/bin

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

  • hive-env.sh

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/home/hadoop/hadoop-2.6.
  • hive-log4j.properties

# 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
  • hive-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.execute.setugi</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<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 的第三方服务,命令如下所示:

[hadoop@dn1]$hive --service hiveserver &

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

  • 启动代理服务 haproxy

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

[hadoop@nna haproxy-1.5.]$ ./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'
  • 解决办法:

  这是因为mysql数据库用户root 的权限不足,赋予权限

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
stu
running:describe stu
id string
name string
sex string

5.总结

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

6.结束语

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

高可用Hadoop平台-集成Hive HAProxy的更多相关文章

  1. 高可用Hadoop平台-实战

    1.概述 今天继续<高可用的Hadoop平台>系列,今天开始进行小规模的实战下,前面的准备工作完成后,基本用于统计数据的平台都拥有了,关于导出统计结果的文章留到后面赘述.今天要和大家分享的 ...

  2. 高可用Hadoop平台-Hue In Hadoop

    1.概述 前面一篇博客<高可用Hadoop平台-Ganglia安装部署>,为大家介绍了Ganglia在Hadoop中的集成,今天为大家介绍另一款工具——Hue,该工具功能比较丰富,下面是今 ...

  3. 高可用Hadoop平台-Oozie工作流之Hadoop调度

    1.概述 在<高可用Hadoop平台-Oozie工作流>一篇中,给大家分享了如何去单一的集成Oozie这样一个插件.今天为大家介绍如何去使用Oozie创建相关工作流运行与Hadoop上,已 ...

  4. 高可用Hadoop平台-实战尾声篇

    1.概述 今天这篇博客就是<高可用Hadoop平台>的尾声篇了,从搭建安装到入门运行 Hadoop 版的 HelloWorld(WordCount 可以称的上是 Hadoop 版的 Hel ...

  5. 高可用Hadoop平台-探索

    1.概述 上篇<高可用Hadoop平台-启航>博客已经让我们初步了解了Hadoop平台:接下来,我们对Hadoop做进一步的探索,一步一步的揭开Hadoop的神秘面纱.下面,我们开始赘述今 ...

  6. 高可用Hadoop平台-启航

    1.概述 在上篇博客中,我们搭建了<配置高可用Hadoop平台>,接下来我们就可以驾着Hadoop这艘巨轮在大数据的海洋中遨游了.工欲善其事,必先利其器.是的,没错:我们开发需要有开发工具 ...

  7. 高可用Hadoop平台-Flume NG实战图解篇

    1.概述 今天补充一篇关于Flume的博客,前面在讲解高可用的Hadoop平台的时候遗漏了这篇,本篇博客为大家讲述以下内容: Flume NG简述 单点Flume NG搭建.运行 高可用Flume N ...

  8. 高可用Hadoop平台-Ganglia安装部署

    1.概述 最近,有朋友私密我,Hadoop有什么好的监控工具,其实,Hadoop的监控工具还是蛮多的.今天给大家分享一个老牌监控工具Ganglia,这个在企业用的也算是比较多的,Hadoop对它的兼容 ...

  9. 高可用Hadoop平台-HBase集群搭建

    1.概述 今天补充一篇HBase集群的搭建,这个是高可用系列遗漏的一篇博客,今天抽时间补上,今天给大家介绍的主要内容目录如下所示: 基础软件的准备 HBase介绍 HBase集群搭建 单点问题验证 截 ...

随机推荐

  1. loadrunner实战篇 - 客户关系管理系统性能测试

    系统介绍                                                             图1(客户关系管理系统模块关系图) 需求分析 一.性能指标 性能指标分 ...

  2. excel函数累加求和与累计百分比应用

    申明:为了方便记忆,该笔记内容纯属拷贝,如与原创雷同,请加我为火山小视频好友:345270311,必将献上好段子已表感谢~ 正传 以下表为例,求公里数的累加求和以及累计百分比. 在D2单元格输入=su ...

  3. hide handkerchief

    Problem Description The Children’s Day has passed for some days .Has you remembered something happen ...

  4. PAT甲级 1122. Hamiltonian Cycle (25)

    1122. Hamiltonian Cycle (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The ...

  5. SPRING框架中ModelAndView、Model、ModelMap区别及详细分析

    转载内容:http://www.cnblogs.com/google4y/p/3421017.html 1. Model Model 是一个接口, 其实现类为ExtendedModelMap,继承了M ...

  6. POJ 1745 线性和差取余判断

    POJ 1745 线性和差取余判断 题目大意:每个数都必须取到,相加或相减去,问所有的方案最后的得数中有没有一个方案可以整除k 这个题目的难点在于dp数组的安排上面 其实也就是手动模仿了一下 比如 一 ...

  7. 冲刺博客NO.5

    今天做了什么:布局UI和效果图,学会了监听事件并销毁监听接口 SMSSDK.unregisterAllEventHandler(); 今天做的东西不多,没有遇到什么苦难

  8. 转:mysql触发器

    原文地址:http://www.cnblogs.com/nicholas_f/archive/2009/09/22/1572050.html CREATE TRIGGER <触发器名称>  ...

  9. 1.mybatis入门

    一:创建表 CREATE TABLE `country` ( `id` ) NOT NULL AUTO_INCREMENT, `countryname` varchar() DEFAULT NULL, ...

  10. 【VB.NET】利用 ZXing.Net 生成二维码(支持自定义LOGO)

    有任何疑问请去我的新博客提出 https://blog.clso.fun/posts/2019-03-03/vb-net-zxing-net-qr-maker.html ZXing .NET 的项目主 ...