Skip to content

Data Analysis Using Hadoop/Spark/Storm/ElasticSearch/MachineLearning etc. This is My Daily Notes/Code/Demo. Don't fork, Just star !

License

Notifications You must be signed in to change notification settings

junneyang/xxhadoop

Repository files navigation

xxhadoop

Data Analysis Using Hadoop/Spark/Storm/ES/MachineLearning etc. This is My Learning Notes/Code/Demo. Don't fork, Just star !

image

几个概念

  • BI: 包括ETL(数据的抽取、转换、加载),数据仓库(Data Warehouse),OLAP(联机分析处理),数据挖掘(Data Mining)等技术。
  • Data Mining:在大量数据中自动搜索隐藏于其中的有着特殊关系性(属于Association rule learning)的信息的过程。相比商务智能,数据挖掘是一种更加学术的说法,强调技术和方法。
  • OLAP:是一个建立数据系统的方法,其核心思想即建立多维度的数据立方体,以维度(Dimension)和度量(Measure)为基本概念,辅以元数据实现可以钻取(Drill-down/up)、切片(Slice)、切块(Dice)等灵活、系统和直观的数据展现。

数据处理开源技术分类汇总

计算引擎

  • Hadoop: Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。除了文件存储,Hadoop还有最完整的大数据生态,包括机器管理、NoSQL KeyValue存储(如HBase)、协调服务(Zookeeper等)、SQL on Hadoop(Hive)等。Hadoop生态架构图
  • Spark
  • Flink
  • Storm

列式数据库

  • HBase
  • Cassandra:Facebook开源NoSQL,解决HBase中心节点问题,无中心架构
  • Parquet:Hadoop的列存储格式

时间序列数据库

  • InfluxDB:分布式时间序列数据库
  • OpenTSDB:在HBase上的分布式时间序列数据库
  • Prometheus:一种时间序列数据库和服务监测系统
  • Heroic:基于Cassandra和Elasticsearch的可扩展的时间序列数据库

数据存储

  • 经典数据仓库: HDFS + ORC/Parqet + Hive/SparkSQL
  • 实时数据仓库: HDFS + Kudu + Impala
  • 在线分析: HDFS + HBase + Phoenix
  • 时序分析: OpenTSDB/InfluxDB/Prometheus
  • 多维分析: Druid/Kylin

文件系统&分布式存储

实时分析

  • RDB:MySQL/PostgreSQL/Oracle方案,或者GreenPlum方案。参考资料
  • 分布式数据库方案选型: 网易DDB、淘宝TDDL、MySQL Proxy、 MySQL Router、ShardSphere、DBLE、MongoDB替代等
  • Druid: Druid的很多设计思想来源于Google的秘密分析武器PowerDrill,从功能上,和Apache开源的Dremel也有几分相似。参考资料
  • Pinot:与Druid最接近的系统,Linkedin于2015年底开源的一个分布式列式数据存储系统。
  • Kylin:Apache开源的分布式分析引擎,提供了Hadoop之上的SQL查询接口及多维分析(OLAP)能力,可以支持超大规模数据。最初由eBay公司开发并于2015年贡献至开源社区。它能在亚秒内查询巨大的Hive表。Kylin, Mondrian, Saiku系统的整合可以作为通用的BI平台,参考:https://tech.youzan.com/kylin-mondrian-saiku/
  • Dremel:Google 的“交互式”数据分析系统,支持嵌套数据类型的列存储,这个特性是Druid缺少的。
  • Drill:Apache Drill 通过开源方式实现了 Google’s Dremel。Apache Drill的架构,整个思想还是通过优化查询引擎,进行快速全表扫描,以快速返回结果。
  • ElasticSearch:Elastic公司推出的一个基于Lucene的分布式搜索服务系统,它是一个高可靠、可扩展、分布式的全文搜索引擎。ES在前几年的定位一直是文本的倒排索引引擎,用于文本搜索的场景。最近几年,Elastic公司将ES用于日志分析和数据的可视化,慢慢转成一个数据分析平台。
  • Kudu:支持快速分析的新型Hadoop存储系统,一般联合Impala的SQL一起使用,官网,内存开销较大,速度稍好于Hive。
    - Crate:开源大数据存储,因为Elasticsearch性能实在太出众了,但是dsl接口不好使。有人拿Elasticsearch做为底层,上层封装了一个SQL接口,从何正式变成了一种数据库,叫 http://crate.io
  • Splunk:用于机器生成的数据的分析
  • 最新OLAP实时分析可选方案列表:ClickHouse、Palo、Doris、Druid、Pinot、CrateDB、TiDB、Kylin、GreenPlum等
  • 阿里云E-MR架构: 参考资料
  • Hologres架构回归问题本质: 数据仓库、数据湖、流批一体,终于有大神讲清楚了

SQL On Hadoop方案

  • Hive/SparkSQL
  • Impala/Presto/Shark
  • HBase + SQL(Phoenix, Salesforce开源)

数据采集与ETL

  • Apache Flume:管理大量日志数据的服务,参考
  • Apache Kafka:分布式发布-订阅消息系统
  • Apache Sqoop:在Hadoop和结构化的数据存储区之间传送数据的工具
  • Facebook Scribe:流日志数据聚合器
  • Fluentd:采集事件和日志的工具
  • Logstash:用于管理事件和日志的工具
  • Linkedin Gobblin:LinkedIn的通用数据摄取框架
  • StreamSets Data Collector:连续大数据采集的基础设施,可简单地使用IDE
  • Statsd:StatsD 是一个 NodeJs 的 daemon 程序,简单轻巧,使用 UDP 协议,专门用来收集数据,收集完数据就发送到其他服务器进行处理
  • LogDevice:来自Facebook的分布式日志数据存储系统 参考1 参考2
  • 调用链跟踪系统方案选型: jaeger pinpoint skywalking zipkin等, 其中grafana支持jaeger,zipkin数据源
  • 数据同步最新方案选型:Waterdrop 、LogStash、INSERT SELECT全量(MySQL/Kafka/HDFS)、DataX、Kettle、Sqoop、StreamSets、Altinity/clickhouse-mysql-data-reader、KafkaConnector(Debezium)、Gobblin等方案

算法与AI

  • 分布式训练:TensorFlow(tf.distribute)、Pytorch(DistributedDataParallel)
  • Horovod(Uber 开发的用于分布式训练的开放源代码 all reduce 框架), REF: https://github.com/horovod/horovod

任务调度与工作流

  • Spotify Luigi:构建批处理作业的复杂管道的Python包,它能够处理依赖性解析、工作流管理、可视化、故障处理、命令行一体化等等问题
  • Apache Aurora:在Apache Mesos之上运行的服务调度程序
  • Marathon:用于长期运行服务的Mesos框架
  • Apache Oozie:工作流作业调度程序
  • Chronos:分布式容错调度
  • Linkedin Azkaban:批处理工作流作业调度
  • Schedoscope:Hadoop作业敏捷调度的Scala DSL;
  • Sparrow:调度平台
  • Airflow:一个以编程方式编写、调度和监控工作流的平台
  • jobber: 简单的替代cron的工具, 参考1, 参考2
  • schedulix:enterprise job scheduling system, 参考1 参考2
  • JobX:Let's scheduling easy http://www.jobxhub.com
  • metronome: Apache Mesos framework for scheduled jobs https://dcos.github.io/metronome/ https://github.com/ovh/metronome-ui
  • ovh/cds: Enterprise-Grade Continuous Delivery & DevOps Automation Open Source Platform
  • uber/cadence工作流引擎: https://github.com/uber/cadence
  • 近期更新: Argo、Airflow、ooize、AZKaban、Luigi、elastic-job、quartz、xxl-job、Schedulis、Uber/cadence、Spinnaker/orca、incubator-dolphinscheduler等

系统部署运维

  • Apache Ambari:Hadoop管理的运作框架,是一个类似marathon的CS模式的框架,并且可以自定义新的服务。参考1 参考2
  • Apache Bigtop:Hadoop生态系统的打包、部署框架,依赖puppet的工作流
  • Apache Helix:集群管理框架
  • Apache Slider:一种YARN应用,用来部署YARN中现有的分布式应用程序
  • Brooklyn:用于简化应用程序部署和管理的库,支持编排、部署、生命周期管理、监控等,Java开发,非常类似Ambari的特性。参考1 Docker + Apache Brooklyn = Clocker
  • Buildoop:基于Groovy语言,和Apache BigTop类似
  • Cloudera HUE:和Hadoop进行交互的Web应用程序
  • Hortonworks HOYA:可在YARN上部署HBase集群的应用

监控告警方案

  • 传统方案:StatsD/CollectD + Influxdb/whisper + Grafana/graphite
  • 容器监控方案(K8S):Heapster(cAdvisor)+Grafana+InfluxDB/ElasticSearch
  • 主机监控方案(marathon):node-exporter、prometheus、grafana + alartmanager
  • 采集 cAdvisor, Heapster, collectd, Statsd, Tcollector, Scout
  • 存储 InfluxDb, OpenTSDB, Elasticsearch
  • 展示 Graphite, Grafana, facette, Cacti, Ganglia, DataDog
  • 告警 Nagios, prometheus, Icinga, Zabbix
  • glances:Glances an Eye on your system. A top/htop alternative 参考1
  • 方案: 方案 收集:statsd/collectd/cadvisor/node-exporter 缓冲:kafka/logstash 存储与多维分析:druid/es/prometheus 可视化:grafana 报表:metabase/superset 告警:alertmanager 监控维度 系统(cpu mem disk net) 进程 中间件

BI与可视化

  • Tableau:商业智能平台
  • Qilk:商业智能和分析平台
  • FineBI:国内商业BI平台
  • Looker:新生代商用BI工具
  • Pentaho:商业智能平台
  • Redshift:Amazon服务,可以理解为用于大数据分析的PostgreSQL,基于PostgreSQL的数据仓库服务
  • Superset:最初Airbnb开源,目前Apache Incubator孵化器项目,需要选择指标Metric、分组条件、过滤条件作图,SQL支持较弱,不够灵活,Join支持较弱 ;Superset在0.11版本之后加入SQL Lab功能,好像比较差;文档不够好;长期只有一个主力开发;Flask App Builder: 应用框架;SQLAlchemy:ORM支持SQL查询 ;React + Redux:前端SQL编辑器交互。参考
  • Redash:输入SQL输出图标;支持Query Snippet与Query Parameters,灵活支持定制参数;文档丰富;长期只有一个主力开发;Flask-RESTful:应用框架;Flask-SQLAlchemy:数据库操作;Flask-Login:认证授权;AngularJS(1.5):前端;Redis:查询锁,防止多个相同查询同时进行;docker-compose:一键部署
  • Metabase:Metabase非常注重非技术人员(如产品经理、市场运营人员)在使用这个工具时的体验,让他们能自由地探索数据,回答自己的问题;有一个团开发;Metabase是三个项目中唯一提供完整 API 文档的项目;Clojure:后端语言;React + Redux:前端语言。参考
  • Tableau:商业智能平台,https://www.tableau.com/zh-cn/products/prep#video
  • PowerBI: 商业智能平台
  • SpagoBI:开源商业智能平台
  • Imply:An interactive data exploration UI for Druid http://pivot.imply.io/
  • 可视化参考资源: https://github.com/thenaturalist/awesome-business-intelligence
  • 三大开源方案: redash、superset、metabase

可视化

  • Kibana 更偏向可视化;针对ES的数据可视化方案,可查询日志数据、构建仪表盘;既支持检索,又支持数据浏览
  • Grafana 更偏向可视化;开源仪表盘工具,支持Graphite、InfluxDB与 OpenTSDB、Elasticsearch、druid等数据源;支持可视化,不做数据的检索与浏览;两个工具可以结合使用,Kibana分析数据-->ES-->再使用Grafana渲染
  • Graphite:可扩展的实时图表
  • Zeppelin:a notebook-style collaborative data analysis
  • Jtopo: 拓扑可视化,参考1 参考2 参考3

物联网IOT

  • TempoIQ:基于云的传感器分析
  • 2lemetry:物联网平台
  • Pubnub:数据流网络
  • ThingWorx:ThingWorx 是让企业快速创建和运行互联应用程序平台
  • IFTTT:IFTTT 是一个被称为 “网络自动化神器” 的创新型互联网服务,它的全称是 If this then that,意思是“如果这样,那么就那样
  • Evrythng:Evrythng则是一款真正意义上的大众物联网平台,使得身边的很多产品变得智能化

云计算平台建设

  • 发展理念:大中台、小前台
  • 建设路线:云化、平台化、服务化、一体化、自动化、智能化、场景化
  • 主要方向:采集平台、数据平台、多维分析与BI平台、Web应用微服务平台、调度平台、可视化平台、运维监控平台
  • 影响力建设:Confluence-Wiki系统建设、物联网平台计划

参考资料

规范参考

Redis使用规范

  • 参考资料:https://developer.aliyun.com/article/531067 https://www.aliyun.com/product/kvstore?spm=5176.19720258.J_8058803260.172.12652c4axakLlV
    0、Redis集群模式:MS主从、Sentinel哨兵、Cluster集群、读写分离、客户端分片等架构
    1、防止Key冲突,推荐使用形如[业务名:表名:ID]格式
    2、防止Key过长,简洁命名减少内存占用,如:user:{uid}可调整为u:{uid}
    3、拒绝BigKeys,string<10K,list、set、hash、zset元素不超过5K
    4、选择合适的数据类型,string、hash、list、set、zset
    5、控制Key的生命周期,防止集中过期
    6、禁止暴力扫描、暴力操作,如KEYS、HGETALL等
    7、分布式锁可以使用ZK实现,集群版Redis理论上不能保证强一致性
    8、缓存一致性:Cache-Aside(先更新DB/再删除缓存)、延时双删(先删缓存/再更新DB)
    9、注意缓存穿透、击穿、雪崩、热Key问题(HA、预热、限流降级、随机过期、慢查监控)
    

MySQL使用规范

  • 参考资料:https://www.cnblogs.com/huchong/p/10219318.html
    0、统一编码utf8mb4、统一引擎innodb
    1、单表数据量500W以内(通过归档、分库分表解决大数据)
    2、减少表宽度(冷热分离、Text/Bob分离)
    3、数据类型空间优化(如IP转INT存储、无符号数范围)
    4、所有字段NOT NULL(COUNT、SUM、=会出现非预期结果)
    5、使用Datetime存储时间(避免使用Timestamp、String)
    6、财务相关字段使用Decimal实现精准浮点数
    7、使用Varchar(20)存储手机号
    8、使用自增字段作为主键
    9、优先使用联合索引,控制索引数量<5
    10、索引字段按照区分度高低顺序建立联合索引
    11、优先使用覆盖索引(包含了SWOG全部字段)
    12、避免使用外键约束,但关联字段需要使用索引
    13、使用SQL预编译避免安全问题、提升性能
    14、禁止使用SELECT*,禁止INSERT不含字段名
    15、避免JOIN太多表关联与复杂查询
    16、避免WHERE条件使用函数(如date(create_time) > '20210201')
    17、拆分复杂的SQL为多条SQL语句分开执行计算
    18、100W行以上的操作分批次执行(如INSERT、UPDATE、DELETE操作)
    19、使用慢查询监控
    20、使用半同步复制模式,保证事务不丢失
    21、数据库连接不跨机房,通过RPC调用跨IDC
    22、避免ALTER TABLE,建议走建新表->数据复制->改表名->删原表的流程
    23、使用分库分表解决数据写压力;使用读写分离、负载均衡、缓存等解决数据读压力