大数据架构梳理

根据对各种生态组件的分析,较好的一种架构是:

 存储层:使用HDFS for Parquet/Kudu/Hbase(HDFS for Parquet和Kudu各有利弊,HBase作为补充)

资源调度层:YARN(也成为MR2)

批处理:Hive(2.0中,beeline代替了hive控制台)或MapReduce

上面也是Hadoop本身的三大组成部分。

实时查询:Impala(也可以Spark)(Impala不支持基于HDFS的表修改操作,需要使用Kudu引擎,参考https://www.jianshu.com/p/a49e68c0015b)

支持: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->Kafka

定时批量同步: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 

Practical Real-time Data Processing and Analytics: Distributed Computing and Event Processing using Apache Spark, Flink, Storm, and Kafka

发行版:

优先使用CDH企业版或CDH Express,减少不必要的整合时间浪费。

学习思路推荐:

1、先用CDH quick-start,从Spark或Impala开始(Kudu或Parquet先搞定一种),一开始HDFS/MapReduce会很无聊(在此过程中很多HDFS的原理和事件就顺带掌握了)。

2、流式计算;

3、反过来开始安全、认证、集群安装; 

猜你喜欢

转载自www.cnblogs.com/zhjh256/p/10573684.html