关于数据库:HashData与HDFS的高效数据交换

70次阅读

共计 3983 个字符,预计需要花费 10 分钟才能阅读完成。

背景与挑战

在对象存储技术呈现和遍及之前,HDFS(Hadoop 分布式文件系统)是市场上为数不多的开源、收费、高性价比(绝对于低廉的 SAN 零碎)PB 级存储系统,大量用于企业数据归档场景。同时,HDFS 之上衍生了很多针对不同技术要求的分布式计算框架,使其实用于非结构化数据的荡涤规整、流式计算和机器学习等场景。另一方面,数据仓库作为主数据系统,保留着企业外部最具商业价值的历史数据,同时撑持日常的经营剖析和商业决策。在很多大型机构中,这两套零碎是共存的。因而,如何实现与以 HDFS 为根底的大数据平台之间的高效数据互访,是每一款古代数据仓库产品须要思考和解决的问题。

作为业界相当当先的开源企业级数据仓库产品,Greenplum Database(上面简称 GPDB)次要提供了两种形式:PXF 和 GPHDFS。尽管二者都利用了 GPDB 的内部表性能,然而前者须要额定装置部署 PXF 服务器过程,在简单的 IT 环境中流程繁琐、极易出错,终端用户体验不佳。所以,在初期布局和实现 HashData 数据仓库拜访 HDFS 的性能时,即采纳 GPHDFS 的技术路线:通过减少一种拜访 HDFS 的内部表协定,让各个计算节点直连 HDFS 集群,不通过任何两头节点或者零碎,大幅升高应用门槛的同时,保障两个零碎之间数据交换的效率。

在进一步论述实现细节之前,咱们先简略回顾一下 GPDB 自带的 GPHDFS 在理论应用过程中面临的挑战(这是一个大型银行客户的实在反馈):

1. 须要额定装置软件

  • 每个节点装置 Java;
  • 每个节点装置 Kerberos 客户端;
  • 每个节点装置 Hadoop 客户端;

2. 配置复 杂、易出错

  • 配置 gpadmin 用户的 Java 环境变量;
  • 更改数据库参数;
  • 针对每个 HDFS 集群,每个节点配置 Hadoop core-site.xml、yarn-site.xml 和 hdfs-site.xml;

3. 无奈同时拜访多套 HDFS 零碎

  • 每个数据库会话只能拜访一套 HDFS 零碎(与环境变量设置相干), 无奈同时拜访多套 HDFS 零碎(例如将不同 HDFS 上的数据进行关联)。

HashData 的 GPHDFS 实现

继承于 GPDB,HashData 原生反对多种内部表协定,除了上述的 GPHDFS,还包含 FILE(文件系统)、GPFDIST(文件服务器)、OSS(对象存储)等, 可用于实现数据的高速加载与卸载。上面为 GPHDFS 内部表的示意图:

技术架构层面,HashData 的 GPHDFS 实现跟 GPDB 的 GPHDFS 是统一的,更多的差别是体现在实现细节层面。首先,咱们采纳 C ++ 原生实现的 libhdfs3 作为拜访 HDFS 的客户端,在躲避了装置、部署、配置 Java 运行环境以及 Hadoop 客户端等纷繁复杂、极易出错环节的同时,升高零碎 CPU 和内存使用率。

其次,引入相似 Oracle 数据源配置文件的 gphdfs.conf 文件,将多个 HDFS 零碎相干的访问信息集中起来,简化拜访配置的治理;批改 HDFS 内部表定义的语法,省略大量的配置选项(放到 gphdfs.conf 文件),大幅升高用户的应用难度。因为解耦了 Hadoop 客户端(包含环境变量的配置)和 HDFS 零碎的对应关系,新的 GPHDFS 可能在同一条 SQL 语句中同时拜访多个 HDFS(这些 HDFS 零碎能够由多个不同的 Hadoop 厂商提供)内部表,极大不便简单大数据系统中的多源数据交融。

最初,受害于 PostgreSQL 灵便优雅的扩大框架(当然,也包含 GPDB 的内部表框架),能够轻松实现在不批改数据库内核代码的状况下以扩大插件的形式将这个新的 GPHDFS 性能放到各个开源版本的 GPDB,替换原来的实现。

利用实际

Hadoop集群采纳 Kerberos 验证状况下配置

  • 装置 kinit(每个节点都装置):
yum install krb5-libs krb5-workstation
  • 配置 krb5.conf(每个节点配置):
[realms] 
HADOOP.COM = { 
admin_server = host1 
kdc = host1 
kdc = host2 
}
  • 拷贝 kerberos 的认证用户的 keytab 文件到每个节点:
gpscp -f hostfile user.keytab =:/home/gpadmin/key_tab/ 
  • 配置 gphdfs.conf文件(每个节点都配置):
hadoop_cluster1:
hdfs_namenode_host: pac_cluster_master 
hdfs_namenode_port: 9000
hdfs_auth_method: kerberos 
krb_principal: gpadmin/hdw-68212b9b-master0@GPADMINCLUSTER2.COM 
krb_principal_keytab: /home/gpadmin/hadoop.keytab 
hadoop_rpc_protection: privacy 
is_ha_supported: true
dfs.nameservices: mycluster
dfs.ha.namenodes.mycluster: nn1,nn2 
dfs.namenode.rpc-address.mycluster.nn1: 192.168.111.70:8020 
dfs.namenode.rpc-address.mycluster.nn2: 192.168.111.71:8020 
dfs.namenode.http-address.mycluster.nn1: 192.168.111.70:50070 
dfs.namenode.http-address.mycluster.nn2: 192.168.111.71:50070 
dfs.client.failover.proxy.provider.mycluster: org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailover... 
hadoop_cluster2: 
... 

Hadoop集群未采纳 Kerberos 验证状况下配置

  • 配置 gphdfs.conf 文件(每个节点都配置):
hadoop_cluster1: 
hdfs_namenode_host: pac_cluster_master 
hdfs_namenode_port: 9000
hdfs_auth_method: simple
krb_principal: gpadmin/hdw-68212b9b-master0@GPADMINCLUSTER2.COM 
krb_principal_keytab: /home/gpadmin/hadoop.keytab
hadoop_rpc_protection: privacy
is_ha_supported: true 
dfs.nameservices: mycluster 
dfs.ha.namenodes.mycluster: nn1,nn2 
dfs.namenode.rpc-address.mycluster.nn1: 192.168.111.70:8020
dfs.namenode.rpc-address.mycluster.nn2: 192.168.111.71:8020 
dfs.nameno`de.http-address.mycluster.nn1: 192.168.111.70:50070 
dfs.namenode.http-address.mycluster.nn2: 192.168.111.71:50070
dfs.client.failover.proxy.provider.mycluster: org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailover... 
hadoop_cluster2: 
... 

拜访 hadoop_cluster1 集群:

写入数据到 HDFS:

CREATE WRITABLE EXTERNAL TABLE ext_w_t1(id int,name text) LOCATION(‘gphdfs://tmp/test1/ hdfs_cluster_name=hadoop_cluster1’) format‘csv’; 
INSERT INTO ext_w_t1 VALUES(1,'hashdata'); 

读取 HDFS 数据:

CREATE READABLE EXTERNAL TABLE ext_r_t1(id int,name text) LOCATION(‘gphdfs://tmp/test1/ hdfs_cluster_name=hadoop_cluster1’) format‘csv’; 
SELECT * FROM ext_r_t1; 

要拜访 hadoop_cluster2 集群,须要在创立的内部表时,设置 hdfs_cluster_name=hadoop_cluster2。

HashData GPHDFS 落地应用状况

2019 年之前,作为 GPDB 寰球应用规模最大、场景最简单、负载最高的客户,某大型国有银行在 x86 物理服务器上运行着数十套各个版本的 GPDB 集群,以及由繁多厂商提供的 Hadoop 集群。2019 年开始,随着大数据云平台我的项目的施行,该客户开始逐渐将大数据分析业务迁徙到云化 Hadoop 和云端数据仓库零碎(HashData 数据仓库)。到目前为止,已上线 20 多套 HashData 计算集群,以及数套至多由两家不同厂商提供的 Hadoop 集群。通过应用 HashData 提供的新 GPHDFS 性能,客户能够实现每天在近百个 MPP 生产集群(包含原有的 GPDB 集群和新的 HashData 集群)不便、麻利和高效地实现数千个拜访多套 HDFS 零碎的作业。

正文完
 0