大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载Apache Flink 在 YARN 部署、Kerberos 认证等安全场景下需要一套可复现的测试环境。本指南基于当前仓库中 docker-hadoop-secure-cluster 目录 维护的 Docker 镜像完整讲解如何一键拉起一个启用 Kerberos 的 Hadoop 2.10.2 多节点集群1 个 KDC 1 个 master 2 个 worker并说明其环境变量、KDC 与 Hadoop 启动流程、关键安全配置以及 Flink 端到端测试脚本如何消费这套集群。读完本文你将能够独立构建、启动、登录验证该安全集群并理解其底层 principal/keytab 初始化机制与常见故障的修复方法。一、这套集群是什么Flink 安全测试的基础设施在现代 Flink 中与 YARN 相关的端到端测试例如 Kerberos 认证下的作业提交需要一套真实的、开启安全认证的 Hadoop 环境。仓库在flink-end-to-end-tests/test-scripts/docker-hadoop-secure-cluster/下维护了完整的 Docker 构建材料其镜像派生自社区知名的Knappek/docker-hadoop-secure项目并融合了Lewuathe/docker-hadoop-cluster的多节点启动思路见 hadoop/Dockerfile目标是提供KDCKerberos 密钥分发中心为集群内所有服务签发票据提供NameNode / ResourceManager / TimelineServer / HistoryServermaster 节点与DataNode / NodeManagerworker 节点开启 Hadoop RPC 的 Kerberos 认证、数据加密与 HTTPS-only 的 Web 界面模拟真实生产安全集群。该目录的完整结构如下flink-end-to-end-tests/test-scripts/docker-hadoop-secure-cluster/ ├── docker-compose.yml # 定义 kdc / master / worker1 / worker2 四个服务 ├── README.md # 官方使用说明本文所依托的核心文档 ├── hadoop/ # Hadoop 节点镜像 │ ├── Dockerfile │ ├── entrypoint.sh # principal 创建、keytab 导出、服务启动 │ └── config/ # core-site / hdfs-site / yarn-site / krb5.conf 等 └── kdc/ # Kerberos KDC 镜像 ├── Dockerfile └── entrypoint.sh # krb5.conf 生成、KDB 建库、admin 用户创建二、版本要求使用该镜像需要满足以下版本前提见 README.mdJDK 8Hadoop 节点镜像基于eclipse-temurin:8-jdk-jammy见 hadoop/Dockerfile并已通过sed开启 JRE 的crypto.policyunlimited以支持完整加密强度Hadoop 2.10.2Hadoop 二进制包需要自行下载镜像构建时解压到/usr/local/hadoop见 hadoop/DockerfileDocker Compose使用docker compose命令编排对应 compose 文件中的version: 3.5。三、默认环境变量一览README 定义了下表所示的默认环境变量它们决定了 Kerberos Realm、域映射与 KDC 管理凭据。这些变量既可以在docker-compose.yml中覆写也可以作为容器的环境变量传入见 docker-compose.yml 中environment:部分名称默认值说明KRB_REALMEXAMPLE.COMKerberos Realm即 Kerberos 认证域对应krb5.conf中的default_realmDOMAIN_REALMexample.comKerberos Domain Realm用于[domain_realm]段中域名到 Realm 的映射KERB_MASTER_KEYmasterkeyKerberos 主数据库KDB口令供kdb5_util建库使用KERBEROS_ADMIN_USERadmin/adminKDC 管理用户在 KDC 镜像中实际拆分为admin/admin形式见下文KERBEROS_ADMIN_PASSWORDadminKDC 管理密码例如 compose 文件中kdc服务显式设置了REALM: EXAMPLE.COM与DOMAIN_REALM: kdc.kerberos.com而 Hadoop 服务则通过KRB_REALM/DOMAIN_REALM控制客户端侧krb5.conf的渲染。四、构建与启动集群4.1 下载 Hadoop 发行包镜像构建过程依赖 Hadoop 2.10.2 的 tar 包。进入目录并下载README 原始命令见 README.mdcd flink-end-to-end-tests/test-scripts/docker-hadoop-secure-cluster wget -O hadoop/hadoop.tar.gz https://archive.apache.org/dist/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz说明下载命令中的 URL 为 Apache 官方归档地址历史版本存档。若网络不可达也可以像仓库测试脚本那样将 Hadoop 包预先缓存并软链到hadoop/hadoop.tar.gz参见 common_yarn_docker.sh。4.2 构建并启动docker compose build docker compose up构建过程会先后完成 KDC 镜像与 Hadoop 镜像的创建KDC 镜像kdc/Dockerfile基于debian:bullseye安装krb5-kdc与krb5-admin-server并暴露 Kerberos 端口88KDC与749kadmindHadoop 镜像hadoop/Dockerfile基于eclipse-temurin:8-jdk-jammy创建hdfs、yarn、mapred、hadoop-user四个系统用户安装krb5-user、openssh-server等工具配置免密 SSH端口改为2122以避免与宿主冲突并将hadoop.tar.gz解压到/usr/local/hadoop同时把 config/ 下的core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、container-executor.cfg、krb5.conf、ssl-server.xml、ssl-client.xml、keystore.jks等文件拷贝到对应位置。4.3 服务拓扑docker-compose.yml 定义了 4 个容器它们都加入同一个docker-hadoop-cluster-network网络服务容器名角色关键行为kdckdcKerberos KDC kadmind建库、创建 admin、启动krb5kdc与kadmindmastermasterNameNode ResourceManager TimelineServer HistoryServer格式化 NameNode、创建各类 principal/keytab、初始化 HDFS 目录worker1/worker2worker1/worker2DataNode NodeManager以hdfs/yarn用户启动 DataNode 与 NodeManager注意 master 与 worker 使用同一 Hadoop 镜像靠command: master/command: worker区分启动角色。五、进入容器验证安全集群5.1 登录容器启动完成后用docker ps找到容器名例如master然后进入docker exec -it container-name /bin/bash5.2 获取 Kerberos 票据master 初始化时已在/home/hadoop-user/hadoop-user.keytab预置了hadoop-user的 keytab见 hadoop/entrypoint.sh直接使用kinit获取票据kinit -kt /home/hadoop-user/hadoop-user.keytab hadoop-user5.3 使用 hdfs CLI拿到票据后即可像普通安全集群一样操作 HDFShdfs dfs -ls /主节点初始化脚本已经完成 HDFS 基础目录的准备/归属hdfs:hadoop且权限755/tmp权限1777并创建了/user/hadoop-user并归属hadoop-user见 hadoop/entrypoint.sh。六、底层原理KDC 的初始化流程KDC 容器的入口脚本 kdc/entrypoint.sh 展示了标准 Kerberos 服务搭建的四步流程生成krb5.conf根据KRB_REALM、DOMAIN_REALM、KDC_ADDRESS默认取hostname -f渲染出包含[logging]、[libdefaults]、[realms]、[domain_realm]四段的客户端配置。关键默认值包括ticket_lifetime 24h、renew_lifetime 7d、forwardable true创建 KDB 数据库kdb5_util -P ${KERB_MASTER_KEY} -r ${KRB_REALM} create -s-P即主密码对应 README 的KERB_MASTER_KEY创建 admin 用户kadmin.local -q addprinc -pw ${KERB_ADMIN_PASS} ${KERB_ADMIN_USER}/admin并写入kadm5.acl*/admin${KRB_REALM} *即该 Realm 下所有*/admin主体拥有全部管理权限——这正是 README 中KERBEROS_ADMIN_USER显示为admin/admin的原因启动服务同时拉起krb5kdcKDC 服务端口 88与kadmind管理服务端口 749随后tail -F监控krb5kdc.log保持容器前台运行。七、底层原理Hadoop 节点的 principal 与 keytab 初始化Hadoop 容器入口 hadoop/entrypoint.sh 做了三件关键事渲染配置、创建 principal/keytab、按角色启动服务。7.1 运行时配置渲染由于 KDC 容器先启动Hadoop 容器启动时 KDC 可能尚未就绪脚本先做以下替换用${KRB_REALM}替换core-site.xml/hdfs-site.xml/yarn-site.xml/mapred-site.xml//etc/krb5.conf中的EXAMPLE.COM用$(hostname -f)替换各 XML 中的HOSTNAME即_HOST通配符的运行时展开用${KEYTAB_DIR}默认/etc/security/keytabs替换 keytab 路径用${NM_CONTAINER_EXECUTOR_PATH}替换 container-executor 路径。7.2 principal 与 keytab 的创建含重试机制脚本通过kadmin连接 KDC 依次创建hdfs/_HOSTREALM、mapred/_HOSTREALM、yarn/_HOSTREALM、HTTP/_HOSTREALM四个服务主体addprinc -randkey随机生成密钥再通过xst -k导出到hdfs.keytab、mapred.keytab、yarn.keytab统一放入/etc/security/keytabs并设置400权限与对应属主关键细节第一次kadmin addprinc带有最长 800 秒的重试循环每 5 秒重试一次以应对KDC 尚未就绪的时序问题见 hadoop/entrypoint.sh。7.3 master 与 worker 角色的启动master 角色以hdfs用户格式化 NameNode后台启动namenode、resourcemanager、timelineserver、historyserver随后创建rootREALM与hadoop-userREALM主体并导出 keytab以root身份kinit后等待 HDFS 退出 safe mode完成目录初始化与/user/hadoop-user创建最后kdestroy清理并保持前台挂起worker 角色以hdfs/yarn用户分别后台启动datanode与nodemanager同样前台挂起。八、安全相关配置解析8.1 core-site.xml认证与 RPC 保护core-site.xml 中与安全相关的关键项hadoop.security.authentication kerberos全集群 RPC 启用 Kerberos 认证hadoop.security.authorization true启用服务级授权hadoop.security.auth_to_local定义 Kerberos principal 到本地 OS 用户的映射规则hadoop.rpc.protection privacyRPC 通道要求机密性加密属于较高的保护等级hadoop.ssl.*系列指定服务端/客户端 SSL 配置ssl-server.xml/ssl-client.xml并指定FileBasedKeyStoresFactory。8.2 hdfs-site.xmlHDFS 安全与 HTTPShdfs-site.xml 的关键项dfs.namenode.kerberos.principal hdfs/_HOSTEXAMPLE.COM、dfs.datanode.kerberos.principal、dfs.web.authentication.kerberos.principal HTTP/_HOSTEXAMPLE.COM定义 NameNode / DataNode / Web 端点主体dfs.namenode.keytab.file/dfs.datanode.keytab.file指向/etc/security/keytabs/hdfs.keytabdfs.block.access.token.enable true启用块访问令牌阻止未授权客户端直接访问 DataNodedfs.data.transfer.protection authenticationdfs.encrypt.data.transfer true数据块传输至少要求认证并启用传输加密dfs.http.policy HTTPS_ONLYHDFS Web 界面仅允许 HTTPS注释中明确提到dfs.namenode.http-address 0.0.0.0:0是为解决 FLINK-18117 引入的稳定性问题。8.3 yarn-site.xmlYARN 安全与调度yarn-site.xml 的关键项yarn.resourcemanager.principal yarn/_HOSTEXAMPLE.COM、yarn.nodemanager.principal、yarn.timeline-service.principal及对应 keytab定义 RM / NM / ATS 的主体与密钥yarn.timeline-service.http-authentication.type kerberosHTTP/_HOSTEXAMPLE.COMATS Web 端点使用 SPNEGO 认证yarn.resourcemanager.webapp.delegation-token-auth-filter.enabled true启用 delegation token 认证过滤器yarn.nodemanager.container-executor.class LinuxContainerExecutor使用 Linux 容器执行器配合container-executor.cfg资源相关yarn.nodemanager.resource.memory-mb 2500与yarn.scheduler.minimum-allocation-mb 1000的组合注释说明其意图是让 YARN/Kerberos 测试能在所有可用 NodeManager 上分布容器以暴露此前修复过的一个 Kerberos keytab bugyarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 99则用于在低磁盘环境下避免节点被误加入黑名单见 FLINK-16136。8.4 krb5.confKerberos 客户端krb5.conf 是打进 Hadoop 镜像的模板kdc kdc指向 KDC 容器名运行时由 entrypoint 用KRB_REALM/DOMAIN_REALM做文本替换后写入/etc/krb5.confKDC 容器侧则会在启动时按需重新生成一份内容相同的配置。九、与 Flink 端到端测试的集成这套集群并非孤立玩具它被仓库的 YARN 相关 e2e 测试脚本直接消费。在 common_yarn_docker.sh 中可以看到其典型用法# 启动安全集群-d 后台运行 docker compose -f ${END_TO_DIR}/test-scripts/docker-hadoop-secure-cluster/docker-compose.yml up -d # 停止并清理 docker compose -f ${END_TO_DIR}/test-scripts/docker-hadoop-secure-cluster/docker-compose.yml down脚本还负责 Hadoop 包的缓存与软链、镜像构建等步骤并支持通过DOCKER_HADOOP_IMAGE_NAME环境变量覆写 Hadoop 镜像名见 docker-compose.yml 中${DOCKER_HADOOP_IMAGE_NAME:-flink/test-hadoop:latest}的默认值写法。这意味着任何需要Kerberos 安全 YARN 环境的 Flink 测试如 Kerberos 认证下的作业提交、keytab 刷新等场景都可以复用本集群。十、已知问题与解决方案10.1 无法获取 Kerberos 密码首次 up 失败现象首次docker compose up时报错Login failure for nn/hadoop.docker.comEXAMPLE.COM from keytab /etc/security/keytabs/nn.service.keytab: javax.security.auth.login.LoginException: Unable to obtain password from user原因Hadoop 各守护进程在 KDC 尚未完全就绪keytab 尚未生成完毕时即尝试用 keytab 登录导致首次启动时序失败。解决停止容器后重新以后台方式启动即可README 官方解法docker compose down docker compose up -d10.2 Java Keystore 过期如果集群内 HTTPS 所用keystore.jks位于 hadoop/config/keystore.jks过期可按 README 提供的手工流程重新生成并替换生成带口令的私钥openssl genrsa -des3 -out server.key 1024生成证书签名请求openssl req -new -key server.key -out server.csr去除私钥口令复制原文件后再去除cp server.key server.key.org openssl rsa -in server.key.org -out server.key生成自签名证书365 天有效期openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt导入证书到新的 JKS 密钥库keytool -import -keystore keystore.jks -alias CARoot -file server.crt生成的新keystore.jks需覆盖到hadoop/config/keystore.jks构建时会被 ADD 到$HADOOP_HOME/lib/keystore.jks见 hadoop/Dockerfile随后重新构建镜像。十一、小结docker-hadoop-secure-cluster是 Flink 仓库中专门为安全场景Kerberos HTTPS 加密 RPC端到端测试而维护的多节点 Hadoop Docker 环境。通过一条 README 记载的「下载 Hadoop →docker compose build→docker compose up」链路即可获得一个与生产安全集群行为一致的测试床KDC 侧的四步初始化与 Hadoop 侧的 principal/keytab 创建逻辑含 800 秒重试保证了主从节点在 KDC 就绪前不会因时序问题崩溃。对于 Flink 开发者而言它既是 YARN/Kerberos 相关回归测试的可靠底座见 common_yarn_docker.sh也是学习如何在容器内搭建 Kerberos 化 Hadoop的最佳参考实现。赞分享大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载相关推荐Apache Druid 集成测试完整指南从 Docker 集群到自定义集群的端到端实践Apache Druid 集成测试完整指南从 Docker 集群到自定义集群的端到端实践 导读 本文档系统讲解 Apache Druid 官方集成测试int数据库OLAP大数据后端Apache Druid 集成测试框架脚本完全指南从 it.sh 到 Docker 镜像构建与集群编排Apache Druid 集成测试框架脚本完全指南从 it.sh 到 Docker 镜像构建与集群编排 Apache Druid 的下一代集成测试框架位于仓数据库OLAP大数据后端tiny-stable-diffusion-pipe性能测试在不同硬件上的运行效率对比终极指南tiny stable diffusion pipe性能测试在不同硬件上的运行效率对比终极指南 想要了解tiny stable diffusion pipe这上一篇Chat Nio代码分割动态导入与懒加载下一篇构建向量搜索教育平台教学资源与案例研究创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考