一个好老好老的老程序员了。
全部博文(915)
分类: 云计算
2021-05-17 14:16:32
一、简介
(一)DataStax公司
DataStax 公司长久以来被人们认为是Apache Cassandra的商业公司,在C*项目的早期,DataStax公司贡献了85%以上的代码,DataStax也是近年代码的主要贡献者,占比在40-50%左右。
最近几年,DataStax专注于把 Cassandra数据库做成云原生的数据服务平台,简称C*-as-a-service。DataStax还推出了很多产品来帮助 Cassandra社区程序员开发,如开源的数据API网关。
二、大数据,数据湖,和Lambda架构简介
(一)大数据
如上所示,近年来大数据的特性主要可以总结为5V,5V特性如下。
l 5V定义/特性
1)体量/规模(volume)
Zetabyte (1021) era
2)速度(velocity)
物联网,移动程序,社交软件,流处理。
3)多样性(variety)
结构化,半结构化,无结构
4)准确性(veracity)
5)价值(value)
近些年来一个比较通用的对大数据特性的一个定位,体现在5个v上,这代表是5个英文单词的首字母都是V字母v比如说体量和规模是volume,velocity,variety,veracity,value。
(二)数据湖
l 所有企业数据的集合
1)数据源和格式的多样性
数据的原始格式
2)海量数据
量大,生成速度快
l 企业数据湖架构
1)大数据获取、处理、存储和使用的框架
2)大数据技术(水平扩展和高弹性)
数据湖可以从两个层面去理解。第一个是较静态的含义,指一个企业所有数据的集合,它反映了大数据的每个方面,数据来源的多样性,数据格式的多样性,巨大的数据体量以及数据快速生成等,这些都是大数据的典型特性。
更重要的一点是,它指一个比较动态的从端到端的数据处理框架,从原始数据开始,然后到基本的数据处理,然后把它存储到企业的中心的数据库里面,接着做进一步的分析处理,产生商业决策的信息,进而让下游系统利用,数据可视化的商业智能数据科学人工智能等。
所以从整个数据的生成到最后数据被系统利用起来,整个数据处理环节可以认为是一个企业数据库很关键的组成部分。
l 快数据
1)大数据不仅仅“大”,而且“快”
2)GB/秒或TB/秒
3)“新鲜”数据挖掘
批处理模式没法满足要求
近年来,当人们讨论大数据的时候,经常把重点放在“快”。这个“快”不仅意味着数据是以很快的速度生成,更多意义着整个数据的处理、分析、提取,然后最后到生成数据决策信息,整个过程是近乎实时的。
(三)Lambda架构
l 批处理层
1)主数据管理(Single source of Truth)
原始数据(raw data)
不可更改的(immutable)
追加更新(append only)
数据准确(externally true)
2)批处理视图预处理
预处理策略
l 速处理层:
1)处理新添加的数据
2)弥补批处理视图和新加数据之间的差距
l 服务层:
低延迟数据查询
高容错性(硬件问题,人为失误)
低延迟读和写(OLTP and OLAP)
线性拓展
易延展性
Lambda架构是较为通用且结构较好的架构,它主要有三层。
第一个是批处理层,它和传统数据仓库的批处理概念基本一致。
第二个是速处理层,许多平台所面临的问题是对实时数据的处理分析和挖掘,它的缺点是无法像批处理层一样处理大量历史数据,所以它更侧重于分析,利用传统批处理层的方式去处理历史数据。
第三个是服务层,它包括了很多不同的数据视图,这些数据视图可以从批处理层来,也可以从实时处理层来。这些这些数据视图主要是能帮助我们在企业的数据库的分布式企业数据库、环境里面解决高容错性问题,解决低延迟读写的问题,以及帮助企业数据库架构进行线性扩展。而且当有新的技术或服务出现时,可以很容易融入到现有的Lambda架构中。
三、Apach Cassandra,Spark,and Pulsar的Lambda实现
(一)Apach Cassandra
l 分布式,非主从结构、宽列开源NoSQL数据库
l 无缝多数据中心数据复制
l 线性扩展
l 强容错、零宕机
l 可调数据一致性控制,高性能读写
l 云原生(混合云,多云)
Cassandra数据库是分布式非主从结构的宽列NoSQL数据库,因为它没有主从结构,扩展性非常好,基本上是线性的扩展,而且每个数据会有多个副本。这意味着即便是有一个服务器宕机了,还有别的数据副本来满足用户的查询要求,容错率高。
(二)Apach Spark
Apache Spark是用于大规模数据处理的统一分析引擎,它有以下特性:
1)高性能
100X Hadoop(MapReduce)
2)易用,丰富的API和程序库
结构化,半结构化,无结构化数据
3)统一的,多用途数据分析处理引擎
流数据处理
机器学习
图数据库
SQL
(三)Apach Kafka or Pulsar
l 大规模、分布式消息/流数据处理平台
l 分开的计算层和数据存储层
更好的系统扩展和负载均衡
l 无缝跨数据中心数据复制
l 灵活的消息处理模式
发布/订阅
消息队列
混合模式
l 内置多租客系统支持
l 高性能,低延迟
目前最流行的流数据平台是Kafka,最近几年Pulsar也受到越来越多的关注。从流消息处理角度来看,Kafka和Pulsar非常相似,都是大规模分布式消息处理流数据平台,Pulsar的优点在于它的计算层和存储层是分开的,Kafka这两个是在一起的。
分开计算层和存储带来的优点显而易见,首先是系统的扩容性比较好,可以分开的扩容计算层和存储层。其次是计算是无状态的,所以说当扩容计算层的时候,它对系统的影响非常小,而且扩容速度极快。
(四)Lambda架构-Apach Cassandra,Spark,and Pulsar
上图是用Apach Cassandra,Spark,and Pulsar三种技术实现Lambda的架构图。
首先在批处理层,我们用 Cassandra数据库作为原始数据的主数据库,然后在速处理层我们用Pulsar来实时接受原数据的原数据流,在批处理层我们有定时的Spark Job,然后Spark Job从原始数据数据库里面读取数据进行分析和处理,接着把生成的数据放到服务层的数据库中。那么生成的服务层数据库就代表批处理数据视图,根据不同的需求可以生成不同的批处理视图,用同样的Spark Job来实现。
(五)Lambda架构:技术栈和实现平台
l 技术栈(全部开源)
1)Apache Cassandra
- 数据建模和CQL
- 客户端编程接口
- 编程语言:Java
2)Apache Spark
- DataStax Spark-Cassandra连接器
- SparkSQL
- DataFrame
- 编程语言:Scala
3)Apache Pulsar
- 生产者和消费者客户端编程接口
- Pulsar函数
- DataStax Pulsar-Cassandra联结器
4)其他
- DataStax dsbulk数据加载器
l 实现平台
1)DataStax Enterprise(DSE)
- 单集群,双数据中心部署模式
1 DSE Core/Cassandra
1 DSE Analytics/Spark
2)Apache Pulsar
- 单集群部署模式
3)DataStax Studio
- CQL,SparkSQL笔记本
(六)演示程序-应用场景示例
l 极简化的石油钻头探测器时序数据模拟
1)每个钻探地点有多个钻探头
2)每个钻探头有两种传感器:温度和速度
3)每个传感器每隔一段时间(1秒/1分钟)采集一次数据
l 需要回答的商业问题(示例)
1) 监控每个钻头的健康状况,防止过热/过速
2) 批处理视图
- 记录每个钻头每日的平均温度和转速
- 每天一次批处理
3) 速处理视图
- 记录一天之内出现钻头过热和过速的情况
- 实时处理
这个事例程序的应用场景是一个非常简单的石油钻头的探测器时序的数据模拟,上图是实际数据中包含的一些数据内容,包括钻头的ID,传感器的ID,传感器的类型,以及传感器的读取时间和传感器的读取值等。
在这个场景,每个钻探地点可能会有多个站头,每个钻头有两种传感器,一种监测温度,一种监测速度,每隔一段时间传感器就会收集一次数据,然后把它发送到Lambda平台。从而监控每个钻头健康状况,防止过热和过速。
从批处理视图来看,需要记录每个钻头每日的平均温度和转速,每日处理一次。从速处理视图来看,记录最近一天之内出现的钻头过热和过速的情况,是实时处理的。
? 演示示例子部件
负载生成器:负责生成这些生成一个大量的模拟数据的
负载加载器:把这些生成的原始数据加载到原始数据库里面
这里主要有三个空间,第一个是对应于原始数据的主数据库表Master,然后还有一个对应批数据视图数据库表的Batchview,速处理层对应是Realtimeview。
数据处理流程情况
l 第一步:预处理
1)创建C*键空间和表(C* CQL)
2)生成模拟的工作负载文件(负载生成器)
l 第二步:数据加载
1)(批处理层)将源数据加载到原始数据主数据库中(负载加载器)
2)(速处理层)将源数据以消息的方式实施发送到Pulsar主题中(Pulsar消息发布器)
l 第三步:数据处理,视图数据生成
1)(批处理层)每日源数据批处理;写入批处理视图(每日Spark汇总程序)
2)(速处理层)当日源数据实时处理;写入速处理视图(Pulsar函数,Pulsar C*连接器)
l 第四步:数据分析
Spark SQL
四、演示
DataStax Studio
Cassandra数据库的信息,第一步先确保这些键空间删掉了以后,这里并没有需要的键空间,然后创建一些新的键空间和表。
生成一个模拟数据(CSV文件),文件生成好了以后,让负载加载器将数据加载进来。
速处理层视图里面只能看到一些最近的数据,旧的数据已经被Function函数自动过滤掉了。
第二部分:云Cassandra + 云DLA Spark构建轻量化数据湖解决方案演示:
第一个需要开通对象存储oss,这是因为DLA Spark的jar包需要存储在oss上。
第二步需要有一个自己的云数据库Cassandra实例。
第三步获取你Cassandra的私网连接点,CQL端口、数据库、用户名、数据库、密码,这些信息会被用到来连接Cassandra实例。
实例信息查找:
进入控制台查看
第四步需要创建一个数据表并且插入一些数据,待会用来验证Spark可以正确地连接到这张数据表里面,读取数据。
最后一步需要为DLA准备访问Cassandra实例所需要的安全组ID和交换机ID,主要是作用于DLA spark的这些Cassandra实例,这些实例它需要挂载虚拟网卡才可以访问Cassandra。
交换机ID:可使用VSwith ID。
安全组ID:可使用VPC ID进入专有网络ID,查询已有安全组出方向
主要依赖是Cassandra connector 2.4.2版本
代码需要刚才准备好的那些连接Cassandra实例的信息,私网连接点,CQL端口,用户名密码以及表所在的表名。
总结:
第一步:开通oss存储,把jar包上传到oss上;
第二步:要拥有一个Cassandra实例;
第三步:从 Cassandra的控制台去获取连接Cassandra所需要的信息,比如它的用户名密码以及它连接的一些信息;
第四步:准备一张测试的表用于DLA Spark连接Cassandra的测试;
第五步:网络打通所需要的两个关键点,准备一个安全组ID和交换机ID用于创建Spark的虚拟网卡。