在 spark 中使用 hive 数据库

Posted

技术标签:

【中文标题】在 spark 中使用 hive 数据库【英文标题】:Using hive database in spark 【发布时间】:2016-08-04 14:41:50 【问题描述】:

我是 spark 新手,并尝试使用 HortonWorks Sandbox 在 tpcds 基准表上运行一些查询。 http://www.tpc.org/tpcds/ 在沙盒上通过 shell 或 hive-view 使用 hive 没有问题。问题是如果我想使用 spark,我不知道如何连接到数据库。 如何来运行查询? 到目前为止,我知道的唯一解决方案是手动重建每个表并使用以下 scala 代码在其中加载数据,这不是最好的解决方案。

scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
scala> sqlContext.sql("CREATE TABLE IF NOT EXISTS employee(id INT, name STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'")
scala> sqlContext.sql("LOAD DATA LOCAL INPATH 'employee.txt' INTO TABLE employee")
scala> val result = sqlContext.sql("FROM employe SELECT id, name, age")
scala> result.show()

我还阅读了一些有关 hive-site.xml 的信息,但我不知道在哪里可以找到它以及要对其进行哪些更改才能连接到数据库。

【问题讨论】:

Hive 站点(和其他配置文件)位于您安装 Hadoop 二进制文件的位置 如果您使用的是沙盒,您需要的一切都应该在这里得到解答。最后几个命令从现有 Hive 表中查询 hortonworks.com/hadoop-tutorial/… 【参考方案1】:

使用 Spark 和 HiveContext 时无需连接到特定数据库。

您只需将“hive-site.xml”文件复制到 Spark conf 文件夹(或者您也可以创建一个符号链接)。

cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf/

然后,在 Spark 中,您可以执行类似的操作(我不是 scala 用户,因此语法可能有误):

val hc = new org.apache.spark.sql.hive.HiveContext(sc)
val result = hc.sql("SELECT col1, col2, col3 FROM dbname.tablename")
result.show()

【讨论】:

以上是关于在 spark 中使用 hive 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spark 在 Hive 中正确加载数据?

在 Spark 中使用 jdbc 驱动程序连接到 Hive

无法使用 Apache spark 2.1.0 连接到 hive 数据库

使用 Spark 查询 hive 表

使用 Spark Scala 将 Sql Server 数据类型转换为 Hive 数据类型

Hive:Spark中如何实现将rdd结果插入到hive1.3.1表中