使用Apache Spark作为Web应用程序的后端

时间:2015-03-26 10:39:48

标签: scala hadoop apache-spark

我们在HDFS中存储了数TB的数据,包括客户数据和行为信息。业务分析师希望使用过滤器对这些数据进行切片和切割。

这些过滤器类似于Spark RDD过滤器。过滤器的一些示例是: age > 18 and age < 35date between 10-02-2015, 20-02-2015gender=malecountry in (UK, US, India)等。我们希望在基于JSF(或Play)的Web应用程序中集成此过滤器功能。

分析师希望通过应用/删除过滤器进行试验,并验证最终过滤数据的计数是否符合要求。这是一个重复练习,使用此Web应用程序的最大人数可能在100左右。

我们计划使用Scala作为实现过滤器的编程语言。 Web应用程序将在服务器的加载时初始化单个SparkContext,并且每个过滤器将重用相同的SparkContext。

Spark是否适用于通过Web应用程序进行交互式查询的用例。另外,共享一个SparkContext的想法,这是一种解决方法吗?另一个替代方案是Apache Hive with Tez引擎使用ORC压缩文件格式,并使用JDBC / Thrift查询。对于给定的工作,这个选项比Spark更好吗?

5 个答案:

答案 0 :(得分:4)

它不是Spark的最佳用例,但它完全有可能。但延迟可能很高。

您可能需要查看Spark Jobserver,它应该提供您所需的大多数功能。您还可以使用Spark的JDBC Thrift服务器获取数据的SQL视图。

总的来说,我建议使用SparkSQL,它已经处理了很多你可能感兴趣的事情。

另一种选择是使用Databricks Cloud,但它尚未公开。

答案 1 :(得分:3)

  

分析师希望通过应用/删除过滤器进行试验,并验证最终过滤数据的计数是否符合要求。这是一个重复练习,使用此Web应用程序的最大人数可能在100左右。

Apache Zeppelin提供了一个框架,用于使用apache spark作为后端以交互方式摄取和可视化数据(通过Web应用程序)。这是展示功能的video

  

另外,共享单个SparkContext的想法是一种解决办法吗?

看起来该项目使用单个sparkContext进行低延迟查询作业。

答案 2 :(得分:1)

我想知道你最终选择了哪种解决方案。

我有两个主张:

  1. 遵循@quickinsights的zeppelin概念,还有现在已经建立的交互式笔记本jupyter。它首先是为python设计的,但可以安装专门的内核。几个月前我尝试使用toree。基本安装很简单:

    pip install jupyter

    pip install toree

    jupyter install toree

    但当时我不得不这样做 几个低级别的twicks使其有效(s.as编辑/usr/local/share/jupyter/kernels/toree/kernel.json)。但它有效,我可以使用scala笔记本中的火花簇。 Check this tuto, it fits what I have in memory

  2. 关于spark的大多数(所有?)文档讲述了使用spark-submit运行应用程序或使用spark-shell进行交互式使用(抱歉,但是spark和scala shell非常令人失望......)。他们从不谈论在交互式应用程序中使用spark,例如web-app。这是可能的(我尝试过),但确实有一些问题需要检查,例如您提到的共享sparkContext,以及有关管理依赖项的一些问题。您可以在spring web-app中检查我使用spark two getting-started-prototypes。它是在java中,但我强烈建议使用scala。我没有用足够的时间来学习很多东西。但是我可以说这是可能的,并且它运行良好(尝试在边缘节点上运行的12节点集群+应用程序)

    请记住,火花驱动程序,即运行rdd的代码,应该与火花节点在同一个集群上:驱动程序和工作人员之间有很多通信。

答案 3 :(得分:1)

Apache Livy支持从Web /移动应用程序提供程序化,容错,多租户提交Spark作业(无需Spark客户端)。因此,多个用户可以同时与Spark群集进行交互。

答案 4 :(得分:0)

我们公司遇到了类似的问题。我们有〜2-2.5 TB的日志形式的数据。对该数据进行了一些基本分析。

我们使用了以下内容:

  • Apache Flink,用于通过Hive将数据从源流式传输到HDFS。

  • 在HDFS顶部配置了Zeppelin。

  • 用于Join和JDBC连接以通过HDFS连接到HDFS的SQL接口 蜂巢。

  • 使批量数据脱机的火花

您可以使用Flink + Hive-HDFS

  

可以通过SQL应用过滤器(是的!最新版本支持所有功能)

     

Zeppelin可以自动执行报表生成任务,并且具有很酷的过滤器功能,而无需使用$ {sql-variable}功能真正协调sql查询。

检查一下。我相信您会找到答案的:)

谢谢。