将数据迁移到CDP 私有云基础的数据迁移用例

简介: 您可以使用 authzmigrator 工具将 Hive 对象和 URL 权限以及 Kafka 权限从 CDH 集群迁移到 CDP 私有云基础 集群。您可以使用 DistCp 工具将 HDFS 数据从安全的 HDP 集群迁移到安全或不安全的CDP 私有云基础集群。

这是CDH/HDP/Apache Hadoop迁移到CDP系列的第二篇博客,如对迁移感兴趣,请关注该系列之前博客《使用 Replication Manager 迁移到CDP 私有云基础》。

您可以使用 authzmigrator 工具将 Hive 对象和 URL 权限以及 Kafka 权限从 CDH 集群迁移到 CDP 私有云基础 集群。您可以使用 DistCp 工具将 HDFS 数据从安全的 HDP 集群迁移到安全或不安全的CDP 私有云基础集群。

1.  使用 authzmigrator 工具手动迁移权限

要将 Hive对象和 URL 权限以及Kafka 权限从 CDH 迁移到CDP 私有云基地,您可以使用authzmigrator 工具。该工具将CDH集群中的Hive/ImpalaKafka RBAC Sentry权限导出为JSON文件,然后在CDP私有云Base 7集群中将其转换并摄取到Ranger中。您必须手动将 Solr 权限从 CDH 集群迁移到CDP Private Cloud Base 7集群。

您可以使用以下方法之一将CDH集群升级为CDP集群,并将CDH中的Sentry权限迁移到CDP中的Ranger

·         升级向导 - 您导出 CDH 集群中的权限,并在就地升级完成后,将权限导入Ranger

·         并行迁移(side-car迁移)- 您带来了第二个环境,即 CDP 环境。然后将所有数据和元数据移动到这个新环境。您可以使用authzmigrator 工具将 Hive对象和 URL 权限以及 Kafka 权限迁移到Ranger,或者在复制管理器中运行 Hive复制策略将 Hive 对象和 URL 权限迁移到Ranger

1.1.       Authzmigrator工具

使用authzmigrator工具迁移Hive对象和URL权限以及Kafka权限,必须将Sentry服务器中的权限导出到源集群(例如CDH集群)上的文件中,然后将文件摄取到目标集群上的Ranger服务中(例如,CDP 集群)。

1.2.       从 Sentry 服务器导出权限

使用authzmigrator 工具将源集群上的 Sentry 服务器的 Sentry 权限导出到文件中。

在并行迁移(side-car migration)过程中,您可以使用authzmigrator工具将Hive对象和URL权限以及Kafka权限迁移到Ranger

1.       下载authz_export.tar.gz文件并解压。有关下载文件的信息,请联系Cloudera 支持

authz_export.tar.gz文件包含一个名为jar文件和目录的配置。它还有一个 authz_export.sh文件。该配置 目录包含可用于参考的默认配置。

2.       更换sentry-site.xmlcore-site.xml配置 从源集群中的sentry服务器上的sentry目录中的配置文件的目录。

例如,源集群上的 Sentry 目录位于 /var/run/cloudera-scm-agent/process/<sentry-service>/ 位置。

3.       编辑sentry-site.xml文件以执行以下步骤:

a. 使用以下凭据更新Sentry 数据库的数据库用户名和密码:


//

sentry.store.jdbc.user
sentry.store.jdbc.password

b.          删除 文件中的 hadoop.security.credential.provider.path属性。

4.       编辑core-site.xml文件以执行以下步骤:

a. 将属性fs.defaultFS的值更新 file:///

b.          删除 文件中的 hadoop.security.credential.provider.path属性。

5.       config目录下的authorization-migration-site.xml文件中 ,执行以下步骤:

a. 确保 authorization.migration.export.target_services 属性具有要为其导出权限的服务列表。

有效值包括:HIVE KAFKA

b.          authorization.migration.export.output_file 属性中的信息更新为 应导出权限的文件的绝对位置。

6.       验证 Sentry 服务器的 Java 执行路径和authz_export.sh脚本中的 JAVA_HOME 属性是否匹配。要验证路径和属性,请执行以下任务:

a. 要定位Sentry 服务器使用的 Java 执行路径,请运行 ps aux | grep org.apache.sentry.SentryMain 命令。

b.          如果路径不是/user/java/default/bin/java,请编辑authz_export.sh脚本,将Sentry 服务器使用的路径添加到JAVA_HOME属性,然后保存文件。

例如,如果 Sentry 服务器使用 /usr/java/jdk1.8.0_141-cloudera/bin/java路径,请将authz_export.sh脚本中的JAVA_HOME属性 更改为 /usr/java/jdk1.8.0_141-cloudera

7.       使用sh authz_export.sh命令运行authz_export.sh脚本。

权限导出到/opt/backup/permissions.json 文件。您后续可以将权限摄取到 Ranger 中。

1.3.       将权限摄取到 Ranger

运行authzmigrator 工具导出源集群上的权限后,将它们摄取到目标集群上的 Ranger 服务中。

要获取/opt/backup/permissions.json文件中的权限 ,请执行以下步骤:

1.       在目标集群中,将/opt/backup/permissions.json文件复制  /user/sentry/export-permissions/permissions.json HDFS 位置。

2.       确保用户ranger对文件具有读写权限。要设置ranger用户的读写权限 ,请运行以下命令:

hdfs dfs -setfacl -m -R user:ranger:rwx /user/sentry/export-permissions/permissions.json

3.       登录到 Cloudera Manager

4.       Ranger 服务中,单击操作>导入 Sentry 权限。

Ranger服务获取 user/sentry/export-permissions/permissions.json 文件中的权限

2.  使用 DistCp 将 HDFS 数据从 HDP 集群迁移到CDP 私有云基础集群

您可以使用Hadoop DistCp 工具将存储在 HDFS 中的数据从安全的 HDP 集群迁移到安全或不安全的CDP 私有云基础集群。

在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:

·         HDFS 超级用户 - 有关创建 HDFS 超级用户的信息,请参阅 创建 HDFS 超级用户

·         名为hdfs 用户- 默认情况下,不允许hdfs用户运行 YARN作业。您必须启用hdfs用户才能在两个集群上运行 YARN 作业。

2.1.       使用 DistCp 将数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群

在运行DistCp 以将数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群之前,您必须允许hdfs用户在没有 HDFS超级用户帐户的情况下在 HDP 集群上运行 YARN作业。您还必须确保在复制期间跳过领域名称,并且只有指定的用户才能访问 HDP 集群。

执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群:

2.1.1.   启用hdfs用户在 HDP 集群上运行YARN 作业

您必须进行配置更改才能使hdfs用户能够在 HDP 集群上运行 YARN作业。

HDP 集群中,在Ambari 主机上执行以下步骤:

1.       打开以下文件:

/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2

2.       从禁止用户列表中删除hdfs条目并保存文件。

示例文件内容:

yarn.nodemanager.local-dirs={{nm_local_dirs}}
yarn.nodemanager.log-dirs={{nm_log_dirs}}
yarn.nodemanager.linux-container-executor.group={{yarn_executor_container_group}}
banned.users=yarn,hdfs,mapred,bin
min.user.id={{min_user_id}}

3.       YARN配置页面,验证container-executor配置模板是否 banned.users列表中包含 hdfs

4.       如果hdfs列在banner.users列表中,请将其从模板中删除并保存模板。

5.       重启以下服务:

o 陈旧的服务,如果有的话。

o Ambari服务器

o 集群的每个主机上的 Ambari 代理。

6.       yarn.admin.acl文件中,添加hdfs

7.       etc/hadoop/capacity-scheduler.xml文件搜索文件中,将hdfs附加到 yarn.scheduler.capacity.root.acl_submit_applications 属性。

8.       重新启动 YARN 服务。

9.       使用hdfs用户的keytab文件运行kinit命令以向密钥分发中心(KDC)验证hdfs用户。

CDP 私有云基础集群上进行必要的配置更改。

2.1.2.   CDP 私有云基础集群上的配置更改

在复制期间,必须跳过领域名称,并且只有指定的用户才能访问 HDP 集群。

1.       CDP Private Cloud Base集群上,管理员必须 根据 HDFS Kerberos  Principal名称更新hadoop.security.auth_to_local配置属性。

例如,如果 HDFS Kerberos Principal名称是 HDP集群上的hdfs@EXAMPLE.COM,则管理员必须将hadoop.security.auth_to_local配置属性更新 为以下值:

RULE:[1:$1@$0](.*@EXAMPLE.COM)s/@.*//

2.       重新启动过时的服务。

HDP 集群上运行 DistCp 作业。

2.1.3.   在 HDP 集群上运行 DistCp 作业

启用hdfs用户在 HDP 集群上运行 YARN作业并在CDP 私有云基础 集群上进行所需的配置更改后,您可以运行DistCp 作业将 HDFS数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群。

1.       HDP 集群中运行 DistCp 作业之前,请确保重新启动集群服务。

2.       运行以下hadoop distcp命令:

hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true [***Source cluster***]          [***Destination cluster***]

例如,

hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true      hdfs://172.27.28.200:8020/tmp/test/hosts1     hdfs://172.27.110.198:8020/tmp/hosts1

笔记

Hadoop Distcp 作业需要简单的身份验证,因此您必须在将ipc.client.fallback-to-simple-auth-allowed选项设置为true 的情况下运行hadoop distcp命令 

2.2.       将数据从安全的 HDP 集群迁移到安全的 CDP 私有云基础集群

您可以使用DistCp 工具将 HDFS数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群。要迁移数据,您必须在同一个Active Directory (AD) KDC 上配置 HDP CDP Private Cloud Base集群,在它们之间设置单向或双向信任,然后运行DistCp 命令复制数据。

执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群:

2.2.1.   HDP 集群和CDP 私有云基础 集群的配置变更

你必须使HDP集群和一些配置的变化CDP私有云的基础,你从HDP集群的迁移数据前簇CDP私有云基地集群。

1.       HDP 集群上,打开core-site.xml文件,输入以下属性,并保存文件:

<property>
   <name>hadoop.security.auth_to_local</name>
    <value><RM mapping rules for HDP></value>
    <value><RM mapping rules for CDH></value>
    <description>Maps kerberos principals to local user names</description>
</property>

2.       HDP 集群上,打开hdfs-site.xml文件,输入以下属性,并保存文件:

<property>
 <name>dfs.namenode.kerberos.principal.pattern</name>
  <value>*</value>
</property>

3.       CDP 私有云基础集群上执行上述步骤。

4.       在两个集群上创建一个公共 Kerberos 主体名称。

5.       将创建的 Kerberos 主体名称分配给源和目标集群中所有适用的 NameNode

6.       为确保在两个集群中使用相同的ResourceManager 映射规则,请在两个集群上更新 ResourceManager映射规则,如下所示:

<property>
   <name>hadoop.security.auth_to_local</name>
    <value>
      <HDP mapping rules>
      <CDH mapping rules>
      DEFAULT
    </value>
</property>

7.       在集群之间配置单向或双向信任。

要在 HDP 集群和CDP 私有云基础集群之间设置双向信任,请执行以下步骤:

a. 创建属于不同Kerberos 领域的集群。

例如,假设您有Realm 目标集群的“DRT”和源集群的Realm“DRS”

b.          在所有主机上为源主机和目标主机设置/etc/krb5.conf

                                                             i.       [realms]部分 - 添加 DRS DRT 领域、来自源集群的Kerberos KDCadmin_server default_domain 设置的 DRS

                                                            ii.       [domain_realm]部分 - 添加源和目标集群的所有主机。

                                                          iii.       在具有 HDFS NameNode 角色的源主机和目标主机上添加krbtgt/DRS@DRT主体。要完成此任务,请执行以下步骤:

$ sudo kadmin.local
kadmin.local: addprinc -pw cloudera krbtgt/DRS@DRT
WARNING: no policy specified for krbtgt/DRS@DRT; defaulting to no policy
Principal "krbtgt/DRS@DRT" created
kadmin.local: listprincs

c. Cloudera Manager Ambari 中,执行以下步骤:

                                                             i.       在源集群 HDFS服务的配置中启用 DRT 作为受信任的 Kerberos 领域。

                                                            ii.       在目标集群的配置中启用 DRS 作为受信任的 Kerberos 领域(trusted_realm) 以及存在 HDFS NameNode 角色的源主机名。

                                                          iii.       在目标集群 HDFS服务的配置中启用 DRS 作为受信任的 Kerberos 领域。

                                                          iv.       访问远程 HDFS端点以验证信任设置是否成功。要访问远程 HDFS 端点,请运行以下命令:

kinit krbtgt/DRS@DRT
hadoop fs -ls hdfs://[***REMOTE HDFS ENDPOINT***]:8020/

将用户配置为在两个集群上运行 YARN 作业。

2.2.2.   配置用户在两个集群上运行 YARN 作业

要运行Hadoop DistCp 作业以将数据从 HDP 迁移到CDP 私有云基础集群,您必须使用 HDFS 超级用户或hdfs用户。

在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:

·         HDFS 超级用户 - 有关创建 HDFS 超级用户的信息,请参阅创建 HDFS 超级用户

·         名为hdfs 用户- 默认情况下,不允许hdfs用户运行 YARN作业。您必须启用hdfs用户才能在两个集群上运行 YARN 作业。

1.       HDP 集群上执行以下步骤:

a. 打开以下文件:

/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2

b.          从禁止用户 列表中删除hdfs条目并保存文件。

示例文件内容:

yarn.nodemanager.local-dirs={{nm_local_dirs}}
yarn.nodemanager.log-dirs={{nm_log_dirs}}
yarn.nodemanager.linux-container-executor.group={{yarn_executor_container_group}}
banned.users=yarn,hdfs,mapred,bin
min.user.id={{min_user_id}}

c. YARN配置页面,验证container-executor配置模板是否 banned.users列表中 包含hdfs

d.          如果hdfs列在banner.users 列表中,请将其从模板中删除并保存模板。

e. 重启以下服务:

§  陈旧的服务,如果有的话。

§  Ambari服务器

§  集群的每个主机上的 Ambari 代理。

f.  yarn.admin.acl文件中,添加hdfs

g. etc/hadoop/capacity-scheduler.xml文件搜索文件中,将hdfs附加到 yarn.scheduler.capacity.root.acl_submit_applications 属性。

h.          重新启动 YARN 服务。

i.  使用hdfs 用户的密钥表文件运行kinit命令以向密钥分发中心 (KDC)验证hdfs用户。

2.       CDP 私有云基础集群上,执行以下步骤:

a. 选择YARN服务。

b.          单击配置选项卡。

c. 确保hdfs用户未列在 banned.users列表中。

d.          确保min.user.id属性设置为 0

e. 重新启动 YARN服务。

CDP 私有云基础集群上运行 DistCp 作业。

2.2.3.   在 CDP 私有云基础集群上运行 DistCp 作业

HDP 集群和 CDP 私有云基础集群中进行所需的配置更改并配置用户以在这两个集群上运行 YARN作业后,您可以运行Hadoop DistCp 作业。

1.       重新启动两个集群上的集群服务。

2.       运行以下 Hadoop DistCp 命令:

sudo -u [***superuser或 hdfs***] hadoop distcp [***源集群***] [***目标集群***]

例如:

sudo -u <superuser> hadoop distcp hdfs://nn1:8020/source hdfs://nn2:8020/destination

3.  安全集群之间的 Distcp 的 Kerberos 设置指南

在安全的 CDP 集群上设置Kerberos distcp在它们之间成功执行时,需要考虑特定的准则。

此处提到的准则仅适用于以下示例部署:

·         有两个集群,每一个不同的Kerberos域(SOURCE以及DESTINATION在该实施例中)

·         您有数据需要复制SOURCE DESTINATION

·         Kerberos 领域信任存在于SOURCE DESTINATION(在任一方向)之间,或在 SOURCEDESTINATION与共同的第三领域(例如Active Directory 域)之间。

如果您的环境与上述环境匹配,请使用下表在集群上配置Kerberos 委派令牌,以便您可以成功 distcp跨两个安全集群。基于之间的信任的方向SOURCEDESTINATION集群,您可以使用mapreduce.job.hdfs-servers.token-renewal.exclude两种集群属性指示ResourceManagers跳过或NameNode的主机上执行委托令牌更新。

笔记

mapreduce.job.hdfs-servers.token-renewal.exclude 如果两个集群都使用 HDFS 透明加密功能,则必须使用该参数。

环境类型

Kerberos 委托令牌设置

SOURCE信任 DESTINATION

Distcp 作业在DESTINATION集群上运行

您不需要设置该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性。

Distcp 作业在SOURCE集群上运行

将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的DESTINATION集群NameNode 主机名列表。

DESTINATION信任 SOURCE

Distcp 作业在DESTINATION集群上运行

将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的SOURCE集群NameNode 主机名列表。

Distcp 作业在SOURCE集群上运行

您不需要设置该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性。

这两个SOURCEDESTINATION相互信任

将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的DESTINATION集群NameNode 主机名列表。

SOURCEDESTINATION互不信任

如果公共领域可用(例如 Active Directory),请将mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置 运行 distcp 作业的集群的 NameNode 的主机名的逗号分隔列表。例如,如果您在DESTINATION集群上运行作业:

1.         kinit任何对DESTINATION使用可以同时在被使用的AD帐户YARN网关主机 SOURCEDESTINATION

2.         hadoop 用户身份运行 distcp 作业:

$ hadoop distcp -Ddfs.namenode.kerberos.principal.pattern=*  \

-Dmapreduce.job.hdfs-servers.token-renewal.exclude=SOURCE-nn-host1,SOURCE-nn-host2   \

hdfs://source-nn-nameservice/source/path    \

/destination/path

默认情况下,YARN ResourceManager 为应用程序更新令牌。该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性指示任一集群上的 ResourceManager 跳过 NameNode 主机的委托令牌更新。

4.  使用 DistCp 和 WebHDFS 在安全和不安全集群之间复制数据

您可以使用distcpWebHDFS在安全集群和不安全集群之间复制数据。

复制数据时,请确保distcp从安全集群运行命令。

1.       在安全集群上,在core-site.xml设置 ipc.client.fallback-to-simple-auth-allowed true

<property>
 <name>ipc.client.fallback-to-simple-auth-allowed</name>
  <value>true</value> 
</property>

或者,您也可以在运行distcp命令时将其作为参数传递 。如果您想这样做,请转到第 2 步。

2.       在不安全集群上,将安全集群的领域名称添加到不安全集群的配置中。

a. 在不安全集群的Cloudera Manager 管理控制台中,导航到Clusters > <HDFS cluster>

b.          在配置选项卡上,搜索受信任的 Kerberos 领域并添加安全集群的领域名称。

笔记

这不需要启用 Kerberos,但它是允许在hdfs://协议中发生简单身份验证回退的必要步骤 

c. 保存更改。

3.       仅从安全集群端使用如下命令。

#This example uses the insecure cluster as the source and the secure cluster as the destination
distcp webhdfs://<insecure_namenode>:9870 webhdfs://<secure_namenode>:9871
#This example uses the sefcure cluster as the source and the insecure cluster as the destination
distcp webhdfs://<secure_namenode>:9871 webhdfs://<insecure_namenode>:9870

如果启用了 TLS,请替换webhdfs swebhdfs.

如果您没有配置 ipc.client.fallback-to-simple-auth-allowed并希望将其作为参数传递,请从安全集群运行如下命令:

#This example uses the insecure cluster as the source and the secure cluster (with TLS enabled) as the destination cluster. swebhdfs is used instead of webhdfs when TLS is enabled.
hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true webhdfs://<insecure_namenode>:9870 swebhdfs://<secure_namenode>:9871
#This example uses the secure cluster (with TLS enabled) as the source cluster and the insecure cluster as the destination. swebhdfs is used instead of webhdfs when TLS is enabled.
hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true swebhdfs://<secure_namenode>:9871 webhdfs://<insecure_namenode>:9870

原文链接:https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/data-migration/topics/cdp-data-migration-use-cases.html

 

相关文章
|
SQL 数据采集 数据可视化
需求:公司需要做数据迁移同步,以下是几种常见的ETL工具选型对比
需求:公司需要做数据迁移同步,以下是几种常见的ETL工具选型对比
|
6月前
|
存储 监控 数据安全/隐私保护
数据迁移至云:最佳实践与工具
【6月更文挑战第1天】企业在数字化转型中选择将数据迁移至云以获取灵活性、降低成本及增强安全性。迁移前需详细规划,评估目标和需求,选择合适的云服务商。确保数据备份,利用工具如 AWS DataSync 自动化迁移,注意数据格式兼容性,并在迁移中监控、测试数据完整性。保障安全性,设置访问权限和加密。迁移后优化管理云资源,实现最佳性能和成本效益。遵循最佳实践,确保数据迁移顺利。
107 1
|
7月前
|
SQL 监控 关系型数据库
规划阿里云RDS跨区迁移业务需求迁移方案设计
规划阿里云RDS跨区迁移业务需求迁移方案设计
97 5
|
存储 运维 监控
云时代,好用的数据迁移方案推荐
本文将介绍数据库迁移的步骤以及市面上常见的迁移工具,推荐大家选择能够支持“业务零停机迁移”的工具产品。同时,平台工具(例NineData) 的自动化体验及配套设施(例:数据校验工具、迁移限流、监控告警等)一般较为完善,是比较推荐的选择。
1064 1
云时代,好用的数据迁移方案推荐
|
JSON 运维 Linux
上云的正确姿势之自动化迁移
# 企业通用迁移上云过程 随着云计算平台的飞速发展,云上IT资源在弹性、成本、丰富度方面越来越显示出它的优势。企业将线下的IT基础设施资产迁移上云越来越变成了一种趋势和潮流。在现代主流云厂商的迁移服务过程中,企业级客户一站式迁移上云的典型过程路径是:![迁移上云的典型过程路径](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/8c57ebfa
400 0
上云的正确姿势之自动化迁移
|
SQL 安全 Java
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(3)
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(3)
163 0
|
SQL 存储 安全
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(1)
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(1)
334 0
|
存储 缓存 Java
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(4)
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(4)
180 0
|
SQL 机器学习/深度学习 存储
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(2)
《CDP企业数据云平台从入门到实践》——CDP之操作型数据库(2)
166 0
|
SQL 安全 Cloud Native
NineData数据管理平台正式上线,开发者必备的数据库产品
11月1日,NineData 多云数据管理平台正式上线,构建全球领先的多云数据管理平台。NineData提供数据备份、复制、对比和企业级SQL开发服务,让您的数据管理更安全更高效。本次发布会演示了如何通过NineData的数据管理平台,实现1分钟配置企业级数据备份。
546 0
NineData数据管理平台正式上线,开发者必备的数据库产品