暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

国产数据库---GBase 8a 支撑Hadoop生态随笔

80后程序员 2021-11-27
2581


Hadoop支持

GBase 8a MPP Cluster支持与主流Hadoop系统通过高性能数据链接以实现数据双向同步,包括数据从Hadoop加载到GBase 8a、数据从GBase 8a导出到Hadoop、GBase BLOB字段可以存储到Hadoop上。

GBase 8a MPP Cluster通过SQL方式实现数据高速加载,加载组件GBase Hadoop Loader直接读取HDFS文件,无需中间数据落盘,将其高速并行加载入库。加载 HDFS 文件支持 NameNode 高可用,在执行加载语句前,需要首先设置 gbase_hdfs_namenodes='acitve_nn, standby_nn',指定 HDFS 的高可用 NameNode 主机信息。(HDFS 通常由两个 NameNode 和若干 DataNode组成,其中一个 NameNode 处于 Active 状态,另外一个处于 Standby 状态。)

GBase 8a MPP Cluster支持与Hadoop平台进行数据交互,具备从Hadoop平台进行数据导入和向Hadoop平台进行数据导出的能力。

GBase 8a MPP Cluster利用select into outfile …语句,把查询结果导出到HDFS。从GBase 8a MPP Cluster导出到Hadoop如下图所示:

 

语法格式:

SELECT ... INTO OUTFILE 'file_name' [OPTION] FROM ...;

对于已配置了NameNode高可用的HDFS,当Active NameNode不可用时,支持自动切换到Standby NameNode完成数据文件导出。使用方式如下图所示:

 

具体执行过程如下:

① 用户设置使用HDFS高可用NameNode列表;

② 用户输入SELECT INTO OUTFILE语句;

③ gcluster在调用libwebhdfs创建导出目录,如Active NameNode不可用,自动切换到Standby NameNode;

④ gcluster下发SQL到gnode;

⑤ gnode调用ExpressHDFSFile打开HDFS文件;

⑥ ExpressHDFSFile调用libwebhdfs设置连接参数gbase_hdfs_namenodes;

⑦ gnode物化查询结果,格式化数据;

⑧ gnode调用ExpressHDFSFile将数据写入文件;

⑨ ExpressHDFSFile调用libwebhdfs将数据写入文件;

⑩ libwebhdfs发送写入请求,如Active NameNode不可用,自动切换到Standby NameNode;

⑪ gnode导出完成,返回结果。

Hadoop平台导入数据到GBase 8a MPP Cluster

GBase 8a MPP Cluster利用load data infile …功能,把文件从HDFS导入到表中。从Hadoop导入到GBase 8a MPP Cluster如下图所示:

 

语法格式:

LOAD DATA INFILE 'file_list'

INTO TABLE [dbname.]tbl_name

[options]

指定多个数据源文件,文件可以不在同一个文件服务器,逗号分隔。

对于已配置了NameNode高可用的HDFS,当Active NameNode不可用时,支持自动切换到Standby NameNode完成数据文件的加载。使用方式如下图所示:

 

具体执行过程如下:

① 用户设置使用HDFS高可用NameNode列表;

② 用户输入LOAD DATA INFILE语句;

③ gcluster调用HdfsWildcardExpander展开HDFS文件通配符;

④ HdfsWildcardExpander调用libwebhdfs设置连接参数gbase_hdfs_namenodes;

⑤ HdfsWildcardExpander调用libwebhdfs枚举目录内容;

⑥ libwebhdfs发送目录枚举请求,如Active NameNode不可用,自动切换到Standby NameNode;

⑦ gcluster下发SQL到gnode;

⑧ gnode调用ExpressHDFSFile打开HDFS文件;

⑨ ExpressHDFSFile调用libwebhdfs设置连接参数gbase_hdfs_namenodes;

⑩ gnode调用ExpressHDFSFile读取文件数据,计算HASH值,分发数据;

⑪ ExpressHDFSFile调用libwebhdfs读取文件数据;

⑫ libwebhdfs发送读取请求,如Active NameNode不可用,自动切换到Standby NameNode;

⑬ gnode加载完成,返回结果。

 

GBase 8a MPP Cluster除了支持结构化数据外,还支持将非结构化数据以BLOB数据类型的方式存储在Hadoop上,而通过集群数据库表中的URI字段访问Hadoop上的BLOB数据类型的数据,同时由Last Modi,Content Length、MD5等校验手段保证数据的一致性和完整性,实现与结构化数据的统一管理。

 

图:非结构化数据的存储和Cache

应用程序可采用JDBC、C API等接口与GBase 8a MPP Cluster相连接,可以通过正常的预处理查询模式读写BLOB字段,大大简化开发的复杂度。同时借助内存、磁盘、HDFS临时目录的模式兼顾事务原子性和执行效率。

跨引擎关联查询

GBase 8a MPP Cluster实现与Hadoop生态无缝集成,通过JDBC或者DataFrame API,可以实现与SparkSQL、Hive、HBase的远程相互访问和数据交互。

GBase 8a MPP Cluster使用gbhdfs协议支持HDFS文件系统数据的读写,支持通过数据库SQL接口,跨平台查询访问HDFS/Hive/HBase上的数据。作为基本方式,采用外部表方式,将Hadoop侧数据作为外部表数据加载到GBase 8a MPP Cluster集群中,生成GBase 8a MPP Cluster中的一个临时表,在GBase 8a MPP Cluster库内执行SQL运算处理,并可以和GBase 8a MPP Cluster库内的其他表参与关联计算。在GBase 8a MPP Cluster库内的关系计算结果,还可以通过GBase 8a MPP Cluster表导出功能将数据导入到 Hadoop中,参与后续的Hadoop平台上的批量处理或者查询处理。在处理中间过程中,于GBase 8a MPP Cluster库内生成中间临时表,在完成处理后,将自动被删除。GBase 8a MPP Cluster和Hadoop均为分布式集群,两端间在相互进行数据传输和载入时,可以充分发挥并行磁盘IO和网络IO的优势,平均单一节点间的数据传输载入效率可以达到500GB/小时以上,并且随着节点数增加,上述性能接近线性提升。

作为与与Spark集成方式,通过HDFS文件实现GBase 8a MPP Cluster与Spark间的数据集成,再将HDFS作为Spark数据源提供数据支持,也可反向将Spark加工结果通过HDFS文件,加载到GBase 8a MPP Cluster库内实现下一阶段的MPP关系运算。作为Spark 和MPP间的数据集成效率,平均单一节点间的数据传输载入效率可以达到500GB/小时以上,并且随着节点数的增加,上述性能接近线性提升。此外,作为一种数据传输方式,产品提供与Kafka对接能力,GBase 8a MPP Cluster可作为Kafka消费者,将Kafka内的数据以准实时的方式,加载入库到GBase 8a MPP Cluster中,通过Spark →Kafka→GBase 8a MPP Cluster传输链路,可以实现秒级的数据入库时间窗口,入库吞吐效率可以达到每节点500GB/小时以上,充分满足准实时、高吞吐的集成要求。

此外,作为GBase 8a MPP Cluster的扩展能力,可以存储管理跨引擎的统一元数据,并对外以统一访问接口方式识别跨引擎数据,从而实现跨多个不同数据引擎的融合处理,具体可通过统一调度和引擎间数据交互时的中间临时表自动生成方式,实现数据在GBase 8a MPP Cluster和不同类型数据平台间的并行式高效数据流转,从而向用户提供更加高效的和更强易用性的GBase 8a MPP Cluster与Hadoop、Spark的集成方式。

与数据清洗和历史数据管理相比,更加灵活的业务场景是:实时进行跨引擎的关联查询。如最简单的:

代码示意:

Select * from t_8a inner join t_hive on t_8a.no = t_hive.no where …

其中t_8a为8a mpp 数据引擎表,t_hive为Hadoop hive 引擎表。

GBase 8a MPP Cluster构建了基于规则和成本的优化器,能够既充分利用各自引擎的特色运算,又能保证在引擎间交互的数据最小化,同时利用高效的数据交换总线,从而实现自动优化的引擎间实时关联分析。

DML操作的事务管理依赖具体引擎,如果每个引擎都支持标准的XA,则GBase 8a MPP Cluster整体支持事务,当前GBase 8s引擎支持XA,而GBase 8aMPP和Hive虽然都支持ACID,但是都不支持XA,所以在单引擎操作时GBase 8a MPP支持多语句长事务,Hive支持单语句事务,混合引擎交互写操作时采用自动提交当前事务的模式。

 

 

备份恢复

为应对数据丢失或损坏对用户业务造成不利影响,在异常情况下快速恢复系统,GBase 8a MPP Cluster提供专用的备份恢复工具(gcrcman),用户使用它可以方便地对整个集群中的数据进行集群的备份和恢复。集群的备份、恢复工具随集群的安装自动安装,该工具被安装在/opt/gcluster/server/bin目录下。GBase 8a MPP Cluster根据用户业务的需要提供全量备份、增量备份和恢复功能。GBase 8a MPP Cluster也支持与hadoop之间进行数据备份/恢复,将库内数据备份到Hadoop中,或将Hadoop内数据文件恢复到库内,Hadoop备份/恢复性能大于100TB/小时。

SQL访问Spark机器学习算法

如果直接基于Spark进行机器学习的开发,需要掌握Spark的相关技术,熟悉Java或Scala编程语言,存在一定技术门槛,对于熟悉数据库操作的应用开发人员来说具有相当大的难度。GBase 8a MPP Cluster围绕模型管理这一思想,将Spark机器学习算法封装成SQL语句(存储过程),任何熟悉数据库的开发人员都可以方便的使用SQL语句创建、训练和评估模型,并使用模型进行预测,实现复杂业务建模过程。工作原理如下图所示:

 

图:SQL封装Spark机器学习算法示意图

在GBase 8a MPP Cluster通过SQL访问Spark机器学习算法的示例如下:

-- 创建模型

Call create_model(‘xx_rec’, ’als’, ’t_setting’);

-- 训练模型

Call train_model(‘xx_rec’,’t_train’);

-- 评估模型

Call evaluate_model(‘xx_rec’, ‘t_test’);

-- 计算预测结果

Call predict(‘xx_rec’,’t_predict’,’t_result’);

Select * from t_result;

-- 删除模型

Call drop_model(‘movie_rec’);

 

最后修改时间:2021-11-27 17:48:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论