Настройка Spark для CI, как макет таблицы Hive - PullRequest
2 голосов
/ 08 марта 2019

В приложении Java с Spark 1.6.2 я хочу протестировать на CI env (travis или gitlabCI) некоторые запросы Spark SQL, использующие таблицы (из Apache Hive в работе).

Как можноЯ зарегистрировал несколько таблиц, которые приложение Spark могло бы использовать без внешнего хранилища метаданных Hive?

Примечание: я не могу сделать это внутри программы Java.

1 Ответ

2 голосов
/ 09 марта 2019

Вы можете запустить свои юнит-тесты, используя встроенный 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.

...