亚马逊AWS官方博客

Kyligence Cloud 集成 Amazon Glue 实现数据目录统一管理

背景与现状

对于企业来说,数据从业务系统源头到数据最终的消费端,需要经过多次流转,想从数据海洋中找到正确的数据更加困难。数据目录的出现解决了这一难题。然而在企业实际的落地过程,由于牵扯到多种数据产品的集成,往往需要同时维护多个数据目录,无形之中造成了资源的冗余和数据流转不畅。

如果有一个统一的数据目录,能让下游的各种大数据分析应用直接进行消费,而无需额外管理新的数据目录,将能极大地提高数据分析的速度和质量。对于云上用户来说,如果能直接利用云平台提供的原生数据目录服务作为统一的数据目录将极大地提升云上分析效率和使用体验。

Amazon Glue 数据目录作为持久性技术元数据存储托管式服务,可用于存储、注释和共享亚马逊云中的元数据。主要功能包括:

  • 持久的、与 Hive 兼容的 Metastore
  • 基于 IAM 的细粒度访问控制,增强数据安全性
  • 全面的审计和数据治理以确保合规性

通常以以下方式将 Amazon Glue 数据目录与各种服务结合使用:

出于上述Amazon Glue数据目录在客户中的广泛使用,Kyligence Cloud 在最新的版本(4.6.1.0)中支持了与 Amazon Glue 云原生数据目录的集成,实现了数据目录的统一管理。

Kyligence Cloud 集成 Amazon Glue 数据目录

Kyligence Cloud 是由 Kyligence 推出的云原生智能多维数据库平台,提供海量数据之上的高性能高并发查询能力,为企业简化数据湖上的多维数据分析(OLAP)。

在 Kyligence Cloud 4.6.1.0 版本中,通过与 Amazon Glue 标准的 Apache Hive 接口集成,用户可以直接使用 Amazon Glue 提供的元数据存储和管理服务,通过支持跨区域和跨账号的 S3 存储桶的数据管理,实现对任何位置、任何账号下数据的统一数据目录管理。

Amazon Glue 数据目录作为数据源接入 Kyligence Cloud

Amazon Glue 数据目录作为独立元数据管理,可以与任何与 Apache Hive 兼容的数据存储一起使用。您可以利用 Amazon Glue 数据目录作为您的中央元数据存储库,以使用单独的 ETL 工具启用 ETL 操作。

Kyligence Cloud 即通过此特性,可按需动态读取 Amazon Glue 数据目录中的数据库/表等信息,服务于后续数据的建模和查询。Kyligence Cloud 只需要拥有客户 Amazon Glue 相关库表的读取权限即可,不需要对客户 Glue 数据目录中的任何信息进行修改,充分确保了用户的信息安全。并且只需要简单几步,即可轻松完成配置。

在 Kyligence Cloud 中启用 Amazon Glue 数据目录

前提条件:Kyligence Cloud 部署在亚马逊云服务中国和国际区域,且版本为4.6.1及以上

配置 Amazon Glue 作为外部数据目录

首先为用于部署 Kyligence Cloud 的 IAM 角色授予相关权限,这里可以通过创建一个策略或在已有策略上附加权限。策略中要增加的权限如下:

JSON
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:GetTable",
                "glue:GetTables",
                "glue:GetPartitionIndexes",
                "glue:GetPartition",
                "glue:BatchGetPartition",
                "glue:GetPartitions",
                "glue:GetUserDefinedFunctions"
            ],
            "Resource": "*"
        }
    ]
}

 

进入Kyligence Cloud UI,创建工作区时配置数据目录为 Glue。

(可选)配置跨账号 Amazon Glue 作为外部数据目录

如果 Kyligence Cloud 部署的亚马逊云服务账户和 Glue 数据目录的账户不同,则需要在亚马逊云服务IAM中进行额外的跨账户设置,然后在 Kyligence Cloud UI 中选择“ Glue(跨账号)”,并填写“账号 ID”。如下图所示:

创建完工作区后,在工作区详情中可以找到对应的角色 ARN,记录下管理节点的角色和本工作区的角色。

需要使用 AWS CLI (使用 Glue 实例所在的账户登录,即之前填写的账号 ID),对 Glue 添加 resource policy,以下标红的参数需要根据工作区信息填写,Resource 参数的 region 和 account ID 是创建工作区时填写的跨账号 ID 及其区域。脚本内容如下:

Bash
aws glue put-resource-policy --region region --policy-in-json '{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Principal": {
        "AWS": [
           "arn:aws:iam::XXX:role/XXX-KcOpsRole-XXX(管理节点的角色)",
           "arn:aws:iam::XXX:role/newten_iam_role_XXX(本工作区的角色)"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:GetTable",
        "glue:GetTables",
        "glue:GetPartitionIndexes",
        "glue:GetPartition",
        "glue:BatchGetPartition",
        "glue:GetPartitions",
        "glue:GetUserDefinedFunctions"
      ],
      "Resource": [
        "arn:aws:glue:us-west-2:457XXXXXXXXX:*"
      ]
    }
  ]
}'

加载 Glue 中的表

进入工作区,创建项目,在项目里点击加载表,即可看到账号下的 Glue 数据目录,选择需要的表进行加载,然后就可以进行表抽样,模型创建及构建等操作。

(可选)配置 S3 数据源访问权限

如果您想要加载 Glue 中的表,且表的数据存储在跨账号的 S3 桶中,则需要另外配置 S3 数据源访问权限。

步骤一:授权部署账号访问 S3 存储桶的权限

注意:为便于区分两个云账号,我们将部署了 Kyligence Cloud 的云账号称为账号 A,要访问的 S3 存储桶所属的云账号称为账号 B,下文以 亚马逊 国际站为例演示操作流程。

1)先通过 Amazon 控制台界面,获取账号 A 的账户 ID。

2)以账号 B 的身份登录 IAM 管理控制台。

3)创建访问策略,允许访问指定的 S3 存储桶。

a. 在左侧导航栏,选择访问管理 > 策略。

b. 单击页面右上角的创建策略。

c. 单击 JSON 标签页,将下述策略信息复制到 JSON 编辑窗口中,并填入目标 S3 存储桶的名称。

JSON
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::需要访问的 S3 存储桶名称",
                "arn:aws:s3:::需要访问的 S3 存储桶名称/*"
            ]
        }
    ]
}

单击下一步:审核,在摘要区域查看服务授权的具体信息,然后填写策略名称(本案例填写为 kc-s3-policy),单击创建策略。策略名称为数字、字母、特殊符号(+=,.@-_)的任意组合,最长支持 128 位。

4)创建 IAM Role 角色,允许账号 A 访问账号 B 下指定的 S3 存储桶。

a. 在左侧导航栏,选择访问管理 > 角色。

b. 单击页面右上角的创建角色。

c. 在选择可信实体页面,根据下述说明完成设置。

    • 可信实体类型:选择亚马逊云账户。
    • 选择另一个亚马逊云账户,然后填写您在步骤一获取的账号 A 的 ID。

a. 单击下一步。

b. 选中您在步骤 2 中创建的策略(kc-s3-policy),单击下一步。

c. 填写角色名称(本案例填写为 kc-s3-role),单击右下角的创建角色。

d. 返回角色列表页,单击刚创建的角色名称,获取角色 ARN 信息。

步骤二:在 S3 存储桶上添加存储桶策略

为存储桶创建存储桶策略。选择 S3 > <s3-bucket-name> > 权限 > 存储桶策略。在存储桶策略中包含管理节点的角色和本工作区的角色,具体填写内容如下:

JSON
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddAcl",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::XXX:role/XXX-KcOpsRole-XXX(管理节点的角色)",
                    "arn:aws:iam::XXX:role/newten_iam_role_XXX(本工作区的角色)"
                ]
            },
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket name/*",
                "arn:aws:s3:::bucket name"
            ]
        }
    ]
}

步骤三:挂载角色到工作区中

登录 Kyligence Cloud 平台。

注意:登录的账号为管理员账号或具备当前工作区 Analyst、Management 或 Workspace Admin 角色的账号。

  1. 在工作区列表页面,将鼠标悬停至目标工作区,进入项目列表。
  2. 在项目列表页面,单击 S3 数据源管理,再单击 + 存储桶。
  3. 在弹出的对话框中,根据下述说明完成配置。
    • 存储桶名称:填写待访问的存储桶名称。
    • 角色:填写您在步骤一中获取的角色 ARN 信息。

Amazon Glue 使用中可能遇到的问题

1) 在 Amazon Glue 创建表时,如果列类型为decimal,Glue 默认是不带精度的,如果源数据的decimal类型是有精度的(比如(16,4)),Kyligence Cloud 在加载时会将其定义为decimal(10,0),所以在抽样表数据时会报错,需要在工作区引擎配置中添加以下两个参数并重启引擎,即可抽样成功。

kylin.storage.columnar.spark-conf.spark.sql.parquet.enableVectorizedReader=false
kylin.engine.spark-conf.spark.sql.parquet.enableVectorizedReader=false

2) 在 Amazon Glue 创建表时,列类型VARCHAR是不带字段长度参数的,为避免 Kyligence Cloud 数据抽样无法识别该字段,建议创建表时选择类型为string,加载到 Kyligence Cloud 会将其定义为VARCHAR(4096)。

3)  Amazon Glue 中表的数据来源需为 S3,且格式需为 CSV、Parquet 或 ORC,其中 CSV 格式仅支持特定的 Serde 序列化库:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe,并且 Serde 参数需要改成field.delim={分隔符}serialization.format={分隔符}

总结

Amazon Glue 为用户提供了一种简单易用的数据目录管理方式,帮助用户轻松找到并访问数据。

Kyligence Cloud 则通过集成 Amazon Glue 数据目录,帮助用户实现统一的元数据管理,不仅降低了数据流转带来的成本,还提升了数据分析的效率。

统一数据目录之后的 Kyligence Cloud 可以让用户便捷地发现组织中的数据,并借助 AI 增强引擎实现数据查询的优化,最终让终端业务人员在 BI 分析工具中获得快速查询体验。

关于 Kyligence

上海跬智信息技术有限公司 (Kyligence) 由 Apache Kylin 创始团队于 2016 年创办,致力于打造下一代企业级智能多维数据库,为企业简化数据湖上的多维数据分析(OLAP)。通过 AI 增强的高性能分析引擎、统一 SQL 服务接口、业务语义层等功能,Kyligence 提供成本最优的多维数据分析能力,支撑企业商务智能(BI)分析、灵活查询和互联网级数据服务等多类应用场景,助力企业构建更可靠的指标体系,释放业务自助分析潜力。

 

本篇作者

顾单超

Kyligence Cloud 团队高级产品经理,负责管理Kyligence产品迭代和功能设计。

王莺瑛

Kyligence 高级产品市场经理,专注于Kyligence 产品定位与市场战略。