一、大数据框架:
Impala:hadoop的sql平台、支持hbase/hdfs、支持超大数据、支持多并发、sql支持好、对内存依赖比较严重。需要自己优化,并且有的语句超过内存会报错。
Spark:各种格式、各种计算(机器学习、图形计算)、可sql、可代码处理、支持scala/java/python语言开发。提供scala/python代码命令行运行、超大数据支持差。
Kylin:预计算、好优化、高性能、支持mr、spark、基于时间的增量更新、流式更新、数据源有hive/kafka、提供开发用的管理台是一套开发系统。由于有预计算、所以其他各个模块独立,能支持高并发。可以直接作为软件系统的数据源。
Phoenix:sql on hbase、快
Hbase:key/value、强一致性、不丢数据
Cassandra:弱一致性,数据可能丢失。可用性高、读写性能比hbase高、被facebook放弃了。
案例1:特别适合大数据sql查询
数据存入hbase,把hbase表结构隐射到hive,用Impala进行sql查询。
优点有三个:
A、Impala支持hdfs/hbase两个适用度比Phoenix更广,并且更稳定。
B、数据在hbase中,对数据的操作得以进行,hdfs中的数据是没法行级更新,删除的。并且速度也比hdfs快。无需字段分割解析,直接读取。
C、能在hive中为表结构,给开发和后面换用其他框架留下很大方便。
案例2:Zeppelin特别适合spark机器学习
Spark交互式开发平台
Zeppelin整合了Spark,Markdown,Shell,Angular等引擎,集成了数据分析和可视化等功能
提供了sql查询,和scala/python分析代码调试功能。
http://blog.csdn.net/guohecang/article/details/51324390。
案例3:Kylin:全功能大数据sql查询平台
预计算、好优化、高性能、支持mr、sparksql、基于时间的增量更新、流式更新、有开发管理台、数据源有hive/kafka。
由于有预计算、所以其他各个模块独立,能支持高并发。可以直接作为软件系统的数据源。
案例4:
Presto 玩的更绝,全程在内存中倒腾,需要对各个步骤下对象数据规模做到完全精细的把控。优势是速度快,支持的数据源多。
总结::
- MPP架构的系统(Presto/Impala/SparkSQL/Drill等)有很好的数据量和灵活性支持,但是对响应时间是没有保证的。当数据量和计算复杂度增加后,响应时间会变慢,从秒级到分钟级,甚至小时级都有可能。
- 搜索引擎架构的系统(Elasticsearch等)相对比MPP系统,在入库时将数据转换为倒排索引,采用Scatter-Gather计算模型,牺牲了灵活性换取很好的性能,在搜索类查询上能做到亚秒级响应。但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级。
- 预计算系统(Druid/Kylin等)则在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。
1. kylin 预计算。用户指定dimensions和要计算的metric,kylin通过MR将结果保存在HBase中,后续读取直接读HBase。适合那种业务清楚的知道自己要分析什么的场景。查询模式比较固定,只不过所查看的时间不同的场景。注意的点是要避免维度灾难。
2. presto java8写的,代码质量非常高。设计:纯内存,没有容错,一个task失败就整个query fail。需要注意调整内存相关,线程数等参数,容易OOM。benchmark还行。支持标准SQL
3.Spark sql 相对更‘原生‘一些,单纯的通用框架,和上面两位并不是同一层面上的东西。
二、深度学习框架:
TensorFlow:google开源的,当前版本已经有高级API、可视化工具、GPU支持、异步执行
DeepLearning4J:(DL4J)是一套基于Java语言的神经网络工具包,可以构建、定型和部署神经网络。DL4J与Hadoop和Spark集成,支持分布式CPU和GPU。
Keras:
Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow或Theano。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:
简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
支持CNN和RNN,或二者的结合
无缝CPU和GPU切换
Keras和DDPG