是專案中使用hive-jdbc對遠程的Hive資料庫進行連接,之前的hive版本是1.1.0,hive-jdbc版本也是1.1.0.用的alibaba的druid連接池進行連接,沒有問題.也能執行查詢.
換成新的hive資料庫之后,hive版本換成了3.1.2,hadoop也是最新的3.3.0,同樣的配置,修改了hive-jdbc的驅動版本,修改了連接的url之后,連接就報錯了.不知道是什么原因,報錯資訊如下:



我加載的配置類如下:
@Data
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.hive.druid")
@Log4j2
public class HiveDataBaseConfigBACKUP {
@Value("${spring.datasource.hive.druid.filters}")
private String filters;
@Value("${spring.datasource.hive.druid.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.hive.druid.url}")
private String url;
@Value("${spring.datasource.hive.druid.username}")
private String username;
@Value("${spring.datasource.hive.druid.password}")
private String password;
@Value("${spring.datasource.hive.druid.initialSize}")
private int initialSize;
@Value("${spring.datasource.hive.druid.minIdle}")
private int minIdle;
@Value("${spring.datasource.hive.druid.maxActive}")
private int maxActive;
@Value("${spring.datasource.hive.druid.maxWait}")
private long maxWait;
@Value("${spring.datasource.hive.druid.timeBetweenEvictionRunsMillis}")
private long timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.hive.druid.minEvictableIdleTimeMillis}")
private long minEvictableIdleTimeMillis;
@Value("${spring.datasource.hive.druid.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.hive.druid.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.hive.druid.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.hive.druid.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.hive.druid.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.hive.druid.maxPoolPreparedStatementPerConnectionSize}")
private int maxPoolPreparedStatementPerConnectionSize;
@Bean(name = "hiveDruidDataSource")
@Qualifier("hiveDruidDataSource")
public DataSource hiveDataSource() throws SQLException {
DruidDataSource druid = new DruidDataSource();
// 監控統計攔截的filters
druid.setFilters(filters);
// 配置基本屬性
druid.setDriverClassName(driverClassName);
druid.setUsername(username);
druid.setPassword(password);
druid.setUrl(url);
//初始化時建立物理連接的個數
druid.setInitialSize(initialSize);
//最大連接池數量
druid.setMaxActive(maxActive);
//最小連接池數量
druid.setMinIdle(minIdle);
//獲取連接時最大等待時間,單位毫秒。
druid.setMaxWait(maxWait);
//間隔多久進行一次檢測,檢測需要關閉的空閑連接
druid.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
//一個連接在池中最小生存的時間
druid.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
//用來檢測連接是否有效的sql
druid.setValidationQuery(validationQuery);
//建議配置為true,不影響性能,并且保證安全性。
druid.setTestWhileIdle(testWhileIdle);
//申請連接時執行validationQuery檢測連接是否有效
druid.setTestOnBorrow(testOnBorrow);
druid.setTestOnReturn(testOnReturn);
//是否快取preparedStatement,也就是PSCache,oracle設為true,mysql設為false。分庫分表較多推薦設定為false
druid.setPoolPreparedStatements(poolPreparedStatements);
// 打開PSCache時,指定每個連接上PSCache的大小
druid.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
log.info("Hive資料源配置成功");
return druid;
}
@Bean(name = "hiveJdbcTemplate")
public JdbcTemplate hiveJdbcTemplate(@Qualifier("hiveDruidDataSource") DataSource dataSource){
log.info("獲取Hive連接");
return new JdbcTemplate(dataSource);
}
}
hive配置如下:
spring:
datasource:
hive:
druid:
#監控統計攔截的filters
filters: stat
driverClassName: org.apache.hive.jdbc.HiveDriver
#配置基本屬性
url: jdbc:hive2://xx.xx.xx.xx:10000/default;auth=noSasl
username: app
password:
#配置初始化大小/最小/最大
initialSize: 2
minIdle: 3
maxActive: 20
#獲取連接等待超時時間
maxWait: 60000
#間隔多久進行一次檢測,檢測需要關閉的空閑連接
timeBetweenEvictionRunsMillis: 60000
#一個連接在池中最小生存的時間
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
#打開PSCache,并指定每個連接上PSCache的大小。oracle設為true,mysql設為false。分庫分表較多推薦設定為false
poolPreparedStatements: false
maxPoolPreparedStatementPerConnectionSize: 20
添加的hive依賴如下:
<!-- 新增hive依賴 -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>3.1.2</version>
<exclusions>
<exclusion>
<groupId>org.apache.hive</groupId>
<artifactId>hive-service</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
</exclusion>
<exclusion>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
正常連接1.1.0版本的時候.把hive-jdbc版本切換為1.1.0,然后把排除hive-service去除就成功了.不知道為什么切換版本之后就不行.
已經兩個庫使用dbeaver都是可以連接成功的.所以應該不是集群環境的問題.還是配置或者驅動哪里不太對....
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104805.html
標籤:Java相關
上一篇:2020-09-22:已知兩個數的最大公約數和最小公倍數,并且這兩個數不能是最大公約數和最小公倍數本身。如何判斷這兩個數是否存在?
