访问开启Kerberos的Hadoop集群

本文介绍如何配置Serverless StarRocks实例,以安全访问启用了KerberosHadoop集群,实现高效的数据查询与分析,确保数据访问的安全性与性能。

前提条件

  • 实例与集群准备:

    • 已创建EMR Serverless StarRocks实例,详情请参见创建实例

    • 已自建Hadoop集群,或者在EMR on ECS上创建包含了HDFS、Hive服务,并启用Kerberos身份认证的集群(例如DataLakeCustom类型),详情请参见创建集群

      本文以在EMR on ECS上创建EMR-5.18.1版本的DataLake集群为例。

  • 网络连通性:

    • 确保Serverless StarRocks实例和Hadoop集群(DataLake集群在)位于同一VPC内,或者网络已打通。

    • 配置安全组规则,允许StarRocks实例访问Hadoop集群(DataLake集群在)的相关端口。

      重要

      配置安全组规则时,端口范围请根据实际需求选择性开放必要的端口。

操作流程

步骤一:配置StarRocks实例参数

  1. 进入参数配置页面。

    1. 登录E-MapReduce控制台

    2. 在左侧导航栏,选择EMR Serverless > StarRocks

    3. 在顶部菜单栏处,根据实际情况选择地域。

    4. 单击目标实例的名称。

    5. 单击参数配置页签。

  2. 参数配置页面,单击新增配置项,新增以下配置项。

    文件

    配置项

    说明

    参考值

    hdfs-site.xml

    dfs.data.transfer.protection

    数据传输保护级别,确保数据在传输过程中的安全性。参数值需与DataLake集群保持一致。

    说明

    您可以在DataLake集群的HDFS服务的hdfs-site.xml文件中,搜索并查看dfs.data.transfer.protection参数值。

    integrity

    dfs.datanode.kerberos.principal

    DataNodeKerberos主体名称,需与DataLake集群保持一致。

    说明

    您可以在DataLake集群的HDFS服务的hdfs-site.xml文件中,搜索并查看dfs.datanode.kerberos.principal参数值。

    hdfs/_HOST@EMR.C-AAA**********CCC.COM

    dfs.namenode.kerberos.principal

    NameNode的 Kerberos主体名称,需与DataLake集群保持一致。

    说明

    您可以在DataLake集群的HDFS服务的hdfs-site.xml文件中,搜索并查看dfs.namenode.kerberos.principal参数值。

    hdfs/_HOST@EMR.C-AAA**********CCC.COM

    core-site.xml

    hadoop.security.authentication

    启用Kerberos身份验证机制。

    kerberos

    hive-site.xml

    hive.metastore.sasl.enabled

    是否启用SASL认证,默认为 true

    true

    hive.metastore.kerberos.principal

    Hive MetastoreKerberos主体名称,需与DataLake集群保持一致。

    说明

    您可以在DataLake集群的Hive服务的hive-site.xml文件中,搜索并查看hive.metastore.kerberos.principal参数值。

    hive/_HOST@EMR.C-AAA**********CCC.COM

(可选)步骤二:HA模式HDFS集群附加配置

如需访问HA模式的EMR集群,还需在StarRocks实例的参数配置页面,为hdfs-site.xml 文件添加以下配置。

说明

您可以在EMR集群的集群服务页签下,进入HDFS服务的配置页签,在hdfs-site.xml件中查找相关参数的值。

参数

说明

参考值

dfs.nameservices

指定HDFS服务的名称,您可以自定义。

hdfs-cluster

dfs.ha.namenodes.hdfs-cluster

自定义NameNode的名称,多个名称时以逗号(,)分隔。其中。hdfs-clusterdfs.nameservices自定义的名称。

nn1,nn2,nn3

dfs.namenode.rpc-address.hdfs-cluster.nn1

指定NameNodeRPC地址信息。其中nn表示dfs.ha.namenodes.xxx中配置的NameNode的名称。

master-1-1.c-aaa**********ccc.cn-beijing.emr.aliyuncs.com:8020

dfs.namenode.rpc-address.hdfs-cluster.nn2

master-1-2.c-aaa**********ccc.cn-beijing.emr.aliyuncs.com:8020

dfs.namenode.rpc-address.hdfs-cluster.nn3

master-1-3.c-aaa**********ccc.cn-beijing.emr.aliyuncs.com:8020

dfs.client.failover.proxy.provider.hdfs-cluster

指定Client连接NameNodeProvider。

org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

步骤三:Kerberos认证配置

  1. 配置kerberos.keytab文件。

    1. 获取Base64编码的Keytab文件。

      1. 通过SSH方式登录EMR集群,详情请参见登录集群

      2. 使用以下命令,将StarRocks访问Hive所需的hive.keytab文件进行Base64编码,并确保编码后的内容无换行符。

        base64 -w 0 /etc/taihao-apps/hive-conf/keytab/hive.keytab
        说明

        确保hive.keytab文件是Serverless StarRocks访问Hive所需的Keytab文件。如果Keytab文件内容不正确,可能会导致身份验证失败。

    2. StarRocks实例的参数配置页面,单击左侧的kerberos.keytab

    3. 将生成的Base64字符串填入kerberos.keytabContent配置项中。

  2. 配置krb5.conf文件。

    1. StarRocks实例的参数配置页面,单击左侧的krb5.conf

    2. content中填入以下内容,其内容应与DataLake集群的krb5.conf文件内容保持一致。

      说明

      您可以登录EMR集群,然后执行cat /etc/krb5.conf命令,获取DataLake集群中krb5.conf的文件内容。

      [libdefaults]
        default_realm = EMR.C-AAA**********CCC.COM
        dns_lookup_realm = false
        dns_lookup_kdc = false
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = true
        rdns = false
        dns_canonicalize_hostname = true
        pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
        kdc_timeout = 30s
        max_retries = 3
      
        [realms]
        EMR.C-AAA**********CCC.COM = {
        kdc = master-1-1.c-aaa**********ccc.cn-beijing.emr.aliyuncs.com:88
        kdc = master-1-2.c-aaa**********ccc.cn-beijing.emr.aliyuncs.com:88
        admin_server = master-1-1.aaa**********ccc.cn-beijing.emr.aliyuncs.com:749
        }

      涉及参数如下所示:

      • [libdefaults]部分

        参数

        说明

        default_realm

        默认的KerberosRealm,用于标识身份认证的范围。

        dns_lookup_realm

        是否通过DNS查找领域信息。通常设置为 false,以避免DNS解析问题。

        dns_lookup_kdc

        是否通过DNS查找KDC(Key Distribution Center)地址。通常设置为false

        ticket_lifetime

        Kerberos Ticket的有效期。本文示例设置为24h,表示Ticket24小时内有效。

        renew_lifetime

        Ticket续期的最大有效期。本文示例设置为7d,表示Ticket最多可以续期7天。

        forwardable

        是否允许Ticket转发。设置为true可支持跨服务的身份验证。

        rdns

        是否使用反向DNS解析。设置为false可避免DNS解析冲突。

        dns_canonicalize_hostname

        是否启用主机名规范化。设置为true可确保主机名解析的一致性。

        pkinit_anchors

        PKINIT锚点证书路径,用于支持基于公钥的身份验证。

        kdc_timeout

        KDC请求的超时时间。本文示例设置为30s,表示每次请求最多等待30秒。

        max_retries

        最大重试次数。本文示例设置为3,表示最多尝试3次连接 KDC。

      • [realms]部分

        参数

        说明

        EMR.C-AAA**********CCC.COM

        定义KerberosRealm。

        kdc

        KDC服务器地址及端口,用于分发Ticket。可以配置多个KDC地址以提高可用性。

        admin_server

        管理服务器地址及端口,用于管理Kerberos主体和Ticket。

步骤四:验证配置

  1. 通过EMR StarRocks Manager连接StarRocks实例

  2. 创建Hive Catalog。

    CREATE EXTERNAL CATALOG hive_catalog
    PROPERTIES (
      "type" = "hive",
      "hive.metastore.uris" = "thrift://master-1-1.c-7ebc1ff2****.cn-hangzhou.emr.aliyuncs.com:9083"
    );
    说明

    hive.metastore.urisHive MetaStoreURI。您可以在DataLake集群的Hive服务的hive-site.xml文件中,搜索并查看hive.metastore.uris参数值。

  3. 查看Catalog目录下的数据库。

    如果能够正常显示数据库列表,则说明访问正常。

    SET CATALOG hive_catalog;
    SHOW DATABASES;