大数据处理框架
Big Data Architecture

大数据和分布式这两个概念总是会混在一起。本文主要以大数据为主题,会有意识的不谈分布式系统。或者简单的认为分布式系统是实现大数据处理绕不开的手段。

大数据的大有两个角度,一种是静态数据数据量巨大;一种是流式数据数据永无止境。

Resource 大数据必然需要大量机器资源,资源的管理调度是最基础的课题

Yarn

yarn application -list -appStates ALL grep “rank” wc -l

yarn application -status application_9173934103802_23474815

hadoop job -list grep “rank” awk ‘{split($0,a,”\t”); print a[1],a[5],a[7],a[9],a[12]}’

K8s

Storing 大数据落盘的存储形式

Data Format

序列化格式: Kryo, protobuf, avro, thrift

数据格式: parquet, avro, json, orc, csv,

数据压缩: zstd, brotli, lz4, gzip, snappy, uncompressed

不同压缩方式的比较: https://blog.csdn.net/weixin_40040107/article/details/87885210

Data Lake数据存储中间Table format层

Data lake vs data warehouse, 数据湖和数据仓库的比较 数据湖的一个特点是,存储的数据没有预先设定schema,保存原始数据。 注意数据湖不是个项目,而是一个概念和思想。

数据湖想要解决的问题:

具备 ACID 能力的表格式中间件:

Apache Hudi

Hudi 是 Uber 主导开发的开源数据湖框架. 增量模型,简单来讲,是以 mini batch 的形式来跑准实时任务。Hudi 在增量模型中支持了两个最重要的特性,

Hudi表的数据文件,可以使用操作系统的文件系统存储,也可以使用HDFS这种分布式的文件系统存储。为了后续分析性能和数据的可靠性,一般使用HDFS进行存储。

Apache Iceberg

在不影响已存在数据使用体验的情况下支持以下特性:

Apache Paimon

Storage Cache

alluxio https://github.com/Alluxio/alluxio

EVCache https://github.com/Netflix/EVCache

Streaming 大数据流动的形式

kafka - http://kafka.apache.org/quickstart

生产者和消费者以极高的速度生产/消费大量数据或产生请求,从而占用broker上的全部资源,造成网络IO饱和。有了配额(Quotas)就可以避免这些问题。Kafka支持配额管理,从而可以对Producer和Consumer的produce&fetch操作进行流量限制,防止个别业务压爆服务器。

kafka junit

ZeroMQ - 点对点消息队列

区别bootstrap server 和 broker server

Kafka生产者客户端在配置中指定的bootstrap server不可用时,会尝试重新建立连接。Kafka客户端库内部实现了重试机制,用于处理短暂的网络故障或Broker的暂时不可用情况。

当生产者尝试与bootstrap server建立连接失败时,它会在一定的重试间隔后重试。这个重试间隔通常是可以配置的(例如,通过retries和retry.backoff.ms参数)。生产者会继续尝试,直到超过配置的重试次数或者在某次尝试中成功建立连接。

然而,如果你只配置了一个bootstrap server,而这个Broker长时间不可用,那么生产者将无法发送消息。在这种情况下,消息可能会堆积在生产者端,直到Broker重新变得可用。为了避免单点故障,建议在生产环境中配置多个bootstrap servers,这样即使一个Broker宕机,生产者也可以连接到其他Broker并继续发送消息。

需要注意的是,即使配置了多个bootstrap servers,一旦生产者成功连接到一个Broker并获取了元数据,它就不再依赖于初始的bootstrap server列表,因为它会知道所有分区的领导者Broker,并直接与它们通信。bootstrap servers列表主要是用于初始连接和获取集群状态信息。

Schedule Computing 批处理任务

纯离线调度数据任务。

MR

https://www.netjstech.com/p/hadoop-framework-tutorial.html

map运行阶段分为:Read、Map、Collect、Spill、Merge五个阶段。 reduce 运行阶段分为shuflle(copy) merge sort reduce write五个阶段。

每个阶段的数据都要落磁盘,因而数据量无论多大都能搞,因此也特别慢。

Tez

本质上还是基于mr,算是对mr做了dag方向的优化

Spark

spark是怎么工作的?

RDD - Resilient Distributed Dataset RDD lineage Lazy Evaluation shared variables - broadcast variables, accumulators

DPP机制

CodeGenerator 是干什么的?

INFO CodeGenerator: Code generated in xxx ms

Stream Computing 流处理任务

Storm

Spark Streaming

Graph Computing 图计算

OLTP && OLAP && HTAP

OLAP场景的关键特征

ES Elasticsearch https://www.elastic.co/start

注意python客户端版本与server端版本的兼容性,我发现7和8的兼容性不好。 概念比较

ClickHouse https://clickhouse.tech/

Doris https://doris.apache.org/master/en/

druid https://druid.apache.org/

kylin http://kylin.apache.org/

hologres https://www.hologres.io/

kudu https://kudu.apache.org/

HTAP

TiDB https://github.com/pingcap/tidb

参考

https://github.com/wangzhiwubigdata/God-Of-BigData

*****
Written by Lu.dev on 15 November 2020