1.前置环境
- Hadoop集群安装 juejin.cn/post/691987…
- Zookeeper+Hbase安装 juejin.cn/post/692065…
2.安装Phoenix
- 下载安装包: mirror.bit.edu.cn/apache/phoe…
- 解压:
tar -zxvf apache-phoenix-4.14.3-HBase-1.4-bin.tar.gz
- 重命名
mv apache-phoenix-4.14.3-HBase-1.4-bin phoenix
复制
cp phoenix-4.14.3-HBase-1.4-server.jar phoenix-core-4.14.3-HBase-1.4.jar /usr/local/bigdata/hbase/lib/
scp phoenix-4.14.3-HBase-1.4-server.jar phoenix-core-4.14.3-HBase-1.4.jar root@k8s-node1:/usr/local/bigdata/hbase/lib/
scp phoenix-4.14.3-HBase-1.4-server.jar phoenix-core-4.14.3-HBase-1.4.jar root@k8s-node2:/usr/local/bigdata/hbase/lib/
替换
- 将hbase的配置文件
hbase-site.xml、 hadoop下的配置文件core-site.xml、放到phoenix/bin/下,替换phoenix原来的配置文件。 - 重启hbase集群,使Phoenix的jar包生效。
3.验证是否安装成功
在phoenix/bin下输入命令:
./sqlline.py node1:2181
4.目录结构
5.pom配置文件
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.14.3-HBase-1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</exclusion>
</exclusions>
</dependency>
6.application-dev.yml
server:
port: 8080
spring:
datasource:
mysql:
jdbc-url: jdbc:mysql://localhost:3306/singodox?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
phoenix:
jdbc-url: jdbc:phoenix:k8s-master:2181
driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
type: com.zaxxer.hikari.HikariDataSource
hikari:
# 池中维护的最小空闲连接数
minimum-idle: 10
# 池中最大连接数,包括闲置和使用中的连接
maximum-pool-size: 20
# 此属性控制从池返回的连接的默认自动提交行为。默认为 true
auto-commit: true
# 允许最长空闲时间
idle-timeout: 30000
# 此属性表示连接池的用户定义名称,主要显示在日志记录和 JMX 管理控制台中,以标识池和池配置。 默认值:自动生成
pool-name: custom-hikari
#此属性控制池中连接的最长生命周期,值 0 表示无限生命周期,默认 1800000 即 30 分钟
max-lifetime: 1800000
# 数据库连接超时时间,默认 30 秒,即 30000
connection-timeout: 30000
# 连接测试 sql 这个地方需要根据数据库方言差异而配置 例如 oracle 就应该写成 select 1 from dual
connection-test-query: SELECT 1
7.多数据源配置
- mysql
@Configuration
@MapperScan(basePackages = "com.pandanodes.dao.mysql.**",
sqlSessionTemplateRef = "mysqlSqlSessionTemplate")
public class MysqlDataSourceConfig {
public static String MYSQL_LOCATION_PATTERN ="classpath:/mapper/mysql/*.xml";
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource mysqlDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MYSQL_LOCATION_PATTERN));
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
@Primary
public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
@Primary
public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
- phoenix
@Configuration
@MapperScan(basePackages = "com.pandanodes.dao.phoenix.**",
sqlSessionTemplateRef = "phoenixSqlSessionTemplate")
public class PhoenixDataSourceConfig {
public static String PHOENIX_LOCATION_PATTERN ="classpath:/mapper/phoenix/*.xml";
@Bean
@ConfigurationProperties(prefix = "spring.datasource.phoenix")
public DataSource phoenixDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory phoenixSqlSessionFactory(@Qualifier("phoenixDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(PHOENIX_LOCATION_PATTERN));
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public DataSourceTransactionManager phoenixTransactionManager(@Qualifier("phoenixDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionTemplate phoenixSqlSessionTemplate(@Qualifier("phoenixSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}