【问题标题】:Setup Spark for CI, how to mock Hive tables为 CI 设置 Spark,如何模拟 Hive 表
【发布时间】:2019-07-30 19:05:49
【问题描述】:

在使用 Spark 1.6.2 的 Java 应用程序中,我想在 CI 环境(travis 或 gitlabCI)上测试一些使用表(来自生产环境中的 Apache Hive)的 Spark SQL 查询。

如何注册一些 Spark 应用程序可以在没有外部 Hive 元存储的情况下使用的表?

注意:我不能在 Java 程序中这样做。

【问题讨论】:

    标签: java apache-spark hive


    【解决方案1】:

    您可以使用 spark-hive 开箱即用的嵌入式 Hive 运行单元测试:

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${scala.compat.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
    

    使用您选择的单元测试框架,您可以创建本地 SparkContext 和 HiveContext:

    // TODO: set this up before running all your tests
    val conf = new SparkConf().
      setMaster("local[*]").
      setAppName("test").
      set("spark.ui.enabled", "false").
      set("spark.app.id", "SparkHiveTests").
      set("spark.driver.host", "localhost")
    val sc = new SparkContext(conf)
    val hiveContext = new HiveContext(sc)
    // default directory is /user/hive/warehouse which doesn't exist on my local machine so use a different dir
    hiveContext.setConf("hive.metastore.warehouse.dir", "/tmp/hive/warehouse")
    

    然后您可以使用嵌入式 Hive 创建/删除表并运行查询!

    // data will persist in this directory so drop the table to get a clean run if it exists
    hiveContext.sql("DROP TABLE IF EXISTS src")
    hiveContext.sql("CREATE TABLE src (key INT, value STRING)")
    hiveContext.sql("LOAD DATA LOCAL INPATH 'src/test/resources/kv1.txt' INTO TABLE src")
    val result = hiveContext.sql("SELECT count(*) FROM src").collect().head
    assert(result(0) === 3l)
    

    对不起这里的 Scala,但它在 Java 中应该非常相似。如果它没有意义,请告诉我,我可以尝试用 Java 重写它。

    【讨论】:

    • 对,这就是我现在在 Java 应用程序中所做的事情,但我希望将其从应用程序中移出。可能类似于共享 Spark 上下文。
    • @ThomasDecaux 当你说你想把它从应用程序中移走时,你是什么意思?你用junit吗?您可以将此代码添加到一些 junit 测试中,以便在设置 CI 管道时运行所有测试。
    • 我只将 junit 用于单元测试,用于 func。测试时,我使用的是外部 Python 脚本(带有 Behave),它运行多个任务(因此有多个 Spark 上下文)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2020-01-04
    • 1970-01-01
    • 2018-01-16
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多