我在hbase商店有很多这样的记录(百万)
key = user_id:service_id:usage_timestamp value = some_int
这意味着用户在使用时间戳使用了服务id。
现在我想提供一些restapi来聚合这些数据。例如“查找请求用户的所有值之和”或“查找最大值”等等。所以我在找最好的练习。简单的java应用程序没有达到我的性能预期。
我目前的方法是通过ApacheSpark应用程序聚合数据,看起来很好,但在java rest api中使用它时存在一些问题,因为spark不支持请求-响应模型(我还查看了spark job server,看起来很原始和不稳定)
谢谢,
有什么想法吗?
2条答案
按热度按时间roqulrg31#
我看到两种可能性:
livy rest server-新的rest服务器,由cloudera创建。你可以用其他方式提交spark作业。它是由最大的大数据/spark公司之一的cloudera开发的新产品,因此很有可能在未来开发,而不是放弃
您可以运行spark thrift server,并像通过jdbc连接普通数据库一样进行连接。这是你的文件。工作流程:读取数据,预处理,然后由spark thrift服务器共享
如果您想将第三方应用程序与spark隔离开来,您可以创建一个简单的应用程序,该应用程序将具有用户友好的端点,并将端点接收到的查询转换为livy spark作业或将与spark thrift server一起使用的sql
ovfsdjhp2#
如果您使用cloudera(即cloudera搜索),我会提供hbase+solr
solrjapi,用于聚合数据(而不是spark),以便与rest服务交互
solr解决方案(在cloudera及其cloudera搜索中):
在solr中创建一个集合(类似于hbase表)。
索引:使用nrt lily indexer或自定义mapreduce solr document creator将数据作为solr文档加载。
如果您不喜欢nrt-lily indexer,您可以使用spark或mapreduce job与solrj一起为ex:spark-solr建立索引:用于将solr中的数据作为spark-rdd读取并使用solrj将spark中的对象索引到solr中的工具。
数据检索:使用solrj从web服务调用中获取solr文档。在Solr杰,
有一个fieldstatinfo,sum,max等等。。。。可以实现
有镶嵌面和镶嵌面枢轴来分组数据
rest api调用支持分页
您可以将solr结果与jersey或其他web服务集成,因为我们已经用这种方式实现了。
}
也看看
我在“在hbase之上的solr中创建索引”中的回答
https://community.hortonworks.com/articles/7892/spark-dataframe-to-solr-cloud-runs-on-sandbox-232.html
注意:我认为ElasticSearch也可以实现同样的效果。但根据我的经验,我对solr+solrj很有信心