<dependency>-->
<!--<groupId>org.datanucleus</groupId>-->
<!--<artifactId>datanucleus-core</artifactId>-->
<!--<version>3.2.10</version>-->
<!--<scope>compile</scope>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<artifactId>datanucleus-rdbms</artifactId>-->
<!--<groupId>org.datanucleus</groupId>-->
<!--<version>3.2.9</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<artifactId>datanucleus-api-jdo</artifactId>-->
<!--<groupId>org.datanucleus</groupId>-->
<!--<version>3.2.6</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.apache.hive</groupId>-->
<!--<artifactId>hive-jdbc</artifactId>-->
<!--<version>1.2.1</version>-->
<!--</dependency>-->
之前使用sparksession操作cachetable時 總是報ClassLoader not found datanucleusXXXXX,以爲是包依賴的問題,因此,將sparksql中的相關依賴包都排除,再手動添加依賴也無法解決。後面詢問的組內的研發大哥,他說是因爲hive元數據存放於MySQL、。同時,整個項目的數據庫也是存放於mysql的同一個數據庫,因此出現了衝突,所以不建議使用hive源數據uri的連接方式,在sparkconf中刪除以下幾個配置:
t("javax.jdo.PersistenceManagerFactoryClass", "org.datanucleus.jdo.JDOPersistenceManagerFactory")
//.set("javax.jdo.option.ConnectionURL", "jdbc:mysql://****?characterEncoding=utf8&autoReconnect=true")
//.set("javax.jdo.option.ConnectionUserName", "**")
//.set("javax.jdo.option.ConnectionPassword", "**")
改用metastore的連接方式,最終問題得到解決。完整獲取sparksession的代碼如下
public SparkUtil() {
//改用metastore的方式連接hive
SparkConf conf = new SparkConf()
.setAppName("Java Spark Hive Example")
.set("spark.sql.warehouse.dir", warehouseLocation)
.setMaster("***")
//.set("datanucleus.rdbms.datastoreAdapterClassName", "org.datanucleus.store.rdbms.adapter.MySQLAdapter")
//.set("datanucleus.classLoaderResolverName", "jdo")
//.set("javax.jdo.PersistenceManagerFactoryClass", "org.datanucleus.jdo.JDOPersistenceManagerFactory")
//.set("javax.jdo.option.ConnectionURL", "jdbc:mysql:****?characterEncoding=utf8&autoReconnect=true")
//.set("javax.jdo.option.ConnectionUserName", "***")
//.set("javax.jdo.option.ConnectionPassword", "**")
//.set("spark.sql.codegen.wholeStage", "false")
.set("hive.metastore.uris", "thrift://****:9083")
//.set("javax.jdo.option.ConnectionDriverName", "com.mysql.jdbc.Driver")
.set("spark.driver.extraClassPath", "/root/xyz/intelliaccquery/lib/*.jar");
this.spark = SparkSession
.builder()
.config(conf)
.enableHiveSupport()
.getOrCreate();
}