如何在spark hive程序中添加数据库详细信息

jjhzyzn0  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(275)

我正在尝试从spark程序加载配置单元表。到目前为止,我使用sparkshell将数据加载到配置单元表中。在了解了这一点之后,我在eclipse上编写了一个spark程序,您可以在下面看到。

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SaveMode

object SuperSpark {
  case class partclass(id:Int, name:String, salary:Int, dept:String, location:String)
  def main(argds: Array[String]) {
    val warehouseLocation = "file:${system:user.dir}/spark-warehouse"
    val sparkSession = SparkSession.builder.master("local[2]").appName("Saving data into HiveTable using Spark")
                        .enableHiveSupport()
                        .config("hive.exec.dynamic.partition", "true")
                        .config("hive.exec.dynamic.partition.mode", "nonstrict")
                        .config("hive.metastore.warehouse.dir", "/user/hive/warehouse")
                         .config("spark.sql.warehouse.dir", warehouseLocation)
                        .getOrCreate()
    import sparkSession.implicits._

    val partfile = sparkSession.read.textFile("partfile")
    val partdata = partfile.map(p => p.split(","))
    val partRDD  = partdata.map(line => partclass(line(0).toInt, line(1), line(2).toInt, line(3), line(4)))
    val partDF   = partRDD.toDF()
    partDF.write.mode(SaveMode.Append).insertInto("parttab")
  }
}

我困惑的是,
我应该在程序中的何处添加数据库详细信息,如localhost/ip地址、端口号、数据库名称。
我使用的是sparkversion:2.1.1,这就是发布说明在'/usr/local/spark'中所说的(spark2.1.1是为hadoop2.6.4构建的)。是否需要使用hivecontext对象与配置单元表交互?
以下是my pom.xml中的依赖项:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.1.1</version>
    <scope>provided</scope>
</dependency>

有人能告诉我怎么进一步吗?

o2rvlv0m

o2rvlv0m1#

我认为您需要提供元存储URI。您有两种选择:
在运行spark应用程序的资源类路径上使用hive-site.xml(如果您遵循中的标准maven结构,则可以将其放置在资源文件夹中):

<configuration>
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://192.168.1.134:9083</value>
</property>
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
</property>

在spark代码中,使用如下属性配置sparksession对象:
.config(“hive.metastore.uris”,“thrift://192.168.1.134:9083")

相关问题