spark sql完成jdbc数据源导入hive表,java API实现

1、基础环境

spark on yarn环境已经搭建,通过start-thriftserver.sh --master yarn启动 sparksubmit进程即可

dm数据库;

2、使用jdbc来访问spark,java API实现

2.1 创建datasource、connection、statement代码,这里属于通用代码,使用Druid连接池来创建jdbc连接

 /**
     * 读取druid.properties,并生成datasource
     */
    private static Statement init() throws Exception {
        Properties properties = new Properties();
        InputStream resourceAsStream =
            DataHubTask.class.getClassLoader().getResourceAsStream("conf/druid.properties");
        try {
            properties.load(resourceAsStream);
        } catch (IOException e) {
            LOG.error("The resource loaded failed, please check the path {}.", SPARK_THRIFT_SERVER_PATH);
            throw new RuntimeException(e);
        }

        dataSource = DruidDataSourceFactory.createDataSource(properties);
         
        Connection connection = dataSource.getConnection();
        // 返回statement
        return connection.createStatement();
    }

2.2 创建spark jdbc数据源的表,这里以达梦数据库为准, 使用statement执行该sql就行,执行完后,就可以查询该表的内容。

不过需要注意的是,由于是jdbc数据源,在hdfs目录上看这个表的存储情况,就会发现原始数据没有hdfs上存储

CREATE table dm_table_3
USING org.apache.spark.sql.jdbc
OPTIONS (
  url "jdbc:dm://****:5236/test",
  driver "dm.jdbc.driver.DmDriver",
  dbtable "test.testtable_dm",
  user 'SYSDBA',
  password 'SYSDBA'
);

2.3 创建spark hive表,这里以create as的方式导入

CREATE TABLE IF NOT EXISTS hive_dm_3 STORED AS ORC AS SELECT * FROM dm_table_3

等待执行完成后,就可以完成dm数据导入到hive表中

3、总结

这里只是一个简单的demo,具体放到生产环境的话,通过create as的方式来完成数据导入的话,还会有很多缺陷,比如无法通过create as的语法来完成分区表的创建。

具体可以使用:先创建hive分区表,然后使用insert into *** partition *** select * from*d 的方式来完成。

你可能感兴趣的:(spark,hive,hadoop,学习总结,hive,大数据,spark)