Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用apachespark查询多个配置单元存储_Apache Spark_Hive_Spark Hive - Fatal编程技术网

Apache spark 使用apachespark查询多个配置单元存储

Apache spark 使用apachespark查询多个配置单元存储,apache-spark,hive,spark-hive,Apache Spark,Hive,Spark Hive,我有一个spark应用程序,它将成功连接到配置单元并使用spark引擎查询配置单元表 为了构建它,我刚刚将hive site.xml添加到应用程序的类路径中,spark将读取hive site.xml以连接到它的元存储。spark的邮件列表中建议了这种方法 到目前为止还不错。现在我想连接到两个hive商店,我不认为在我的类路径中添加另一个hive site.xml会有帮助。我参考了不少文章和spark邮件列表,但找不到有人这样做 有人能建议我如何做到这一点吗 谢谢 参考文件: 这在当前版

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

为了构建它,我刚刚将
hive site.xml
添加到应用程序的类路径中,spark将读取
hive site.xml
以连接到它的元存储。spark的邮件列表中建议了这种方法

到目前为止还不错。现在我想连接到两个hive商店,我不认为在我的类路径中添加另一个
hive site.xml
会有帮助。我参考了不少文章和spark邮件列表,但找不到有人这样做

有人能建议我如何做到这一点吗

谢谢

参考文件:


    • 这在当前版本的Spark中似乎不可能实现。在Spark Repo中阅读,似乎可以为许多元存储配置
      hive.metastore.uri
      ,但它似乎仅用于相同元存储之间的冗余,而不是完全不同的元存储

      更多信息请点击此处

      但是,为了协调一致地处理数据,您可能必须在某个地方聚合数据。或者,您可以为每个商店创建多个Spark上下文


      您可以尝试为多个不同的元存储配置
      hive.metastore.uri
      ,但它可能不起作用。如果您决定为每个存储创建多个Spark上下文,请确保设置
      Spark.driver.allowMultipleContexts
      ,但这通常是不鼓励的,并且可能会导致意外的结果。

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

      经过彻底的研发,我成功地使用JDBC连接到两个不同的配置单元环境,并将配置单元表作为数据帧加载到Spark中进行进一步处理

      环境详细信息

      hadoop-2.6.0

      apache-hive-2.0.0-bin

      spark-1.3.1-bin-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
      }
      
      import org.apache.spark.SparkConf
      导入org.apache.spark.sql.SQLContext
      导入org.apache.spark.SparkContext
      对象HiveMultiEnvironment{
      def main(参数:数组[字符串]){
      var conf=new SparkConf().setAppName(“JDBC”).setMaster(“本地”)
      var sc=新的SparkContext(conf)
      var sqlContext=新的sqlContext(sc)
      //从环境1加载配置单元表(或)子查询
      val jdbcDF1=sqlContext.load(“jdbc”,Map(
      “url”->“jdbc:hive2://:10000/”,
      “数据库表”->”,
      “驱动程序”->“org.apache.hive.jdbc.HiveDriver”,
      “用户”->”,
      “密码”->”)
      jdbcDF1.foreach{println}
      //从环境2中加载配置单元表(或)子查询
      val jdbcDF2=sqlContext.load(“jdbc”,Map(
      “url”->“jdbc:hive2://:10000/”,
      “数据库表”->“或”,
      “驱动程序”->“org.apache.hive.jdbc.HiveDriver”,
      “用户”->”,
      “密码”->”)
      jdbcDF2.foreach{println}
      }
      //todo:业务逻辑
      }
      
      在加载期间,还可以使用SqlContext设置其他参数,例如设置partitionColumn。Spark reference doc中的“JDBC到其他数据库”部分下的详细信息:

      从Eclipse生成路径:

      我没有尝试过的

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


      希望这将是有用的。

      只是一个解决方法的想法:配置单元数据驻留在HDFS上无论如何,您可以在文件或目录上创建数据帧吗?我的意思是,
      sc.wholeTextFiles('hdfs://host/usr/hive/warehouse/mytable“)
      将为您提供配置单元表的内容。当然,你会对元数据失去信心,但它可能会成功。我问了自己同样的问题,搜索了很多,阅读了Spark的一些代码-到目前为止,我几乎相信这是不可能的,至少在同一个SparkContext中是不可能的:(@karthik manchala我试图安装Spark Hive并运行它HortonWorks沙盒,但我遇到了一些错误,你能帮我解决吗。代码库位于:。我在HortonWorks社区发布了一个问题,如果想看看。你想添加一些详细信息吗?也许更新到Spark 2.0.0?这个答案肯定很有帮助。我有tr我以前就遇到过这个问题,jdbc方法的问题是..我无法从dataframe createdStrange中选择特定列,它如何用于分析函数,因为sqlContext不支持配置单元中的分析函数。您能用hivecontext向我解释上述场景吗??