文章目录

  • 技术选型主要考虑因素:
  • 数据采集传输:
  • 数据存储:
  • 数据计算:
  • 数据查询:
  • 任务调度:
  • 数据可视化:
  • 元数据监控:
  • 集群监控:


技术选型主要考虑因素:

数据量大小、业务需求、行业内经验、技术成熟度、开发维护成本、总成本预算

数据采集传输:

Flume、Kafka、Sqoop、Logstash、DataX
ELK【ElasticSearch、Logstash 和 Kibana】:处理数据量大于Mysql,但是处理不了 BP、TP级的大数据。
DataX :阿里巴巴集团内被广泛使用的离线数据同步工具/平台,
其核心组件:
Reader:数据采集模块,负责从源采集数据
Writer:数据写入模块,负责写入目标库
Framework:数据传输通道,负责处理数据缓冲等。

数据存储:

Mysql、HDFS、HBase、Redis、MongoDB
HBase:通常在实时项目中用来存储实时的(k,v)数据。列式数据库,字典查询,稀疏性存储,用于存储海量数据,底层基于HDFS,无法做关系数据库的主外键。
Redis:分布式缓存,强调缓存,内存中数据。
MongoDB:前端、Python工程师用的比较多,存储的数据量也不是特别大

数据计算:

Hive、Spark、Flink、Tez、Storm
Hive:核心工作就是把sql语句翻译成MR程序。
Spark:微批处理。是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
Flink:可实时,可批处理。是基于事件驱动的,是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。Flink相较于Spark Streaming 延迟更小,实时性更好,可以提供毫米级别的延迟水平。
Tez:是基于Hadoop Yarn之上的DAG(有向无环图,Directed Acyclic Graph)计算框架。它把Map/Reduce过程拆分成若干个子过程,同时可以把多个Map/Reduce任务组合成一个较大的DAG任务,减少了Map/Reduce之间的文件存储。同时合理组合其子过程,也可以减少任务的运行时间。
Storm:是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。(技术比较老了)

数据查询:

Presto、Druid、Impala、Kylin presto 和 Impala 基于内存,快速查询
Druid:可用于实时,可用于批处理,但是只能处理单表
Kylin:适用于多维度查询。

任务调度:

Azkaban、Oozie Oozie,其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。
Azkaban的工作流的创建特别方便,直接通过web界面创建工程,然后提交任务。(创建job的的文件必须是以.job的文件,并且上传的文件是以zip压缩包的形式进行上传)。

数据可视化:

Echarts、Superset、QuickBI、DataV

元数据监控:

Atlas

集群监控:

Zbbix