Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合

http://blog.csdn.net/balabalayi/article/details/67631726
原创 2017年03月28日 09:10:05
  • 1959

一.POM依赖

作者的hadoop集群环境为:

HDFS,YARN,MapReduce2 : 2.7.3
Hive : 1.2.1000
HBase : 1.1.2

注:phoenix版本依赖性较强,请注意不同发行版之间的差异(直接从集群服务器上获取jar包最为可靠)

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <spring-data-hadoop.version>2.4.0.RELEASE</spring-data-hadoop.version>
  4. <hive.version>1.2.1</hive.version>
  5. <phoenix-client.version>4.7</phoenix-client.version>
  6. <druid.version>1.0.27</druid.version>
  7. </properties>
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-jdbc</artifactId>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.springframework.data</groupId>
  15. <artifactId>spring-data-hadoop</artifactId>
  16. <version>${spring-data-hadoop.version}</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.apache.hive</groupId>
  20. <artifactId>hive-jdbc</artifactId>
  21. <version>${hive.version}</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.apache.phoenix</groupId>
  25. <artifactId>phoenix-client</artifactId>
  26. <version>${phoenix-client.version}</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>com.alibaba</groupId>
  30. <artifactId>druid</artifactId>
  31. <version>${druid.version}</version>
  32. </dependency>
  33. </dependencies>

二.spring boot 配置文件

因为spring boot 是默认且推荐采用yaml和properties配置文件的方式。因此,作者在这里采用yaml方式为例:

application.yml:

  1. # hive 数据源自定义配置
  2. hive:
  3. url: jdbc:hive2://192.168.61.43:10000/default
  4. type: com.alibaba.druid.pool.DruidDataSource
  5. driver-class-name: org.apache.hive.jdbc.HiveDriver
  6. username: hive
  7. password: hive
  8. # phoenix 数据源自定义配置
  9. phoenix:
  10. enable: true
  11. url: jdbc:phoenix:192.168.61.43
  12. type: com.alibaba.druid.pool.DruidDataSource
  13. driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
  14. username:
  15. password:
  16. default-auto-commit: true

当然,druid还有很多其它可选配置,请读者自行斟酌:

  1. max-active: 100
  2. initialSize: 1
  3. maxWait: 60000
  4. minIdle: 1
  5. timeBetweenEvictionRunsMillis: 60000
  6. minEvictableIdleTimeMillis: 300000
  7. testWhileIdle: true
  8. testOnBorrow: false
  9. testOnReturn: false
  10. poolPreparedStatements: true
  11. maxOpenPreparedStatements: 50

三.spring boot 配置Bean实现

因为上述配置信息为自定义的信息,spring boot 的 auto configuration 并不能完全理解编码者的意图,因此我们要手动创造数据源Bean:

Hive:

  1. /**
  2. * hive数据源配置
  3. * @author chenty
  4. *
  5. */
  6. @Configuration
  7. public class HiveDataSource {
  8. @Autowired
  9. private Environment env;
  10. @Bean(name = "hiveJdbcDataSource")
  11. @Qualifier("hiveJdbcDataSource")
  12. public DataSource dataSource() {
  13. DruidDataSource dataSource = new DruidDataSource();
  14. dataSource.setUrl(env.getProperty("hive.url"));
  15. dataSource.setDriverClassName(env.getProperty("hive.driver-class-name"));
  16. dataSource.setUsername(env.getProperty("hive.username"));
  17. dataSource.setPassword(env.getProperty("hive.password"));
  18. return dataSource;
  19. }
  20. @Bean(name = "hiveJdbcTemplate")
  21. public JdbcTemplate hiveJdbcTemplate(@Qualifier("hiveJdbcDataSource") DataSource dataSource) {
  22. return new JdbcTemplate(dataSource);
  23. }
  24. }

Phoenix:

  1. /**
  2. * phoenix数据源配置
  3. * @author chenty
  4. *
  5. */
  6. @Configuration
  7. public class PhoenixDataSource {
  8. @Autowired
  9. private Environment env;
  10. @Bean(name = "phoenixJdbcDataSource")
  11. @Qualifier("phoenixJdbcDataSource")
  12. public DataSource dataSource() {
  13. DruidDataSource dataSource = new DruidDataSource();
  14. dataSource.setUrl(env.getProperty("phoenix.url"));
  15. dataSource.setDriverClassName(env.getProperty("phoenix.driver-class-name"));
  16. dataSource.setUsername(env.getProperty("phoenix.username"));//phoenix的用户名默认为空
  17. dataSource.setPassword(env.getProperty("phoenix.password"));//phoenix的密码默认为空
  18. dataSource.setDefaultAutoCommit(Boolean.valueOf(env.getProperty("phoenix.default-auto-commit")));
  19. return dataSource;
  20. }
  21. @Bean(name = "phoenixJdbcTemplate")
  22. public JdbcTemplate phoenixJdbcTemplate(@Qualifier("phoenixJdbcDataSource") DataSource dataSource) {
  23. return new JdbcTemplate(dataSource);
  24. }
  25. }

四.数据源测试

接下来我们只需在测试类中,注入 hive/phoenix 的 JdbcTemplate,即可实现 hive/phoenix 的数据交互:

Hive:

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @SpringApplicationConfiguration(HiveServiceApplication.class)
  3. public class MainTest {
  4. @Autowired
  5. @Qualifier("hiveJdbcTemplate")
  6. JdbcTemplate hiveJdbcTemplate;
  7. @Test
  8. public void DataSourceTest() {
  9. // create table
  10. StringBuffer sql = new StringBuffer("create table IF NOT EXISTS ");
  11. sql.append("HIVE_TEST1 ");
  12. sql.append("(KEY INT, VALUE STRING) ");
  13. sql.append("PARTITIONED BY (S_TIME DATE)"); // 分区存储
  14. sql.append("ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' "); // 定义分隔符
  15. sql.append("STORED AS TEXTFILE"); // 作为文本存储
  16. // drop table
  17. //      StringBuffer sql = new StringBuffer("DROP TABLE IF EXISTS ");
  18. //      sql.append("HIVE_TEST1");
  19. hiveJdbcTemplate.execute(sql.toString());
  20. }
  21. }

Phoenix:

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @SpringApplicationConfiguration(HBaseServiceApplication.class)
  3. public class MainTest {
  4. @Autowired
  5. @Qualifier("phoenixJdbcTemplate")
  6. JdbcTemplate phoenixJdbcTemplate;
  7. @Test
  8. public void DataSourceTest() {
  9. //phoenix
  10. phoenixJdbcTemplate.execute("create table IF NOT EXISTS PHOENIX_TEST2 (ID INTEGER not null primary key, Name varchar(20),Age INTEGER)");
  11. }
  12. }

五.传统方式

虽然 spring boot 本身是不推荐传统的xml配置的,但是实际生产过程中因各种客观因素,导致有时我们不得不引入传统的xml形式的配置文件。因此针对 hive/phoenix 如果用xml配置文件,并且在spring boot 下如何实现再做下简单的介绍:

application.xml:

  1. <!-- 配置HiveTemplate -->
  2. <bean id="hiveTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  3. <constructor-arg ref="hiveDataSource"/>
  4. <qualifier value="hiveTemplate"/>
  5. </bean>
  6. <bean id="hiveDataSource" class="com.alibaba.druid.pool.DruidDataSource">
  7. <property name="driverClassName" value="org.apache.hive.jdbc.HiveDriver"/>
  8. <property name="url" value="jdbc:hive2://172.20.36.212:10000/default"/>
  9. <property name="username" value="hive"/>
  10. <property name="password" value="hive"/>
  11. <!-- 初始化连接大小 -->
  12. <property name="initialSize" value="0" />
  13. <!-- 连接池最大使用连接数量 -->
  14. <property name="maxActive" value="1500" />
  15. <!-- 连接池最小空闲 -->
  16. <property name="minIdle" value="0" />
  17. <!-- 获取连接最大等待时间 -->
  18. <property name="maxWait" value="60000" />
  19. </bean>
  20. <!-- 配置PhoenixTemplate -->
  21. <bean id="phoenixTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  22. <constructor-arg ref="phoenixDataSource"/>
  23. <qualifier value="phoenixJdbcTemplate"/>
  24. </bean>
  25. <bean id="phoenixDataSource" class="com.alibaba.druid.pool.DruidDataSource">
  26. <property name="driverClassName" value="org.apache.phoenix.jdbc.PhoenixDriver"/>
  27. <property name="url" value="jdbc:phoenix:172.20.36.212"/>
  28. <!-- 初始化连接大小 -->
  29. <property name="initialSize" value="0" />
  30. <!-- 连接池最大使用连接数量 -->
  31. <property name="maxActive" value="1500" />
  32. <!-- 连接池最小空闲 -->
  33. <property name="minIdle" value="0" />
  34. <!-- 获取连接最大等待时间 -->
  35. <property name="maxWait" value="60000" />
  36. <!--因为Phoenix进行数据更改时不会自动的commit,必须要添加defaultAutoCommit属性,否则会导致数据无法提交的情况-->
  37. <property name="defaultAutoCommit" value="true"/>
  38. </bean>

实现测试:

有了xml配置,我们只需在上述第四步骤测试类的类定义上加入如下注解,即可实现xml配置文件信息的加载:

  1. @ImportResource({"classpath:application.xml","..."})

注意:配置文件中bean的名字要与注入注解的名字一致

转-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合的更多相关文章

  1. Spring Boot下Druid连接池+mybatis

      目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池.  引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...

  2. Spring Boot 2.x整合Redis

    最近在学习Spring Boot 2.x整合Redis,在这里和大家分享一下,希望对大家有帮助. Redis是什么 Redis 是开源免费高性能的key-value数据库.有以下的优势(源于Redis ...

  3. spring boot下使用logback或log4j生成符合Logstash标准的JSON格式

    spring boot下使用logback或log4j生成符合Logstash标准的JSON格式 一.依赖 由于配置中使用了json格式的日志输出,所以需要引入如下依赖 "net.logst ...

  4. spring boot 2.0 整合 elasticsearch6.5.3,spring boot 2.0 整合 elasticsearch NoNodeAvailableException

    原文地址:spring boot 2.0 整合 elasticsearch NoNodeAvailableException 原文说的有点问题,下面贴出我的配置: 原码云项目地址:https://gi ...

  5. Spring Boot入门 and Spring Boot与ActiveMQ整合

    1.Spring Boot入门 1.1什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品.无 ...

  6. Spring Boot和Dubbo整合

    provider端 POM依赖 <dependencies> <dependency> <groupId>org.springframework.boot</ ...

  7. RabbitMQ入门:在Spring Boot 应用中整合RabbitMQ

    在上一篇随笔中我们认识并安装了RabbitMQ,接下来我们来看下怎么在Spring Boot 应用中整合RabbitMQ. 先给出最终目录结构: 搭建步骤如下: 新建maven工程amqp 修改pom ...

  8. 【spring boot】10.spring boot下的单元测试

    spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...

  9. 【ActiveMQ】2.spring Boot下使用ActiveMQ

    在spring boot下使用ActiveMQ,需要一下几个条件 1.安装并启动了ActiveMQ,参考:http://www.cnblogs.com/sxdcgaq8080/p/7919489.ht ...

随机推荐

  1. 雷林鹏分享:C# 不安全代码

    C# 不安全代码 当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量.不安全代码或非托管代码是指使用了指针变量的代码块. 指针变量 指针 是值为另一个变量的地址的变量,即,内 ...

  2. git上传文件到github与gulp的简单使用

    git有两种方式提交源代码到github 第一种方式通过地址提交下面介绍的是通过ssh方式上传 git使用ssh方式上传代码到githubgit首先要生成公钥和私钥 将公钥添加到github中将私钥保 ...

  3. 深入了解 Java-Netty高性能高并发理解

    https://www.jianshu.com/p/ac7fb5c2640f 一丶 Netty基础入门 Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,作为 ...

  4. hadoop hive install (5)

    reference : http://dblab.xmu.edu.cn/blog/install-hive/ http://dblab.xmu.edu.cn/blog/hive-in-practice ...

  5. python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA

    加密与解密,这很重要,我们已经可以用pypcap+npcap简单嗅探到网络中的数据包了.而这个工具其实可以嗅探到更多的数据.如果我们和别人之间传输的数据被别人嗅探到,那么信息泄漏,信息被篡改,将给我们 ...

  6. bootstrap-table 切换页码保留勾选的checkbox

    首先该方法除了需要引入bootstrap库和bootstrap-table外,还需要引入一个工具库js:lodash.js    点我 使用时在jquery.min.js.bootstrap.min. ...

  7. 调用Nt函数内核模式切换问题

    很久不写博客了,笔记大多记在电脑上在,以后整理好了再搬运上来吧. 今天记一下“进程内存管理器”这个小程序上遇到的一个问题——内核模式调用Nt*函数. 使用的是内核中的NtQueryVirtualMem ...

  8. linux export环境变量

    Linux export命令参数(转载)   功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环 ...

  9. BitDefender(比特梵德)特惠活动 免费获取9个月激活码

    Bitdefender为了庆祝自己获得2014年最佳杀毒软件,送出9个月的Internet security免费激活码.

  10. JVM --- OutOfMemoryError异常

    在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有可能发生OutOfMemoryError(OOM)异常. 1.Java堆溢出 Java堆用于存储对象实例,只要不断地创 ...