根据对各类生态组件的分析,较好的一种架构是:html
存储层:使用HDFS for Parquet/Kudu/Hbase(HDFS for Parquet和Kudu各有利弊,HBase做为补充)前端
资源调度层:YARN(也成为MR2)java
批处理:Hive(2.0中,beeline代替了hive控制台)或MapReducenode
上面也是Hadoop自己的三大组成部分。python
实时查询:Impala(也能够Spark)(Impala不支持基于HDFS的表修改操做,须要使用Kudu引擎,参考https://www.jianshu.com/p/a49e68c0015b)mysql
支持:SQL-92 支持:HDFS, HBase, 文本文件Parquet, Avro, SequenceFile, RCFile以及Snappy, GZIP, Deflate, BZIP 安全:Kerberos认证
MPP架构
Impalad: 与DataNode运行在同一节点上,由Impalad进程表示,一个datanode对应一个impalad,它接收客户端的查询请求(接收查询请求的Impalad为Coordinator,Coordinator经过JNI调用java前端解释SQL查询语句,生成查询计划树,再经过调度器把执行计划分发给具备相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果经过网络流式的传送回给Coordinator,由Coordinator返回给客户端。同时Impalad也与State Store保持链接,用于肯定哪一个Impalad是健康和能够接受新的工做。在Impalad中启动三个ThriftServer: beeswax_server(链接客户端),hs2_server(借用Hive元数据), be_server(Impalad内部使用)和一个ImpalaServer服务。 Impala State Store: 跟踪集群中的Impalad的健康状态及位置信息,由statestored进程表示,它经过建立多个线程来处理Impalad的注册订阅和与各Impalad保持心跳链接,各Impalad都会缓存一份State Store中的信息,当State Store离线后(Impalad发现State Store处于离线时,会进入recovery模式,反复注册,当State Store从新加入集群后,自动恢复正常,更新缓存数据)由于Impalad有State Store的缓存仍然能够工做,但会由于有些Impalad失效了,而已缓存数据没法更新,致使把执行计划分配给了失效的Impalad,致使查询失败。 Catalogd:做为metadata访问网关,从Hive Metastore等外部catalog中获取元数据信息,放到impala本身的catalog结构中。impalad执行ddl命令时经过catalogd由其代为执行,该更新则由statestored广播。 CLI: 提供给用户查询使用的命令行工具(Impala Shell使用python实现),同时Impala还提供了Hue,JDBC, ODBC使用接口。
执行计划: Impala: 经过词法分析生成执行计划,执行计划表现为一棵完整的执行计划树,能够更天然地分发执行计划到各个Impalad执行查询,在分发执行计划后,Impala使用拉式获取数据的方式获取结果,把结果数据组成按执行树流式传递聚集,减小的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。 impala的前端负责将sql转化成执行计划(java),包含两个阶段:单节点计划生成、并行化和分段。第一阶段对sql进行解析、分析、优化(RBO和CBO,统计信息目前只有表大小和列的NDV,无histogram),第二阶段生成分布式的执行计划,肯定是否要加exchange节点(是否存在partitioned join或hash aggregation),选择join strategy(partitioned join or broadcast join)等,最后以exchange为边界将计划分段(fragment),做为impala的基本运行单元。
实时MySQL数据同步:canal->Kafkasql
定时批量同步:sqoop,从mysql导出缓存
实时预测:Spark Streaming/Flink(优先)/Apache Storm(主要用于实时风控、推荐、实时统计的大屏幕,http://f.dataguru.cn/thread-907180-1-1.html)安全
Spark SQL和Impala的性能测试结果参考http://www.cnblogs.com/jins-note/p/9513448.html,http://www.cnblogs.com/wasu/p/5828586.html网络
SparkStreaming读Kafka数据写Kudu:https://cloud.tencent.com/developer/article/1158193(结合canal写到kafka,就实现Mysql实时到Kudu)
kafka落地到Hbase:https://www.cnblogs.com/liuwei6/p/6893036.html
新一代流式计算框架在金融行业的应用:https://blog.csdn.net/dingxiangtech/article/details/83022673
流式大数据处理的三种框架:Storm,Spark和Flink:https://blog.csdn.net/cm_chenmin/article/details/53072498
发行版:
优先使用CDH企业版或CDH Express,减小没必要要的整合时间浪费。
学习思路推荐:
一、先用CDH quick-start,从Spark或Impala开始(Kudu或Parquet先搞定一种),一开始HDFS/MapReduce会很无聊(在此过程当中不少HDFS的原理和事件就顺带掌握了)。
二、流式计算;
三、反过来开始安全、认证、集群安装;