如何在Spark-Hive程序中添加数据库详细信息

时间:2017-06-29 06:13:50

标签: apache-spark hive

我正在尝试从spark程序加载一个hive表。 到目前为止,我使用spark shell将数据加载到Hive表中。在得知之后,我在日食上写了一个火花程序,你可以在下面看到。

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")
  }
}

我感到困惑的地方是,

  1. 我应该在程序中添加数据库详细信息,例如localhost / ip address,portnumber,database name。
  2. 我正在使用Spark版本:2.1.1,这就是'/ usr / local / spark'中的发行说明(为Hadoop 2.6.4构建的Spark 2.1.1)。我是否需要使用HiveContext对象与Hive表进行交互?
  3. 这些是我的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>
    

    有谁能告诉我如何进一步处理?

1 个答案:

答案 0 :(得分:0)

我认为您需要提供Metastore uris。您有两种选择:

  • 在运行spark应用程序的资源类路径中使用 hive-site.xml (如果您遵循标准maven结构,可以将其放在资源文件夹中):< / p>

    <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”)