使用Apache Spark查询多个Hive存储

kar*_*ala 28 hive apache-spark spark-hive

我有一个spark应用程序,它将成功连接到hive并使用spark引擎查询hive表.

为了构建这个,我刚刚添加hive-site.xml到应用程序的类路径中,spark将读取hive-site.xml连接到它的Metastore.spark的邮件列表中提出了这种方法.

到现在为止还挺好.现在我想连接到两个配置单元存储,我不认为hive-site.xml在我的类路径中添加另一个将有所帮助.我提到了不少文章和火花邮件列表,但找不到任何人这样做.

有人可以建议我如何实现这一目标吗?

谢谢.

文件提到:

Adi*_*tya 7

我认为这可以通过使用Spark SQL功能来连接和使用JDBC从远程数据库读取数据.

经过详尽的研发,我成功地使用JDBC连接到两个不同的hive环境,并将hive表作为DataFrame加载到Spark中进行进一步处理.

环境细节

Hadoop的2.6.0

Apache的蜂房2.0.0斌

火花1.3.1彬hadoop2.6

代码示例 HiveMultiEnvironment.scala

    import org.apache.spark.SparkConf
    import org.apache.spark.sql.SQLContext
    import org.apache.spark.SparkContext
    object HiveMultiEnvironment {
      def main(args: Array[String]) {
        var conf = new SparkConf().setAppName("JDBC").setMaster("local")
        var sc = new SparkContext(conf)
        var sqlContext = new SQLContext(sc)

 // load hive table (or) sub-query from Environment 1

        val jdbcDF1 = sqlContext.load("jdbc", Map(
          "url" -> "jdbc:hive2://<host1>:10000/<db>",
          "dbtable" -> "<db.tablename or subquery>",
          "driver" -> "org.apache.hive.jdbc.HiveDriver",
          "user" -> "<username>",
          "password" -> "<password>"))
        jdbcDF1.foreach { println }

 // load hive table (or) sub-query from Environment 2

        val jdbcDF2 = sqlContext.load("jdbc", Map(
          "url" -> "jdbc:hive2://<host2>:10000/<db>",
          "dbtable" -> "<db.tablename> or <subquery>",
          "driver" -> "org.apache.hive.jdbc.HiveDriver",
          "user" -> "<username>",
          "password" -> "<password>"))
        jdbcDF2.foreach { println }
      }
// todo: business logic
    }
Run Code Online (Sandbox Code Playgroud)

在使用SqlContext加载期间也可以设置其他参数,例如设置partitionColumn.Spark参考文档中的"JDBC To Other Databases"部分中的详细信息:https: //spark.apache.org/docs/1.3.0/sql-programming-guide.html

从Eclipse构建路径:

在此输入图像描述

我没有尝试过的

对环境1使用HiveContext,对环境2使用SqlContext

希望这会有用.