我们在HDFS中存储了数TB的数据,包括客户数据和行为信息。业务分析师希望使用过滤器对这些数据进行切片和切割。
这些过滤器类似于Spark RDD过滤器。过滤器的一些示例是:
age > 18 and age < 35
,date between 10-02-2015, 20-02-2015
,gender=male
,country in (UK, US, India)
等。我们希望在基于JSF(或Play)的Web应用程序中集成此过滤器功能。
分析师希望通过应用/删除过滤器进行试验,并验证最终过滤数据的计数是否符合要求。这是一个重复练习,使用此Web应用程序的最大人数可能在100左右。
我们计划使用Scala作为实现过滤器的编程语言。 Web应用程序将在服务器的加载时初始化单个SparkContext,并且每个过滤器将重用相同的SparkContext。
Spark是否适用于通过Web应用程序进行交互式查询的用例。另外,共享一个SparkContext的想法,这是一种解决方法吗?另一个替代方案是Apache Hive with Tez引擎使用ORC压缩文件格式,并使用JDBC / Thrift查询。对于给定的工作,这个选项比Spark更好吗?
答案 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)
我想知道你最终选择了哪种解决方案。
我有两个主张:
遵循@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
关于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查询。
检查一下。我相信您会找到答案的:)
谢谢。