#大数据工具对接示例(Spark)

YashanDB支持Spark通过YashanDB JDBC驱动连接数据库并读取数据。

本文提供该功能的验证过程介绍,所使用测试环境为Windows 10。

# 环境说明

以Maven为例:

Scala version:2.12.8

SparkSql version:3.0.2

Java version:11

Maven version:3.8.6

# 创建Spark项目

本文所用IDE为IDEA,IDEA创建Scala项目时,只有sbt可选,但需要改动sbt-launch.jar,加入依赖镜像。这样构建一个项目太过于繁琐,所以本文将采用Maven项目作为连通测试。

[repositories]
  local
  aliyun: http://maven.aliyun.com/nexus/content/groups/public/
  central: http://repo1.maven.org/maven2/

直接通过IDEA创建一个Maven项目,然后手动引入Scala。

Pom文件配置

本文中测试工程启用的是Maven项目,而并非Scala工程推荐的sbt包管理工具,如果使用sbt包管理工具,只需要加入相应版本的依赖即可。

<dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.0.2</version>
            <scope>provided</scope>
        </dependency>
   </dependencies>

手动添加YashanDB JDBC驱动包进入项目(同Mybatis中操作描述),如果Maven私服有配置,可以直接加入Pom文件中。

# Spark连接YashanDB

Window环境下,需要指定hadoop.home.dir,否则可能出现Failed to locate the winutils binary in the hadoop binary path错误,点此下载 (opens new window)对应版本的winutils。

下例验证Spark读入数据,实现Spark与YashanDB直接连通。请将host_ip、dbname、username和password修改为实际值。

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object SparkTest {

  def main(args: Array[String]): Unit = {
    System.setProperty("hadoop.home.dir", "F:\\hadoop\\winutils-master\\hadoop-3.0.2")

    val sparkConf = new SparkConf()
    sparkConf.setAppName("test0001")
    sparkConf.setMaster("local[2]")

    val sparkSession = SparkSession.builder()
      .config("spark.sql.warehouse.dir", "spark-warehouse")
      .config(sparkConf)
      .getOrCreate()

    val jdbcDF = sparkSession.read
      .format("jdbc")
      .option("url", "jdbc:yasdb://host_ip:1688/dbname")
      .option("driver", "com.yashandb.jdbc.Driver")
      .option("user", "sys")
      .option("password", "sys")
      .option("dbtable", "user1")
      .load()

    jdbcDF.show()

  }

}

正常连通时,将会看到如下结果:

pdf-btn 下载文档
copy-btn 复制链接