Scala 更好的蜂巢火花连接?

Scala 更好的蜂巢火花连接?,scala,apache-spark,hive,Scala,Apache Spark,Hive,我正在回顾一个旧的Spark软件,它必须并行运行许多小查询和计数,并使用direct Hive SQL从t中选择COUNT* 过去,该软件通过在shell sys.process上运行每个by来解决并行化查询的问题。我不能使用现代新鲜火花,目前只有火花v2.2。下面的片段演示了完整的SQL查询方法 有一种Spark方式可以访问配置单元并运行SQL查询,而Spark配置的性能和重用性却几乎并没有提高?没有失去纯蜂巢或与原生蜂巢Spark并行的风险 说明 您没有提到您所处的平台,但在HDP的情况下,

我正在回顾一个旧的Spark软件,它必须并行运行许多小查询和计数,并使用direct Hive SQL从t中选择COUNT*

过去,该软件通过在shell sys.process上运行每个by来解决并行化查询的问题。我不能使用现代新鲜火花,目前只有火花v2.2。下面的片段演示了完整的SQL查询方法

有一种Spark方式可以访问配置单元并运行SQL查询,而Spark配置的性能和重用性却几乎并没有提高?没有失去纯蜂巢或与原生蜂巢Spark并行的风险

说明
您没有提到您所处的平台,但在HDP的情况下,您可以使用Spark Warehouse连接器访问蜂巢。我希望在仍然利用配置单元的元数据管理,甚至在表/列级别设置的安全策略的同时,能够获得良好的性能

以下是文件:


如果您没有集成的平台,您有时可以通过避免配置单元并只允许完全访问Hdfs上的仓库目录来获得性能,当然这可能会产生安全问题

您没有提到您所处的平台,但在HDP的情况下,您可以使用Spark Warehouse连接器访问蜂巢。我希望在仍然利用配置单元的元数据管理,甚至在表/列级别设置的安全策略的同时,能够获得良好的性能

以下是文件:


如果您没有集成的平台,您有时可以通过避免配置单元并只允许完全访问Hdfs上的仓库目录来获得性能,当然这可能会产生安全问题

您可以使用Spark连接上的配置单元来运行Spark SQL。

第二种方法是Spark Thrift server—参见示例 如何让它运行注意,Spark的默认情况下并不附带Thrift Server,您可能需要重新构建Spark才能获得这个添加的Phive thriftserver

第三种方法是ApacheLivy。Livy的最新版本0.6也增加了节俭服务。 此方法可与本地Spark节约服务进行比较

就性能而言,所有这些选项都相似/相同

例如,如果您使用的是CDH5,CDH5的蜂巢是硬连线的,可以使用Spark 1运行,因此,如果您错过Spark 2的改进,则会受到间接惩罚。 CDH6没有这个问题

请注意,您的问题并不清楚您为什么要使用蜂箱。 您可以通过上述方法2和3直接使用Spark SQL

如果必须从Java/Scala应用程序访问Spark SQL,可以通过Thrift Server/Livy Thrift Server与Spark建立直接JDBC连接

就性能而言,另一个需要记住的方面是您期望的并发连接数。Spark方法1上的配置单元和Spark Thrift Server方法2为每个用户创建一个单独的Spark会话,因此1创建新连接会受到惩罚,2根据此体系结构可以支持的用户数量,它无法很好地扩展


另一方面,Livy Thrift Server允许利用Spark的公平调度程序。基本上,您可以在同一个Spark会话中同时运行多个Spark查询/作业,可能需要手动构建,请参阅

您可以使用Spark连接上的配置单元来运行Spark SQL。

第二种方法是Spark Thrift server—参见示例 如何让它运行注意,Spark的默认情况下并不附带Thrift Server,您可能需要重新构建Spark才能获得这个添加的Phive thriftserver

第三种方法是ApacheLivy。Livy的最新版本0.6也增加了节俭服务。 此方法可与本地Spark节约服务进行比较

就性能而言,所有这些选项都相似/相同

例如,如果您使用的是CDH5,CDH5的蜂巢是硬连线的,可以使用Spark 1运行,因此,如果您错过Spark 2的改进,则会受到间接惩罚。 CDH6没有这个问题

请注意,您的问题并不清楚您为什么要使用蜂箱。 您可以通过上述方法2和3直接使用Spark SQL

如果必须从Java/Scala应用程序访问Spark SQL,可以通过Thrift Server/Livy Thrift Server与Spark建立直接JDBC连接

就性能而言,另一个需要记住的方面是您期望的并发连接数。Spark方法1上的配置单元和Spark Thrift Server方法2为每个用户创建一个单独的Spark会话,因此1创建新连接会受到惩罚,2根据此体系结构可以支持的用户数量,它无法很好地扩展


另一方面,Livy Thrift Server允许利用Spark的公平调度程序。基本上,您可以在同一个Spark会话中同时运行多个Spark查询/作业,可能需要手动构建,请参阅

Hi@mazaneicha我编辑以显示
e点:没有风险?我认为这不是连接本身。我添加了一些信息。在迁移到Spark native后,我希望看到与Re先生上的Hive相比,性能从更好到更优越。连接—HiveServer2本身是并发查询的主要瓶颈和资源占用者。正如@mazaneicha所述,如果可以的话,一定要尽快离开Hive。如果调整正确的话,Native Spark在性能方面是一个不需要动脑筋的工具。我编辑了Hi@mazaneicha,以表明这一点:没有风险?我认为这不是连接本身。我添加了一些信息。在迁移到Spark native后,我希望看到与Re先生上的Hive相比,性能从更好到更优越。连接—HiveServer2本身是并发查询的主要瓶颈和资源占用者。正如@mazaneicha所述,如果可以的话,一定要尽快离开Hive。如果调整正确,Native Spark在性能方面是一款不需要动脑筋的产品。谢谢Dennis!,我编辑过,是Spark 2.2,所有其他不太旧的软件都使用Scala Spark 2.2。。问题的重点是关于失去性能的风险。那么,除了我在最后提到的替代方案之外,你可能找不到任何与性能有关的东西。谢谢丹尼斯!,我编辑过,是Spark 2.2,所有其他不太旧的软件都使用Scala Spark 2.2。。问题的重点是关于失去性能的风险。那么,除了我在最后提到的替代方案之外,你可能找不到任何与性能有关的东西。
package br.com.generaldq.utils

import org.apache.log4j.Logger

object HiveUtils {

  val log: Logger = Logger.getLogger(HiveUtils.getClass)

  def beelineExec(hql: String, queue: String = "DataQuality"): String = {
    // here the beeline call and parameters are fixed, 
    // no reuse of Spark configurations.
    val serversHive=List("etc:2181", "etc2:2181")
    log.info(hql)
    val bl =
      Seq("beeline", "-u", "'jdbc:hive2://etcEtc","--hiveconf","... ETC...", "-e",
        "\""+hql+"\""
      )
    import sys.process._
    var result =
      try {
         Process(bl).!!
      } catch {
        case e: Exception =>
          log.error(s"Error '${e}' on executing Hive query.\nQuery: ${hql}\n")
          s"Error on executing Hive query. Query: ${hql}"
      }
    result
  }

}