转-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合
Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合
- 标签:
- hadoop /
- spring boot /
- hive /
- phoenix /
- druid
- 1959
一.POM依赖
作者的hadoop集群环境为:
HDFS,YARN,MapReduce2 : 2.7.3
Hive : 1.2.1000
HBase : 1.1.2
注:phoenix版本依赖性较强,请注意不同发行版之间的差异(直接从集群服务器上获取jar包最为可靠)
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <spring-data-hadoop.version>2.4.0.RELEASE</spring-data-hadoop.version>
- <hive.version>1.2.1</hive.version>
- <phoenix-client.version>4.7</phoenix-client.version>
- <druid.version>1.0.27</druid.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.data</groupId>
- <artifactId>spring-data-hadoop</artifactId>
- <version>${spring-data-hadoop.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hive</groupId>
- <artifactId>hive-jdbc</artifactId>
- <version>${hive.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.phoenix</groupId>
- <artifactId>phoenix-client</artifactId>
- <version>${phoenix-client.version}</version>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid.version}</version>
- </dependency>
- </dependencies>
二.spring boot 配置文件
因为spring boot 是默认且推荐采用yaml和properties配置文件的方式。因此,作者在这里采用yaml方式为例:
application.yml:
- # hive 数据源自定义配置
- hive:
- url: jdbc:hive2://192.168.61.43:10000/default
- type: com.alibaba.druid.pool.DruidDataSource
- driver-class-name: org.apache.hive.jdbc.HiveDriver
- username: hive
- password: hive
- # phoenix 数据源自定义配置
- phoenix:
- enable: true
- url: jdbc:phoenix:192.168.61.43
- type: com.alibaba.druid.pool.DruidDataSource
- driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
- username:
- password:
- default-auto-commit: true
当然,druid还有很多其它可选配置,请读者自行斟酌:
- max-active: 100
- initialSize: 1
- maxWait: 60000
- minIdle: 1
- timeBetweenEvictionRunsMillis: 60000
- minEvictableIdleTimeMillis: 300000
- testWhileIdle: true
- testOnBorrow: false
- testOnReturn: false
- poolPreparedStatements: true
- maxOpenPreparedStatements: 50
三.spring boot 配置Bean实现
因为上述配置信息为自定义的信息,spring boot 的 auto configuration 并不能完全理解编码者的意图,因此我们要手动创造数据源Bean:
Hive:
- /**
- * hive数据源配置
- * @author chenty
- *
- */
- @Configuration
- public class HiveDataSource {
- @Autowired
- private Environment env;
- @Bean(name = "hiveJdbcDataSource")
- @Qualifier("hiveJdbcDataSource")
- public DataSource dataSource() {
- DruidDataSource dataSource = new DruidDataSource();
- dataSource.setUrl(env.getProperty("hive.url"));
- dataSource.setDriverClassName(env.getProperty("hive.driver-class-name"));
- dataSource.setUsername(env.getProperty("hive.username"));
- dataSource.setPassword(env.getProperty("hive.password"));
- return dataSource;
- }
- @Bean(name = "hiveJdbcTemplate")
- public JdbcTemplate hiveJdbcTemplate(@Qualifier("hiveJdbcDataSource") DataSource dataSource) {
- return new JdbcTemplate(dataSource);
- }
- }
Phoenix:
- /**
- * phoenix数据源配置
- * @author chenty
- *
- */
- @Configuration
- public class PhoenixDataSource {
- @Autowired
- private Environment env;
- @Bean(name = "phoenixJdbcDataSource")
- @Qualifier("phoenixJdbcDataSource")
- public DataSource dataSource() {
- DruidDataSource dataSource = new DruidDataSource();
- dataSource.setUrl(env.getProperty("phoenix.url"));
- dataSource.setDriverClassName(env.getProperty("phoenix.driver-class-name"));
- dataSource.setUsername(env.getProperty("phoenix.username"));//phoenix的用户名默认为空
- dataSource.setPassword(env.getProperty("phoenix.password"));//phoenix的密码默认为空
- dataSource.setDefaultAutoCommit(Boolean.valueOf(env.getProperty("phoenix.default-auto-commit")));
- return dataSource;
- }
- @Bean(name = "phoenixJdbcTemplate")
- public JdbcTemplate phoenixJdbcTemplate(@Qualifier("phoenixJdbcDataSource") DataSource dataSource) {
- return new JdbcTemplate(dataSource);
- }
- }
四.数据源测试
接下来我们只需在测试类中,注入 hive/phoenix 的 JdbcTemplate,即可实现 hive/phoenix 的数据交互:
Hive:
- @RunWith(SpringJUnit4ClassRunner.class)
- @SpringApplicationConfiguration(HiveServiceApplication.class)
- public class MainTest {
- @Autowired
- @Qualifier("hiveJdbcTemplate")
- JdbcTemplate hiveJdbcTemplate;
- @Test
- public void DataSourceTest() {
- // create table
- StringBuffer sql = new StringBuffer("create table IF NOT EXISTS ");
- sql.append("HIVE_TEST1 ");
- sql.append("(KEY INT, VALUE STRING) ");
- sql.append("PARTITIONED BY (S_TIME DATE)"); // 分区存储
- sql.append("ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' "); // 定义分隔符
- sql.append("STORED AS TEXTFILE"); // 作为文本存储
- // drop table
- // StringBuffer sql = new StringBuffer("DROP TABLE IF EXISTS ");
- // sql.append("HIVE_TEST1");
- hiveJdbcTemplate.execute(sql.toString());
- }
- }
Phoenix:
- @RunWith(SpringJUnit4ClassRunner.class)
- @SpringApplicationConfiguration(HBaseServiceApplication.class)
- public class MainTest {
- @Autowired
- @Qualifier("phoenixJdbcTemplate")
- JdbcTemplate phoenixJdbcTemplate;
- @Test
- public void DataSourceTest() {
- //phoenix
- phoenixJdbcTemplate.execute("create table IF NOT EXISTS PHOENIX_TEST2 (ID INTEGER not null primary key, Name varchar(20),Age INTEGER)");
- }
- }
五.传统方式
虽然 spring boot 本身是不推荐传统的xml配置的,但是实际生产过程中因各种客观因素,导致有时我们不得不引入传统的xml形式的配置文件。因此针对 hive/phoenix 如果用xml配置文件,并且在spring boot 下如何实现再做下简单的介绍:
application.xml:
- <!-- 配置HiveTemplate -->
- <bean id="hiveTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <constructor-arg ref="hiveDataSource"/>
- <qualifier value="hiveTemplate"/>
- </bean>
- <bean id="hiveDataSource" class="com.alibaba.druid.pool.DruidDataSource">
- <property name="driverClassName" value="org.apache.hive.jdbc.HiveDriver"/>
- <property name="url" value="jdbc:hive2://172.20.36.212:10000/default"/>
- <property name="username" value="hive"/>
- <property name="password" value="hive"/>
- <!-- 初始化连接大小 -->
- <property name="initialSize" value="0" />
- <!-- 连接池最大使用连接数量 -->
- <property name="maxActive" value="1500" />
- <!-- 连接池最小空闲 -->
- <property name="minIdle" value="0" />
- <!-- 获取连接最大等待时间 -->
- <property name="maxWait" value="60000" />
- </bean>
- <!-- 配置PhoenixTemplate -->
- <bean id="phoenixTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <constructor-arg ref="phoenixDataSource"/>
- <qualifier value="phoenixJdbcTemplate"/>
- </bean>
- <bean id="phoenixDataSource" class="com.alibaba.druid.pool.DruidDataSource">
- <property name="driverClassName" value="org.apache.phoenix.jdbc.PhoenixDriver"/>
- <property name="url" value="jdbc:phoenix:172.20.36.212"/>
- <!-- 初始化连接大小 -->
- <property name="initialSize" value="0" />
- <!-- 连接池最大使用连接数量 -->
- <property name="maxActive" value="1500" />
- <!-- 连接池最小空闲 -->
- <property name="minIdle" value="0" />
- <!-- 获取连接最大等待时间 -->
- <property name="maxWait" value="60000" />
- <!--因为Phoenix进行数据更改时不会自动的commit,必须要添加defaultAutoCommit属性,否则会导致数据无法提交的情况-->
- <property name="defaultAutoCommit" value="true"/>
- </bean>
实现测试:
有了xml配置,我们只需在上述第四步骤测试类的类定义上加入如下注解,即可实现xml配置文件信息的加载:
- @ImportResource({"classpath:application.xml","..."})
注意:配置文件中bean的名字要与注入注解的名字一致
转-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合的更多相关文章
- Spring Boot下Druid连接池+mybatis
目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池. 引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...
- Spring Boot 2.x整合Redis
最近在学习Spring Boot 2.x整合Redis,在这里和大家分享一下,希望对大家有帮助. Redis是什么 Redis 是开源免费高性能的key-value数据库.有以下的优势(源于Redis ...
- spring boot下使用logback或log4j生成符合Logstash标准的JSON格式
spring boot下使用logback或log4j生成符合Logstash标准的JSON格式 一.依赖 由于配置中使用了json格式的日志输出,所以需要引入如下依赖 "net.logst ...
- spring boot 2.0 整合 elasticsearch6.5.3,spring boot 2.0 整合 elasticsearch NoNodeAvailableException
原文地址:spring boot 2.0 整合 elasticsearch NoNodeAvailableException 原文说的有点问题,下面贴出我的配置: 原码云项目地址:https://gi ...
- Spring Boot入门 and Spring Boot与ActiveMQ整合
1.Spring Boot入门 1.1什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品.无 ...
- Spring Boot和Dubbo整合
provider端 POM依赖 <dependencies> <dependency> <groupId>org.springframework.boot</ ...
- RabbitMQ入门:在Spring Boot 应用中整合RabbitMQ
在上一篇随笔中我们认识并安装了RabbitMQ,接下来我们来看下怎么在Spring Boot 应用中整合RabbitMQ. 先给出最终目录结构: 搭建步骤如下: 新建maven工程amqp 修改pom ...
- 【spring boot】10.spring boot下的单元测试
spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...
- 【ActiveMQ】2.spring Boot下使用ActiveMQ
在spring boot下使用ActiveMQ,需要一下几个条件 1.安装并启动了ActiveMQ,参考:http://www.cnblogs.com/sxdcgaq8080/p/7919489.ht ...
随机推荐
- Style样式的四种使用(包括用C#代码动态加载资源文件并设置样式)
Posted on 2012-03-23 11:21 祥叔 阅读(2886) 评论(6) 编辑 收藏 在Web开发中,我们通过CSS来控制页面元素的样式,一般常用三种方式: 1. 内联样式 ...
- 第五章 [BX]和loop指令
5.1 [bx] [bx]是什么 和 [0] 有些类似,[0] 表示内存单元,它的偏移地址是 0. 例如: mov ax, [0] 内存以字节为单位:ax以字(16bit = 2Byte)为单位:al ...
- 浅谈Linux
Linux系统最初由芬兰赫尔辛基大学的Andrew S.Tanenbaum写的MINIX操作系统演变而来,这是一个小型操作系统,主要用于教学,1991年1月,Tanenbaum的学生Linus Tor ...
- python-day33--Process类中的方法及属性
p.daemon = True -->守护进程,守护进程不可以再有子进程,并且主进程死守护进程就死,要写在p.start()之前 p.join() ---> 主进程等子进程执行完 之后再结 ...
- TCP/IP四层与OSI七层模型
OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行实 ...
- nyoj1248(阅读理解???)
海岛争霸 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己 ...
- javassist示例
javassist的作用是动态生成字节码. package com.zhang; class Fighter {} public class Assist_Test { public static v ...
- 循环大法——一次性理清forEach/for-in/for/$each
国寿的这个项目写得我基础都忘完了 近期会把vue和基础都并行复习.学习 forEach 适用于调用数组的每个元素,并将元素传递给回调函数,但是空数组是不会执行回调函数的.forEach适用于集合中的对 ...
- 通过ReRes让chrome拥有路径映射的autoResponse功能。
前端开发过程中,经常会有需要对远程环境调试的需求.比如,修改线上bug,开发环境不在本地等等.我们需要把远程css文件或者js映射到本地的文件上,通过修改本地文件进行调试和开发.通常我们可以通过以下方 ...
- POJ 3259 Bellman_Ford算法
额.关键是读题.反正我是看了解题报告才知道意思的.给你n个点.m条路.双向的.耗费时间.w个虫洞.单向的.时间为负值.问你是否可以从某一点返回看到之前的自己.即为判断是不是有负环.用Bellman_F ...