如何使用 Apache spark 作为查询引擎?

How to use Apache spark as Query Engine?

我正在使用 Apache Spark 进行大数据处理。数据从平面文件源或 JDBC 源加载到数据帧。作业是使用 spark sql.

从数据框中搜索特定记录

所以我不得不 运行 一次又一次地寻找新的搜索词。每次我必须使用 spark submit 提交 Jar 文件以获得结果。 由于数据大小为 40.5 GB,因此每次都将相同的数据重新加载到数据帧以获取不同查询的结果变得乏味

所以我需要的是,

  • a way if i can load the data in data frame once and query it multiple time with out submitting the jar multiple times ?
  • if we could use spark as a search engine/ query engine?
  • if we can load the data into data frame once and query the data frame remotely using RestAP

> The current configuration of My Spark Deployment is

  • 5 node cluster.
  • runs on yarn rm.

我曾尝试使用 spark-job 服务器,但它每次都会运行该作业。

您可能对 HiveThriftServer 和 Spark 集成感兴趣。

基本上你启动一个 Hive Thrift 服务器并从 SparkContext 注入你的 HiveContext 构建:

...
val sql = new HiveContext(sc)
sql.setConf("hive.server2.thrift.port", "10001")
...
dataFrame.registerTempTable("myTable")
HiveThriftServer2.startWithContext(sql)
...

有几个客户端库和工具可以查询服务器: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

包括 CLI 工具 - beeline

参考: https://medium.com/@anicolaspp/apache-spark-as-a-distributed-sql-engine-4373e254e0f9#.3ntbhdxvr

你也可以使用spark+kafka流式集成。只是您必须通过 kafka 发送您的查询,以便流式 API 接收。如果它简单,那是一种在市场上迅速流行的设计模式。

  1. 根据查找数据创建数据集。

  2. 通过 Kafka 启动 Spark 流式查询。

  3. 从您的 Kafka 主题中获取 sql

  4. 对已创建的数据集执行查询

这应该可以处理您的用例。

希望对您有所帮助!

对于 spark 搜索引擎,如果您需要全文搜索功能 and/or 文档级评分 - 而您没有 elasticsearch 基础架构 - 您可以尝试 Spark Search - it brings Apache Lucene support to spark.

df.rdd.searchRDD().save("/tmp/hdfs-pathname")
val restoredSearchRDD: SearchRDD[Person] = SearchRDD.load[Person](sc, "/tmp/hdfs-pathname")
restoredSearchRDD.searchList("(fistName:Mikey~0.8) OR (lastName:Wiliam~0.4) OR (lastName:jonh~0.2)",
                            topKByPartition = 10)
                 .map(doc => s"${doc.source.firstName}=${doc.score}"
                 .foreach(println)