DataStax公司长久以来被人们认为是ApacheCassandra的商业公司,在C*项目的早期,DataStax公司贡献了85%以上的代码,DataStax也是近年代码的主要贡献者,占比在40-50%左右。
最近几年,DataStax专注于把Cassandra数据库做成云原生的数据服务平台,简称C*-as-a-service。DataStax还推出了很多产品来帮助Cassandra社区程序员开发,如开源的数据API网关。
二、大数据,数据湖,和Lambda架构简介
(一)大数据
如上所示,近年来大数据的特性主要可以总结为5V,5V特性如下。
l5V定义/特性
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)主数据管理(SinglesourceofTruth)
原始数据(rawdata)
不可更改的(immutable)
追加更新(appendonly)
数据准确(externallytrue)
2)批处理视图预处理
预处理策略
l速处理层:
1)处理新添加的数据
2)弥补批处理视图和新加数据之间的差距
l服务层:
低延迟数据查询
高容错性(硬件问题,人为失误)
低延迟读和写(OLTPandOLAP)
线性拓展
易延展性
Lambda架构是较为通用且结构较好的架构,它主要有三层。
第一个是批处理层,它和传统数据仓库的批处理概念基本一致。
第二个是速处理层,许多平台所面临的问题是对实时数据的处理分析和挖掘,它的缺点是无法像批处理层一样处理大量历史数据,所以它更侧重于分析,利用传统批处理层的方式去处理历史数据。
第三个是服务层,它包括了很多不同的数据视图,这些数据视图可以从批处理层来,也可以从实时处理层来。这些这些数据视图主要是能帮助我们在企业的数据库的分布式企业数据库、环境里面解决高容错性问题,解决低延迟读写的问题,以及帮助企业数据库架构进行线性扩展。而且当有新的技术或服务出现时,可以很容易融入到现有的Lambda架构中。
三、ApachCassandra,Spark,andPulsar的Lambda实现
(一)ApachCassandra
l分布式,非主从结构、宽列开源NoSQL数据库
l无缝多数据中心数据复制
l线性扩展
l强容错、零宕机
l可调数据一致性控制,高性能读写
l云原生(混合云,多云)
Cassandra数据库是分布式非主从结构的宽列NoSQL数据库,因为它没有主从结构,扩展性非常好,基本上是线性的扩展,而且每个数据会有多个副本。这意味着即便是有一个服务器宕机了,还有别的数据副本来满足用户的查询要求,容错率高。
(二)ApachSpark
1)高性能
100XHadoop(MapReduce)
2)易用,丰富的API和程序库
结构化,半结构化,无结构化数据
3)统一的,多用途数据分析处理引擎
流数据处理
机器学习
图数据库
SQL
(三)ApachKafkaorPulsar
l分开的计算层和数据存储层
更好的系统扩展和负载均衡
l无缝跨数据中心数据复制
l灵活的消息处理模式
发布/订阅
消息队列
混合模式
l内置多租客系统支持
l高性能,低延迟
分开计算层和存储带来的优点显而易见,首先是系统的扩容性比较好,可以分开的扩容计算层和存储层。其次是计算是无状态的,所以说当扩容计算层的时候,它对系统的影响非常小,而且扩容速度极快。
(四)Lambda架构-ApachCassandra,Spark,andPulsar
上图是用ApachCassandra,Spark,andPulsar三种技术实现Lambda的架构图。
首先在批处理层,我们用Cassandra数据库作为原始数据的主数据库,然后在速处理层我们用Pulsar来实时接受原数据的原数据流,在批处理层我们有定时的SparkJob,然后SparkJob从原始数据数据库里面读取数据进行分析和处理,接着把生成的数据放到服务层的数据库中。那么生成的服务层数据库就代表批处理数据视图,根据不同的需求可以生成不同的批处理视图,用同样的SparkJob来实现。
(五)Lambda架构:技术栈和实现平台
l技术栈(全部开源)
1)ApacheCassandra
-数据建模和CQL
-客户端编程接口
-编程语言:Java
2)ApacheSpark
-DataStaxSpark-Cassandra连接器
-SparkSQL
-DataFrame
-编程语言:Scala
3)ApachePulsar
-生产者和消费者客户端编程接口
-Pulsar函数
-DataStaxPulsar-Cassandra联结器
4)其他
-DataStaxdsbulk数据加载器
l实现平台
1)DataStaxEnterprise(DSE)
-单集群,双数据中心部署模式
1DSECore/Cassandra
1DSEAnalytics/Spark
2)ApachePulsar
-单集群部署模式
3)DataStaxStudio
-CQL,SparkSQL笔记本
(六)演示程序-应用场景示例
l极简化的石油钻头探测器时序数据模拟
1)每个钻探地点有多个钻探头
2)每个钻探头有两种传感器:温度和速度
l需要回答的商业问题(示例)
1)监控每个钻头的健康状况,防止过热/过速
2)批处理视图
-记录每个钻头每日的平均温度和转速
-每天一次批处理
3)速处理视图
-记录一天之内出现钻头过热和过速的情况
-实时处理
从批处理视图来看,需要记录每个钻头每日的平均温度和转速,每日处理一次。从速处理视图来看,记录最近一天之内出现的钻头过热和过速的情况,是实时处理的。
演示示例子部件
负载生成器:负责生成这些生成一个大量的模拟数据的
负载加载器:把这些生成的原始数据加载到原始数据库里面
这里主要有三个空间,第一个是对应于原始数据的主数据库表Master,然后还有一个对应批数据视图数据库表的Batchview,速处理层对应是Realtimeview。
数据处理流程情况
l第一步:预处理
1)创建C*键空间和表(C*CQL)
2)生成模拟的工作负载文件(负载生成器)
l第二步:数据加载
1)(批处理层)将源数据加载到原始数据主数据库中(负载加载器)
2)(速处理层)将源数据以消息的方式实施发送到Pulsar主题中(Pulsar消息发布器)
l第三步:数据处理,视图数据生成
1)(批处理层)每日源数据批处理;写入批处理视图(每日Spark汇总程序)
2)(速处理层)当日源数据实时处理;写入速处理视图(Pulsar函数,PulsarC*连接器)
l第四步:数据分析
SparkSQL
四、演示
DataStaxStudio
Cassandra数据库的信息,第一步先确保这些键空间删掉了以后,这里并没有需要的键空间,然后创建一些新的键空间和表。
生成一个模拟数据(CSV文件),文件生成好了以后,让负载加载器将数据加载进来。
速处理层视图里面只能看到一些最近的数据,旧的数据已经被Function函数自动过滤掉了。
第二部分:云Cassandra+云DLASpark构建轻量化数据湖解决方案演示:
第一个需要开通对象存储oss,这是因为DLASpark的jar包需要存储在oss上。
第二步需要有一个自己的云数据库Cassandra实例。
第三步获取你Cassandra的私网连接点,CQL端口、数据库、用户名、数据库、密码,这些信息会被用到来连接Cassandra实例。
实例信息查找:
进入控制台查看
第四步需要创建一个数据表并且插入一些数据,待会用来验证Spark可以正确地连接到这张数据表里面,读取数据。
最后一步需要为DLA准备访问Cassandra实例所需要的安全组ID和交换机ID,主要是作用于DLAspark的这些Cassandra实例,这些实例它需要挂载虚拟网卡才可以访问Cassandra。
交换机ID:可使用VSwithID。
安全组ID:可使用VPCID进入专有网络ID,查询已有安全组出方向
主要依赖是Cassandraconnector2.4.2版本
代码需要刚才准备好的那些连接Cassandra实例的信息,私网连接点,CQL端口,用户名密码以及表所在的表名。
总结:
第一步:开通oss存储,把jar包上传到oss上;
第二步:要拥有一个Cassandra实例;
第三步:从Cassandra的控制台去获取连接Cassandra所需要的信息,比如它的用户名密码以及它连接的一些信息;
第四步:准备一张测试的表用于DLASpark连接Cassandra的测试;
第五步:网络打通所需要的两个关键点,准备一个安全组ID和交换机ID用于创建Spark的虚拟网卡。