
暂无个人介绍
2021 年 12 月 10 日,Apache 软件基金会发布了 Apache Log4j 2.0-2.14 的安全公告。此漏洞非常严重,在 CVSS 3.1 评分量表上的评分为 10 分(满分 10 分)。1. 总结在2021年12月10日,在Apache软件基金会发布的版本2.15.0 Log4j的Java日志库,修复CVE-2021-44228,影响的Log4j 2.0-2.14一个远程执行代码漏洞。攻击者可以利用此漏洞通过提交自定义请求来指示受影响的系统下载并执行恶意负载。此漏洞非常严重,在 CVSS 3.1 评分量表上的评分为 10 分(满分 10 分)。2. Cloudera如何应对此漏洞?我们行业和开源社区的软件和服务使用 Log4j 来处理日志消息。Cloudera 的安全和工程团队已确定此 CVE 对我们产品套件的影响,并且 Cloudera 客户已通过 Cloudera 的技术支持公告 (TSB) 和My Cloudera支持案例收到详细的更新。3. 哪些 Cloudera 产品和版本受到影响?多个 Cloudera 产品和开源项目使用 Log4j 来处理日志消息。Cloudera 支持团队已通过详细的 TSB 向我们的 Cloudera 客户提供了受影响产品和版本的列表。如果您不是 Cloudera 的现有客户,请转到此处。 4. Cloudera客户需要做什么来缓解这种 CVE?我们鼓励客户查看我们的 TSB 中的详细信息并立即应用变通方法。同时,客户应计划升级到即将发布的 Cloudera 软件版本,其中包含针对此 CVE 的修复程序。了解此漏洞不仅限于 Cloudera 产品也很重要。此漏洞可能会影响底层基础架构软件以及客户在 Cloudera 产品之上运行的工作负载,例如 Spark 作业或 Flink 应用程序。我们建议客户评估其整个环境以使用 Log4j 并尽快对其进行修复。5. 客户应该等待新的 Cloudera 版本还是使用建议的补救措施?情况危急,漏洞利用和绕过开始在互联网上传播。除非您知道您的环境受到补偿性控制的全面保护,否则我们建议客户立即通过建议的补救措施解决这种情况,并计划升级到即将发布的软件版本。请通过My Cloudera创建支持案例以获取任何进一步的问题或说明。 6. log4j2 CVE-2021-44228 中针对 CDH、HDP、HDF 和 CDP 私有云和数据服务的严重漏洞的解决方案6.1. 总结本文档适用于 CDH、HDP、HDF 和 CDP 私有云和数据服务。6.2. 症状Apache 安全团队发布了针对影响 Apache Log4j2 的 CVE-2021-44228 的安全公告。恶意用户可以利用此漏洞以运行受影响软件的用户或服务帐户身份运行任意代码。使用 log4j 版本 2.0 到 2.14.1 的软件产品受到影响,而 log4j 1.x 不受影响。Cloudera 正在为受影响的软件提供短期解决方法,并且正在创建包含此 CVE 修复程序的新版本。6.3. 指令6.3.1. 短期解决方案6.3.1.1. 脚本下载地址从此处的 GitHub 存储库下载所有文件- https://github.com/cloudera/cloudera-scripts-for-log4j您必须在所有受影响的集群节点上运行以下脚本。注意:应用短期解决方案后,如果添加节点,则需要在新节点上再次重新应用短期解决方案。脚本:run_log4j_patcher.sh [cdp|cdh|hdp|hdf]功能: run_log4j_patcher.sh脚本扫描目录中的 jar 文件,并从它找到的文件中删除 JndiLookup.class。不要在下载的目录中运行任何其他脚本——它们会被 run_log4j_patcher.sh 自动调用。1) 在执行脚本之前停止生产集群中所有正在运行的作业。2) 从 GitHub 存储库下载所有文件并复制到集群的所有节点。3) 在集群的所有节点上以 root 身份运行脚本。 1) 脚本将采用 1 个强制参数 (cdh|cdp|hdp)2) 该脚本采用 2 个可选参数:要扫描的基本目录和备份目录。两者的默认值分别是 /opt/cloudera 和 /opt/cloudera/log4shell-backup。这些默认值适用于 CM/CDH 6 和 CDP 7。 HDP将需要更新不同的文件夹。4) 确保脚本输出的最后一行指示“已完成”以验证作业是否已成功完成。如果命令退出失败,脚本将失败。 5) 重新启动 Cloudera Manager Server、所有集群以及所有正在运行的作业和查询。6.3.1.2. 用法:$PROG(子命令)[选项]子命令:· Help 打印此消息· cdh 扫描一个 CDH 集群节点· cdp 扫描一个 CDP 集群节点· hdp 扫描一个 HDP 集群节点· hdf 扫描一个 HDF 集群节点选项(仅限cdh和 cdp 子命令):l -t <targetdir> 覆盖目标目录(默认值:特定于发行版)l -b <backupdir> 覆盖备份目录(默认值:/opt/cloudera/log4shell-backup)环境变量(仅限cdh和 cdp 子命令):仅当您再次运行脚本并想要跳过已经完成的阶段时,才应使用 SKIP_* 环境变量。l SKIP_JAR 如果非空,跳过扫描和修补 .jar 文件l SKIP_TGZ 如果非空,跳过扫描和修补 .tar.gz 文件l SKIP_HDFS* 如果非空,跳过扫描和修补 HDFS 中的 .tar.gz 文件l RUN_SCAN 如果非-空,对丢失的易受攻击的文件运行最终扫描。这可能需要几个小时。注意:CDH/CDP 包:该脚本从/opt/cloudera 下已安装的所有 CDH/CDP 包中删除受影响的类。在安装新的 Parcel 或升级到不包含长期修复的较新版本的 CDH/CDP 之后,需要重新运行此脚本。6.3.1.3. 从 Oozie 共享库(CDH 和 CDP)中删除受影响的类该漏洞影响 Cloudera Manager 上传到 HDFS 中的客户端库。该脚本负责处理 Tez 和 MapReduce 库,但需要手动更新 Oozie 库。以下部分仅适用于 CDH 和 CDP 版本。 按照以下说明保护 Oozie 共享库:1) 在受影响的集群上执行run_log4j_patcher.sh。2) 导航到 Cloudera Manager > Oozie > Actions -> “Install Oozie ShareLib”以从 Cloudera Manager 重新上传 HDFS 中的 Oozie 库。重要提示:在执行命令之前确保 Oozie 服务正在运行。 6.3.2. 从 Oozie 共享库 (HDP) 中删除受影响的类运行以下命令来更新 Oozie 共享库:su oozie kinit oozie /usr/hdp/current/oozie-server/bin/oozie-setup.sh sharelib create -fs hdfs://ns1 oozie admin -oozie http(s)://<oozie-host/loadbalancer>: 11(000|443)/oozie-sharelibupdate 6.3.3. 已知限制:l 尚不支持不安全(不使用 Kerberos)的集群。l 此短期修复尚不支持使用包而不是包的 CDH 集群。7. CDH、HDP、HDF、CDP私有云产品列表及适用的短期解决方案产品短期解决方案CDH, HDP, and HDF Hortonworks Data Platform (HDP)YesAmbariYesAM2CM ToolYesSmartSense没影响Data Platform SearchYesCloudera Cybersecurity Platform研究正在进行中Cloudera EnterpriseYesCloudera Manager (Including Backup Disaster Recovery (BDR) and Cloudera Navigator)YesCloudera Data Science Workbench (CDSW)YesHortonworks Data Flow (HDF)YesStreams Messaging Manager (SMM) for HDF and HDPYesStreams Replication Manager (SRM) for HDF and HDPYesCloudera Edge Management (CEM)YesHortonworks DataPlane Platform没影响Data Lifecycle Manager (DLM)没影响Data Steward Studio (DSS)没影响Data Analytics Studio (DAS)YesArcadia EnterpriseYesCDP Private Cloud CDP Private Cloud BaseYesCloudera Manager (Including Backup Disaster Recovery (BDR) and Replication Manager)YesCloudera Data Warehouse (CDW)YesCloudera Machine Learning (CML)YesCloudera Data Engineering (CDE)YesManagement ConsoleYesWorkload XM没影响Cloudera Flow Management (CFM)研究正在进行中Cloudera Streaming Analytics (CSA)研究正在进行中Cloudera Edge Management (CEM)Not ImpactedCloudera Stream Processing (CSP)研究正在进行中CDS 3 Powered by Apache Spark研究正在进行中CDS 3.2 for GPUs研究正在进行中 请回头参考这篇文章,因为它会随着新信息的出现而不断更新。作者: Paul Codding和Sudhir Menon原文链接:https://blog.cloudera.com/cloudera-response-to-cve-2021-4428
介绍Apache Impala 是Cloudera 支持的大规模并行内存SQL 引擎,专为分析和针对存储在Apache Hive、Apache HBase 和Apache Kudu 表中的数据的即席查询而设计。支持强大的查询和高并发性Impala 可以使用大量的集群资源。在多租户环境中,这可能会无意中影响相邻的服务,例如YARN、HBase甚至 HDFS。大多数情况下,这些相邻的服务可以通过启用静态服务池来隔离它使用 Linux cgroups 来修复每个服务的CPU 和内存分配。这些可以使用Cloudera Manager 向导进行简单配置。然而,Impala准入控制通过将查询引导到离散资源池中以实现工作负载隔离、集群利用率和优先级排序,从而在Impala 内实现细粒度的资源分配。这篇博文将努力:· 解释Impala的准入控制机制; · 提供资源池配置的最佳实践;· 提供针对现有工作负载调整资源池配置的指南。Impala 查询执行剖析在我们详细研究准入控制之前,让我们快速概述一下Impala 查询执行。Impala实现了一个 SQL 查询处理引擎,它基于充当工作线程和协调器的守护进程集群。客户端将其查询提交给协调器,该协调器负责在集群的工作线程之间分配查询执行。 Impala 查询处理可以分为三个阶段:编译、准入控制和执行,如下图所示:编译当 Impala 协调器收到来自客户端的查询时,它会解析查询,将查询中的表和列引用与Impala 目录服务器管理的架构目录中包含的数据统计信息对齐,然后对查询进行类型检查和验证。 使用表和列统计信息,协调器生成优化的分布式查询计划- 关系运算符树 - 具有可并行化的查询片段。它将查询片段分配给工作人员,考虑到数据局部性——从而形成片段实例——并估计查询的每个主机主内存消耗的峰值。它进一步确定了工作人员在接收他们的片段时最初将分配用于处理的主内存的分配。准入控制编译后,协调器将查询提交给准入控制。准入控制基于主内存估计和片段分配以及已经准许进入集群的查询来决定查询是被准许执行、排队还是拒绝。为此,它会在每个主机和每个集群的基础上保留一个估计被承认的查询消耗的主内存的计数——后者被划分为由集群管理员定义的所谓的资源池。如果查询有足够的空间来适应每个主机和每个资源池的计数,它将被允许执行。准入控制的关键指标是查询的MEM_LIMIT:查询的每台主机内存消耗允许的最大值。MEM_LIMIT通常——但并不总是我们稍后会看到的——与查询编译阶段估计的每个节点内存消耗峰值相同。执行准入后,协调器开始执行查询。它将片段实例分发给工作程序,收集部分结果,组装总结果,并将其返回给客户端。 工作程序从查询编译阶段确定的初始主内存预留开始执行。随着执行的进行,工作人员可能会严格遵守准入控制所允许的MEM_LIMIT 来增加为查询分配的内存。如果查询的主内存消耗接近这个限制,它可能会决定将内存溢出到磁盘(如果允许的话)。如果主内存消耗达到MEM_LIMIT,则查询将被终止。在执行期间,协调器会监视查询的进度并记录详细的查询配置文件。查询配置文件将比较查询编译阶段的估计行数和主内存消耗与查询实际消耗的行数和主内存。这为查询优化和表统计的质量提供了宝贵的见解。Impala 准入控制详解在对 Impala 查询执行的一般概述之后,让我们深入了解Impala 准入控制。准入控制主要由 · 分配给每个守护进程的主内存(mem_limit配置参数);· 分配给资源池的总集群内存份额及其配置;· 查询计划器的总内存消耗和每个主机的内存消耗估计。让我们看一下关键资源池配置参数和查询的准入控制过程的具体示例。资源池资源池允许将 Impala 集群内存总量划分为不同的用例和租户。分段不是在公共池中运行所有查询,而是允许管理员将资源分配给最重要的查询,以便它们不会被业务优先级较低的查询中断。关键的资源池配置参数是:· Max Memory:集群中可以允许池中运行的查询的总主内存量。如果在池中已运行的查询的预期总主内存之上,将被允许进入池的查询的预期总主内存消耗超过此限制,则查询将不被允许。查询可能会被拒绝或排队,具体取决于池的队列配置。· 最大查询内存限制:查询允许的最大每台主机内存消耗的上限 (MEM_LIMIT)。准入控制永远不会对查询施加大于最大查询内存限制的 MEM_LIMIT - 即使查询编译阶段估计的每个主机内存消耗峰值超过此限制。与 Max Memory 不同,Maximum Query Memory Limit 影响所有池的准入控制。即,如果在已经运行的查询的 MEM_LIMIT 之上的查询的MEM_LIMIT(受最大查询内存限制限制)超过给定守护程序的配置主内存 mem_limit,则该查询将不被接受。· 此参数的目的是限制查询对准入控制的大且可能不好或过于保守的峰值每主机内存消耗估计的影响 - 例如,基于没有统计信息的表或非常复杂的查询的查询。此参数与 Max Memory、守护进程的数量以及守护进程的 mem_limit 配置相结合,分别隐式地定义了在池中和跨池中运行的查询的潜在并行度。根据经验,最大查询内存限制应该是最大内存除以捕获所需查询池并行度的守护进程数量的一部分。· 最小查询内存限制:查询允许的最大每台主机内存消耗的下限 (MEM_LIMIT)。无论每个主机的内存估计如何,MEM_LIMIT 都不会小于此值。最小查询内存限制的安全值为每个节点 1GB。· Clamp MEM_LIMIT:客户端可以通过将MEM_LIMIT 查询选项显式设置为不同的值(例如,通过在其查询前添加SET MEM_LIMIT=...mb)来覆盖由查询编译估计的每个主机内存消耗峰值以及由准入控制派生的结果MEM_LIMIT . 如果 Clamp MEM_LIMIT 未设置为 true(这是默认值),则用户可以完全忽略资源池的最小和最大查询内存限制设置。如果设置为 true,则客户端明确提供的任何 MEM_LIMIT 都将绑定到最小和最大查询内存限制设置。· Max Running Queries:虽然最小和最大查询内存限制设置与最大内存设置和守护进程的数量一起隐含地定义了一个资源池内可以并行运行的查询数量的范围,但最大运行查询允许定义一个固定的可以同时运行的查询数。· Max Queued Queries:如果一个查询不能被立即接纳,因为它的MEM_LIMIT 会超过池的最大内存限制或守护进程的mem_limit 配置参数,Impala 准入控制可以将查询发送到池的等待队列。Max Queued Queries 定义了这个队列的大小,默认为200。如果队列已满,查询将被拒绝。· 队列超时:查询在被拒绝之前可以在池的等待队列中等待多长时间的限制。默认超时为一分钟。准入控制示例让我们使用一个简化的示例来说明Impala 准入控制以及每个主机的峰值内存消耗估计和资源池设置之间的相互作用:在上图中,客户端通过示例资源池P2 向 Impala 协调器提交了一个简单的 group by / count 聚合SQL 查询。使用正在查询的表的架构目录和查询统计信息,查询规划器估计每台主机的峰值内存使用量为570 MiB。此外,规划器已确定查询的片段将在主机wn001、wn002、wn-003 和 wn004 上执行。有了这个查询编译结果,查询就被移交给准入控制。出于示例的目的,我们假设资源池P2 已配置为 2000 MiB的最大查询内存限制、500MiB的最小查询内存限制和6000MiB 的最大内存设置。每个主机的峰值内存消耗估计为570MiB,正好符合最小和最大查询内存限制设置。因此,准入控制不会以任何方式修改此估计值,而是将MEM_LIMIT 设置为570 MiB。如果估计值高于2000MiB,则MEM_LIMIT 将被限制为2000MiB;如果估计值低于500MiB,则MEM_LIMIT 将被缓冲到500MiB。对于准入,准入控制检查节点wn001、wn002、wn-003 和 wn004 上已经运行的查询的所有MEM_LIMIT 总和加上570 MiB 是否超过这些节点配置的主内存mem_limit 中的任何一个。 准入控制进一步检查查询的MEM_LIMIT 乘以查询将在已经运行的查询之上运行的节点数是否仍然符合P2 配置的 6000 MiB的最大内存设置。如果两个检查中的任何一个失败,准入控制将排队或拒绝查询,具体取决于是否已达到等待队列限制。如果两个检查都通过,准入控制允许查询在570MiB 的MEM_LIMIT 下执行。只要每个工作节点在节点上消耗的主内存不超过此限制,它就会执行查询——如果是这种情况,工作节点将终止查询。准入控制最终将受影响节点的主机内存准入计数增加MEM_LIMIT (570MiB);它还将通过查询将在MEM_LIMIT (570MiB * 4 = 2280 MiB) 上运行的节点数增加资源池的集群内存。准入控制最佳实践在说明了 Impala 准入控制的工作原理之后,问题是通过资源池配置准入控制以适应自己的工作负载的合理策略是什么。通过调整准入控制,人们试图在几个目标之间取得平衡,核心目标是:· 工作负载隔离;· 集群资源利用率;· 快速查询录取。在下文中,我们提出了使用可用的Impala 准入控制配置选项实现这些目标的基本建议。请注意,某些推荐的优化策略被重复以实现不同的目标。在这些建议中,我们提到了集群参数以及工作负载特征。我们首先列出集群的基本参数和在确定准入控制配置时应该收集的预期工作负载。集群和工作负载参数以下基本集群参数会影响Impala 准入控制的各种配置选项:· 集群中Impala 工作进程的数量;· 为这些工作人员配置的每节点内存mem_limit· Impala 集群的最终最大内存(workers * mem_limit)。 · 在所有池中运行的并发查询总数。参数化工作负载不太明确。通常,在准入控制配置时不知道确切的工作负载特征,它们可能会随时间变化,或者难以量化。但是,管理员应该考虑:· 在Impala 上运行的应用程序· 在 Impala 上运行的工作负载类型· 查询并行度· 可接受的等待时间 · 内存消耗Cloudera Manager 通过 Impala > Queries 页面在这方面提供了一些有用的见解:在该页面上,可以按方面过滤查询,例如,每个节点的峰值内存使用量以及查询计数:同样,所有节点上查询的峰值内存使用量都有一个直方图:使用此信息,管理员可以迭代资源池配置并开始优化队列配置以最好地满足业务需求的过程。通常,随着使用知识和洞察力的发展,将需要多次迭代。实现工作负载隔离保持池同质:为了隔离工作负载,保持资源池同质很有用。也就是说,池中的查询本质上应该是相似的,无论它们是需要偶尔分配大内存的临时分析,还是高度调整的常规ELT 查询。根据相对负载设置资源池的最大内存:确定资源池后,为每个池确定的第一个配置参数是最大内存。您可能还记得,这是整个Impala 工作程序主内存的份额,允许控制允许查询进入池。选择最大内存的一种简单方法是将其设置为应授予池中查询的相对负载份额。例如,可以基于预期或展示的查询率或内存使用量来量化相对负载份额。避免拥有太多资源池:拥有太多资源池也不理想,因为该池的Impala 内存已被保留,其他池无法使用该内存(除非该池被过度配置)。这基本上会导致繁忙的池排队并且空闲池中的内存未被使用。理想情况下,如果最大和较小的租户可以共享资源池,则取决于大约10 个池的用例。不要陷入隔离谬误:回想一下,资源池不提供完整的工作负载隔离。这样做的原因是准入控制保持每个主机对所有准许执行的查询的MEM_LIMIT 进行统计的方式。该计数与资源池无关。但是,正如我们将在下面看到的,您可以降低录取被拒绝的可能性。保持最大查询内存限制低:通过减少每个资源池的最大查询内存限制,所有被承认的查询的MEM_LIMITs 达到工作人员的mem_limit 的可能性降低。 启用Clamp MEM_LIMIT:如果没有为资源池启用 Clamp MEM_LIMIT,则每个向该池提交查询的用户都可以强制准入控制设置MEM_LIMIT,即使在池的最小查询内存限制和最大查询内存限制的范围之外。因此,通过在查询前添加SET MEM_LIMIT=<very large value>,恶作剧的用户可以快速阻止准入控制,不仅允许进一步查询进入同一个池,而且阻止来自其他池的其他查询到同一个工作进程守护进程。计算表统计数据:使用当前统计数据这样做会产生更好的——即更低的——查询规划器对每台主机内存的估计,这是准入控制的MEM_LIMIT 的基础。此外,查询计划将被优化,这将导致改进的执行时间。更快的执行时间意味着在准入控制中阻塞内存的时间更少。避免将查询溢出到磁盘:溢出到磁盘的查询会显着降低查询速度。慢查询会在较长时间内阻塞准入控制中的内存,这增加了阻塞其他查询准入的可能性。因此,设置积极的(最小的)SCRATCH_LIMITS 以确保此类查询被快速终止,条件是在某些情况下,溢出到磁盘是不可避免的。通常,管理溢出的主要策略是通过管理统计信息、文件格式和布局来确保查询不会首先溢出。禁用不安全溢出将确保可能达到该限制的查询被快速终止。 可以设置SCAN_BYTES_LIMIT 来控制扫描100 个分区的查询和NUM_ROWS_PRODUCED_LIMIT 以避免设计不良的查询- 例如交叉连接,但是在普遍设置这些限制时应该谨慎,因为在每个查询或每个池级别设置可能更合适,并且反映集群的运行特性和容量。有关 更多信息,请参阅CDP 私有云基础文档。设置最大运行查询数以限制并行度:由于许多查询以不受控制的方式提交到池中,过于宽松的并行度边界可能会允许这些查询填满每个主机允许的内存计数,从而阻止其他池中的查询跑步。通过将Max Running Queries 参数设置为池工作负载所需的查询并行度,可以为来自其他池的查询创建每台主机内存计数的空间。这应该伴随适当的等待队列设置(最大排队查询和队列超时)。实现高集群资源利用率保持最大查询内存限制接近每节点查询内存消耗峰值:保持最大查询内存限制接近每节点内存消耗的实际峰值对于实现良好的集群内存利用率非常重要。记住 Impala 准入控制不考虑查询的实际内存消耗。相反,它根据受最小和最大查询内存限制值约束的查询规划器内存估计,通过MEM_LIMIT 管理准入。池的最大查询内存设置得越慷慨,准入控制就越愿意考虑和信任规划器的大量保守内存估计,这可能会导致- 例如 - 丢失或过时的表统计信息或非常复杂的查询计划。仅在必要时限制并行度:尽管其他资源池中的负载有限,但在准入控制不再允许查询进入已达到其运行查询限制的池的情况下,设置最大运行查询会导致集群利用率降低。因此,查询并行性应该只针对查询摄取率高突发或许多长时间运行的查询的池进行明确限制。集群级别查询并行限制:在集群级别,在所有池中,建议在任何时间运行的总查询数建议接近数据节点上多线程内核总数的1.5 到2.x。这可确保每个查询都获得适当的CPU 时间份额,并且不会频繁地被调出。因此,如果数据节点有2*24 个核心处理器,那么通过多线程,我们有96 个多线程核心。 有了这个,我们建议在任何给定时间集群上的并发查询总数不应超过96 个查询。实现快速查询准入理想的查询准入控制应该几乎不会被客户端注意到,但仍能确保工作负载隔离和高度的集群利用率。然而,客户端特别明显的一个影响是,当Impala 准入控制不承认查询进入集群,而是将其放入等待队列中,甚至可能超时。 设置一个较低的最大查询内存限制:不仅降低了每个主机承认的内存计数达到工作线程的mem_limit 的风险;它还使查询消耗更少的池的最大内存本身,再次降低了等待时间的风险。在大多数情况下,1GiB是一个合理的低值。启用Clamp MEM_LIMIT ,这样查询作者不能有意或无意地为他们的查询设置过大的MEM_LIMITs 准入控制。确保当前的表统计信息:支持查询计划器以较低的内存估计创建更好更快的查询计划。 限制溢出查询:由于这些查询速度很慢,会在很长一段时间内给每个池承认的内存计数带来负担,从而对查询不被允许进入集群的风险产生负面影响。溢出增加了磁盘的工作,减慢了查询的读取速度,这是您强烈希望避免的事情考虑每个池的等待时间弹性:实际上,必须在查询摄取率突发或长时间运行的查询的池查询的等待时间与具有不同查询特征和要求的其他池的查询的等待时间之间取得平衡。从一个应用程序的角度来看,快速查询准入可能构成从另一个应用程序的角度来看的次优工作负载隔离。为了能够为资源池进行等待队列配置,因此了解向这些资源池发出查询的不同应用程序可接受的准入等待时间是很重要的。总结总之,我们已经演示了Impala 查询的剖析,它是如何计划、编译和允许执行的,以及管理员如何使用查询配置文件来调整和优化查询的资源使用。我们已经描述了Impala 准入控制以及如何使用它来分割Impala 服务资源并进行调整,以便根据业务优先级安全执行满足既定要求的查询。此处提供了更多文档。 原文作者: Niel Dunnage和Utz Westermann原文链接:https://blog.cloudera.com/admission-control-architecture-for-cloudera-data-platform/
Cloudera Data Platform (CDP)通过合并来自Cloudera Enterprise Data Hub (CDH)和Hortonworks Data Platform (HDP)这两个传统平台的技术,为客户带来了许多改进。CDP 包括新功能以及一些先前存在的安全和治理功能的替代方案。CDH 用户的一项重大变化是将 Sentry 替换为 Ranger 以进行授权和访问控制。 对于像 Cloudera 堆栈这样的大数据平台,由多个业务部门和多个用户使用,即使升级小版本也必须是一项精心策划的活动,以减少对用户和业务的影响。因此,在 CDP 中升级到新的主要版本可能会引起犹豫和担忧。访问正确的信息集有助于用户提前准备并消除升级过程中的任何障碍。这篇博文向 CDH 用户提供了 Ranger 作为 CDP 中 Hadoop SQL 策略的 Sentry 替代品的快速概述。1. 为什么要切换到Ranger?Apache Sentry 是 Hadoop 中特定组件的基于角色的授权模块。它在为 Hadoop 集群上的用户定义和实施不同级别的数据权限时很有用。在CDH中,Apache Sentry为Apache Hive和Apache Impala等Hadoop SQL组件以及Apache Solr、Apache Kafka和HDFS(仅限于Hive表数据)等其他服务提供了一个独立的授权模块。Sentry 依靠 Hue 进行可视化策略管理,依靠 Cloudera Navigator 来审计 CDH 平台中的数据访问。 另一方面,Apache Ranger 提供了一个全面的安全框架来启用、管理和监控整个 Hadoop 平台的数据安全。它提供了一个集中式平台,可以跨 Sentry 保护的所有 Hadoop 组件以及 Apache Hadoop生态系统中的其他服务(如 Apache HBase、YARN、Apache NiFi)一致地定义、管理和管理安全策略。此外,Apache Ranger 现在支持公共云对象存储,如 Amazon S3 和 Azure Data Lake Store (ADLS)。Ranger 还通过实时跟踪所有访问请求的集中审核位置,为安全管理员提供对其环境的深入了解。 Apache Ranger 拥有自己的 Web 用户界面 (Web UI),它是通过 Hue 服务提供的 Sentry 的 Web 界面的更好替代方案。Ranger Web UI 也可用于安全密钥管理,使用 Ranger KMS 服务的密钥管理员可以单独登录。Apache Ranger 还提供了非常需要的安全功能,例如开箱即用的列掩码和行过滤。另一个重要因素是 Ranger 中的访问策略可以使用不同的属性(如地理区域、一天中的时间等)在动态上下文中进行自定义。下表给出了 Sentry 和 Ranger 之间功能的详细比较。 2. Sentry到Ranger——一些行为改变如上所述,Sentry 和 Ranger 是完全不同的产品,在架构和实现上有很大的不同。下面列出了当您从 CDH 的 Sentry 迁移到 CDP 中的 Ranger 时的一些显着行为变化。· Sentry 中的继承模型与 Ranger 中的显式模型o 在 Sentry 中,对层次结构中的容器对象授予的任何权限都会由其中的基础对象自动继承。例如,如果用户对数据库范围拥有 ALL 权限,则该用户对包含在该范围内的所有基础对象(如表和列)拥有 ALL 权限。因此,授予数据库用户的一项授权将授予对数据库中所有对象的访问权限。o 在 Ranger 中,应存在具有必要权限的显式 Hadoop SQL 策略,以便用户访问对象。这意味着,Ranger提供了更细粒度的访问控制。在数据库级别拥有访问权限不会在表级别授予相同的访问权限。并且在表级别获得访问权限不会在列级别授予相同的访问权限。例如,使用 Ranger Hadoop SQL 策略,要向用户授予对所有表和列的访问权限,请使用通配符创建策略,例如 – 数据库→ <数据库名称>、表→ * 和列 → *。 · 访问控制实施——Sentry与Rangero Hive的 Sentry 授权处理通过 HiveServer2 执行的语义钩子发生。每次访问请求都会返回 Sentry Server 进行验证。Impala 中的访问控制检查与 Hive 中的类似。Impala 中的主要区别在于 Impala Catalog 服务器对 Sentry 元数据(权限)的缓存。o CDP Private Cloud Base 中支持基于 Ranger 授权的所有服务都有一个关联的 Ranger 插件。这些 Ranger 插件在客户端缓存访问权限和标签。他们还定期轮询特权和标签存储以了解任何更改。当检测到更改时,缓存会自动更新。这样的实现模型使 Ranger 插件能够完全在服务守护进程内处理授权请求,从而显着提高性能,并在面对服务外的故障时具有弹性。 · HDFS 访问同步实现——Sentry Vs Rangero Sentry有一个选项可以自动转换 SQL 权限以提供对 HDFS 的访问。这是通过 HDFS-Sentry 插件实现的,该插件允许您为特定 HDFS 目录配置 Sentry 权限与 HDFS ACL 的同步。启用同步后,Sentry 会将数据库和表的权限转换为 HDFS 中底层文件的相应 HDFS ACL。并且可以通过使用 HDFS 命令列出扩展 ACL 来查看这些对 HDFS 文件添加的访问权限。o 自 CDP Private Cloud Base 7.1.5 起,引入了一个功能 Ranger Resource Mapping Server (RMS),用于相同的目的。请注意,RMS 在 CDP Private Cloud Base 7.1.4 中作为技术预览可用。Sentry 中HDFS ACL 同步的实现与 Ranger RMS 处理从 Hive 到 HDFS 的访问策略自动转换的方式不同。但是表级访问的底层概念和授权决策是相同的。请重新阅读这篇Ranger RMS导读博文,以了解有关此新功能的更多信息。· SQL 中 HDFS 位置的访问权限 – Sentry Vs Rangero 在 Sentry 中,以下操作需要某个位置的 URI 权限§ 显式设置表的位置——创建外部表§ 更改表的位置 – 更改表§ 从带有位置的表中导入和导出§ 从 jar 文件创建一个函数o 在 Ranger 中,Hadoop SQL 中的“URL”策略或Hive 对象使用的位置的 HDFS 策略可用于此类使用位置的活动的相同效果。要创建函数,需要在 Hadoop SQL 中的“udf”策略中具有适当的权限。· Ranger中的特殊实体o “public”组- 这是 Ranger 中的一个特殊内部组,由系统上存在的任何经过身份验证的用户组成。成员身份是隐含的和自动的。应该注意的是,所有用户都将成为该组的一部分,并且授予该组的任何策略都为每个人提供访问权限。以下是授予此特殊组“public”权限的默认策略。根据安全要求,可以从这些默认策略中删除“public”以进一步限制用户访问。§ 全部 – 数据库 ⇒ public ⇒ create权限§ 允许用户自助创建自己的数据库§ 默认数据库表列⇒public⇒create权限§ 允许用户在默认数据库中自助创建表§ Information_schema 数据库表列⇒ public ⇒ select权限§ 允许用户查询有关表、视图、列和您的 Hive 权限的信息o 特殊对象{OWNER} – 这应该被视为 Ranger 中的一个特殊实体,它会根据用户的行为附加到用户身上。使用这个特殊对象可以显着简化策略结构。例如,如果用户“bob”创建了一个表,那么“bob”将成为该表的 {OWNER},并且将在所有策略中获得在该表上提供给 {OWNER} 的任何权限。以下是对 {OWNER} 具有权限的默认策略。尽管不建议这样做,但基于安全要求,可以更改对该特殊实体的访问权限。删除默认的 {OWNER} 权限可能需要为每个对象所有者添加额外的特定策略,这会增加策略管理的操作负担。§ all – 数据库、表、列 ⇒ {OWNER} ⇒ 所有权限§ all – 数据库、表 ⇒ {OWNER} ⇒ 所有权限§ all – 数据库,udf ⇒{OWNER} ⇒ 所有权限§ all – 数据库 ⇒{OWNER} ⇒ 所有权限o 特殊对象{USER} – 这应该被视为 Ranger 中的一个特殊实体,意思是“当前用户”。使用此特殊对象可以显着简化策略结构,其中数据资源包含用户名属性值。例如,授予对 HDFS 路径/home/{USER} 上的 {USER} 的访问权限将授予用户“bob”对“/home/bob”的访问权限,以及用户“kiran”对“/home/kiran”的访问权限。同样,授予对数据库 db_{USER} 上的 {USER} 的访问权限,将为用户“bob”提供对“db_bob”的访问权限,以及用户“kiran”对“db_kiran”的访问权限。3. 此更改如何影响我的环境?· 迁移到Ranger o Cloudera提供了一个自动化工具authzmigrator,用于从 Sentry 迁移到 Rangero 该工具转换 Hive 对象的权限和 URL 权限(即 Sentry 中的URI)以及 CDH 集群中Sentry 中的 Kafka 权限o 目前该工具不包括通过 Sentry for Cloudera Search (Solr) 启用的授权权限o 该工具有一个明确定义的两步过程 - (1) 从 Source 中的Sentry 导出权限 (2) 将导出的文件摄取到 CDP 中的 Ranger 服务中 o 该工具适用于从 CDH 到 CDP 的直接升级和 side-car 迁移方法§ 在直接升级的情况下,整个过程是自动化的§ 在 side-car 迁移的情况下,为authzmigrator工具定义了一个手动程序· Ranger 中的对象权限o Sentry中的“插入”权限现在映射到 Ranger Hadoop SQL 策略中的“更新”权限o Sentry中的“URI”权限现在映射到 Ranger Hadoop SQL 中的“URL”策略o Ranger Hadoop SQL 中存在额外的细化权限§ Drop、Alter、Index、Lock等。· Hive-HDFS 访问同步与 Rangero 需要部署新服务 Ranger RMS o Ranger RMS 连接到 Ranger 使用的同一个数据库o Ranger RMS 当前仅适用于表级同步,而不适用于数据库级(即将推出)· 在 Hive 中使用 Ranger 创建外部表o 在 Hive 中使用自定义 LOCATION 子句创建外部表时,需要以下附加访问之一 (1) 或(2)§ (1) 用户应具有对 HDFS 位置的直接读写访问权限§ 这可以通过 Ranger 中的 HDFS Policy 或 HDFS POSIX 权限或 HDFS ACL 提供§ (2) Ranger Hadoop SQL 策略中的一个 URL 策略,为用户提供对表定义的 HDFS 位置的读写权限§ URL不应包含尾部斜杠字符 (“/”)§ 如果用户不拥有位置路径,请确保配置“ranger.plugin.hive.urlauth.filesystem.schemes”设置为“file:”而不是“hdfs:,file:”(这是默认设置) ) 在 Hive 和 Hive on Tez 服务中o 用户“hive”应该拥有表的 HDFS 位置的所有权限4. 总结Apache Ranger 支持授权作为共享数据体验 (SDX) 的一部分,这是 Cloudera 数据平台架构的基础部分,对数据管理和数据治理至关重要。在 CDP 中,Ranger 提供了 Apache Sentry在 CDH 堆栈中提供的所有功能。Ranger 是一个全面的解决方案,可以在整个 CDP 生态系统中启用、管理和监控数据安全。它还提供额外的安全功能,如数据过滤和屏蔽。Ranger 将授权和审计结合在一起,增强了 CDP 的数据安全策略,并提供了卓越的用户体验。除了这些授权和审核增强功能之外,Ranger Web UI 还可以用于安全密钥管理,使用 Ranger KMS 服务的密钥管理员可以单独登录。 要了解有关 Ranger 和相关功能的更多信息,以下是一些有用的资源: Apache Ranger 授权Apache Ranger 审计升级到 CDPCDP 知识中心原文作者:Kiran Anand原文链接:https://blog.cloudera.com/sentry-to-ranger-a-concise-guide/
这是CDH/HDP/Apache Hadoop迁移到CDP系列之一,如对迁移感兴趣,请关注该系列之前博客《使用 Replication Manager 迁移到CDP 私有云基础》、《将数据迁移到CDP 私有云基础的数据迁移用例》、《将Hive数据迁移到CDP》。了解如何将 Kudu数据从 CDH 迁移到 CDP。当您将 Kudu 数据从 CDH 迁移到 CDP 时,您必须使用 Kudu 备份工具来备份和恢复您的 Kudu 数据。1. 使用 kudu-backup-tools.jar Kudu 备份工具备份 Kudu 中的所有数据。2. 在旧集群中的新集群中手动应用任何自定义 Kudu 配置。3. 将备份的数据复制到目标 CDP 集群。4. 使用 Kudu 备份工具恢复备份 Kudu 数据。1. 在 Kudu 中备份数据您可以使用Kudu 备份工具kudu-backup-tools.jar 备份Kudu 中的所有数据。Kudu 备份工具运行 Spark 作业,该作业会根据您指定的内容构建备份数据文件并将其写入 HDFS或 AWS S3。请注意,如果您要备份到 S3,则必须提供 S3 凭据以进行 spark-submit,如指定凭据以从 Spark 访问 S3 中所述Kudu 备份工具在第一次运行时为您的数据创建完整备份。随后,该工具会创建增量备份。重要的增量备份和恢复功能仅适用于 CDH 6.3.0 及更高版本。因此,如果您有活动的摄取过程,例如 Spark 作业、Impala SQL 批处理或 Nifi 在 Kudu 中插入或更新数据,您可能需要在开始完整备份之前暂停这些过程,以避免在开始 Kudu 备份过程后丢失数据更改.运行以下命令以启动备份过程:spark-submit --class org.apache.kudu.backup.KuduBackup <path to kudu-backup2_2.11-1.12.0.jar> \ --kuduMasterAddresses <addresses of Kudu masters> \ --rootPath <path to store the backed up data> \ <table_name>在哪里· --kuduMasterAddresses用于将 Kudu 大师的地址指定为逗号分隔的列表。例如, master1-host,master-2-host,master-3-host哪些是 Kudu 大师的实际主机名。· --rootPath用于指定存储备份数据的路径。它接受任何 Spark 兼容的路径。o HDFS 示例: hdfs:///kudu-backupso AWS S3 示例: s3a://kudu-backup/如果您正在备份到 S3 并看到“线程“main”中的异常java.lang.IllegalArgumentException:路径必须是绝对的”错误,请确保 S3 路径以正斜杠( /)结尾。· <table_name> 可以是要备份的表或表列表。例子:spark-submit --class org.apache.kudu.backup.KuduBackup /opt/cloudera/parcels/CDH-7.2.1-1.cdh7.2.1.p0.4041380/lib/kudu/kudu-backup2_2.11.jar \ --kuduMasterAddresses cluster-1.cluster_name.root.hwx.site,cluster-2.cluster_name.root.hwx.site \ --rootPath hdfs:///kudu-backups \my_table2. 将 Kudu 数据恢复到新集群中在 Kudu中备份数据后,您可以将数据复制到目标 CDP 集群,然后使用 Kudu备份工具将其恢复。如果您在旧集群中应用了任何自定义 Kudu 配置,那么您必须手动在目标集群中应用这些配置。如果您更改了 的值tablet_history_max_age_sec并计划在目标集群上运行 Kudu 的增量备份,我们建议将其重置tablet_history_max_age_sec为默认值 1 周(请参阅https://issues.apache.org/jira/browse/KUDU-2677)。常用修改配置标志的示例:· rpc_max_message_size· tablet_transaction_memory· rpc_service_queue_length· raft_heartbeat_interval· heartbeat_interval_ms· memory_limit_hard_bytes· block_cache_capacity_mb手动应用自定义配置后,重新启动 Kudu 集群。1. 通过以下方式之一将备份的数据复制到目标 CDP 集群:o 使用 distcp:sudo -u hdfs hadoop distcp hdfs:///kudu/kudu-backups/* hdfs://cluster-2.cluster_name.root.hwx.site/kudu/kudu-backups/o 使用复制管理器。有关更多信息,请参阅HDFS 复制。2. 运行以下命令在目标集群上恢复备份:spark-submit --class org.apache.kudu.backup.KuduRestore <path to kudu-backup2_2.11-1.12.0.jar> \ --kuduMasterAddresses <addresses of Kudu masters> \ --rootPath <path to the stored backed up data> \ <table_name>在哪里o --kuduMasterAddresses用于将 Kudu 大师的地址指定为逗号分隔的列表。例如,master1-host,master-2-host,master-3-host 哪些是 Kudu 大师的实际主机名。o --rootPath 用于指定存储备份数据的路径。它接受任何与 Spark 兼容的路径。§ HDFS 示例: hdfs:///kudu-backups§ AWS S3 示例: s3a://kudu-backup/如果您已备份到 S3 并看到“线程“main”中的异常java.lang.IllegalArgumentException:路径必须是绝对的”错误,请确保 S3 路径以正斜杠( /)结尾。o <table_name> 可以是要备份的表或表列表。o 可选:--tableSuffix,如果设置,添加到恢复的表名就足够了。它只能在 createTables属性为 时使用 true。o 可选:--timestampMs是以毫秒为单位的 UNIX 时间戳,它定义了选择还原候选者时要使用的最晚时间。其默认值为 System.currentTimeMillis()。sudo -u hdfs spark-submit --class org.apache.kudu.backup.KuduRestore /opt/cloudera/parcels/CDH-7.2.0-1.cdh7.2.0.p0.3758356/lib/kudu/kudu-backup2_2.11.jar \ --kuduMasterAddresses cluster-1.cluster_name.root.hwx.site \ --rootPath hdfs:///kudu/kudu-backups \my_table3. 在 Cloudera Manager 中重启 Kudu 服务。原文链接:https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/data-migration/topics/cdp-data-migration-kudu.html
这是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/Impala和Kafka 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.xml的和core-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.passwordb. 删除 文件中的 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 KAFKAb. 将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.json3. 登录到 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.j22. 从禁止用户列表中删除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 KDC、admin_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: listprincsc. 在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.j2b. 从禁止用户 列表中删除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/destination3. 安全集群之间的 Distcp 的 Kerberos 设置指南在安全的 CDP 集群上设置Kerberos 以distcp在它们之间成功执行时,需要考虑特定的准则。此处提到的准则仅适用于以下示例部署:· 有两个集群,每一个不同的Kerberos域(SOURCE以及DESTINATION在该实施例中)· 您有数据需要复制SOURCE到 DESTINATION· Kerberos 领域信任存在于SOURCE和 DESTINATION(在任一方向)之间,或在 SOURCE和DESTINATION与共同的第三领域(例如Active Directory 域)之间。如果您的环境与上述环境匹配,请使用下表在集群上配置Kerberos 委派令牌,以便您可以成功 distcp跨两个安全集群。基于之间的信任的方向SOURCE和DESTINATION集群,您可以使用mapreduce.job.hdfs-servers.token-renewal.exclude两种集群属性指示ResourceManagers跳过或NameNode的主机上执行委托令牌更新。笔记mapreduce.job.hdfs-servers.token-renewal.exclude 如果两个集群都使用 HDFS 透明加密功能,则必须使用该参数。环境类型Kerberos 委托令牌设置SOURCE信任 DESTINATIONDistcp 作业在DESTINATION集群上运行您不需要设置该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性。Distcp 作业在SOURCE集群上运行将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的DESTINATION集群NameNode 主机名列表。DESTINATION信任 SOURCEDistcp 作业在DESTINATION集群上运行将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的SOURCE集群NameNode 主机名列表。Distcp 作业在SOURCE集群上运行您不需要设置该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性。这两个SOURCE和DESTINATION相互信任将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的DESTINATION集群NameNode 主机名列表。SOURCE和DESTINATION互不信任如果公共领域可用(例如 Active Directory),请将mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置 为未运行 distcp 作业的集群的 NameNode 的主机名的逗号分隔列表。例如,如果您在DESTINATION集群上运行作业:1. kinit任何对DESTINATION使用可以同时在被使用的AD帐户YARN网关主机 SOURCE和DESTINATION。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
这是CDH/HDP/Apache Hadoop迁移到CDP系列的第一篇博客,如对迁移感兴趣,请关注该系列博客。Replication Manager 可用于将 Hive、Impala 和 HDFS 工作负载迁移到 CDP私有云基础。功能Replication Manager 是一种用于在企业数据云内的环境之间复制和迁移数据的服务。它是一种简单、易于使用且功能丰富的数据移动功能,可将现有数据和元数据移动到云中,以推动新的工作负载。支持的场景· CDH 到CDP 私有云基础1. Replication Manager概述Cloudera Manager 提供了一个集成的、易于使用的管理解决方案,用于在 Hadoop 平台上启用数据保护。Replication Manager 使您能够跨数据中心复制数据以用于灾难恢复场景。复制可以包括存储在 HDFS 中的数据、存储在 Hive 表中的数据、Hive 元存储数据以及与在 Hive 元存储中注册的 Impala 表关联的 Impala 元数据(目录服务器元数据)。当关键数据存储在 HDFS 上时,Cloudera Manager 有助于确保数据始终可用,即使在数据中心完全关闭的情况下也是如此。对于Hbase数据,还可以使用 HBase shell 来进行复制。(Cloudera Manager目前不管理 HBase的复制。)Replication Manager 需要 Cloudera Enterprise 许可证。您还可以使用 Cloudera Manager 来安排、保存和恢复 HDFS 目录和 HBase 表的快照。在Cloudera Manager 管理控制台中Cloudera Manager提供如下关键功能:· 选择- 选择对您的业务运营至关重要的数据集。· 调度- 为数据复制和快照创建适当的调度。根据您的业务需求触发复制和快照。· 监控- 通过中央控制台跟踪快照和复制作业的进度,并轻松识别无法传输的问题或文件。· 警报- 在快照或复制作业失败或中止时发出警报,以便快速诊断问题。Replication Manager 在HDFS和 Hive 中始终如一地运行:· 您可以在 HDFS 的文件或目录以及 Hive 的外部表上设置它——无需手动将 Hive 数据集转换为 HDFS 数据集,反之亦然。Hive Metastore 信息也被复制。· 依赖于存储在 Hive 中的外部表定义的应用程序在表定义更新时对副本和源进行操作。· 在HDFS用户应该有权访问所有数据集Hive,包括所有操作。否则,Hive 导入会在复制过程中失败。要提供访问权限,请执行以下步骤:1. 登录Ranger管理界面2. 在hdfs中的Hadoop_SQL部分下提供对hdfs用户的 “ all-database, table, column ”权限。在实际复制整个数据集之前,您还可以执行“试运行(Dry run)”以验证配置并了解整体操作的成本。2. CDP 私有云基础上的 Replication Manager 支持矩阵支持列表包含 Replication Manager 中跨功能的兼容性信息。Replication Manager 支持 HDFS 和 Hive 数据复制。该矩阵还列出了 CDH、CDP Private Cloud Base 和 Cloudera Manager 版本支持的版本。功能支持的最低 Cloudera Manager 版本最低支持的 CDH 版本支持的服务复制Cloudera Manager 5.14+CDH 5.13+HDFS、Hive、Impala与 Amazon S3 之间的复制*Cloudera Manager 5.14+CDH 5.13+HDFS、Hive、Impala快照Cloudera Manager 5.15+CDH 5.15+HDFS、Hive、Impala与 Microsoft ADLS Gen1 之间的复制Cloudera Manager 5.15、5.16、6.1+CDH 5.13+HDFS、Hive、Impala复制到 Microsoft ADLS Gen2 (ABFS)Cloudera Manager 6.1+CDH 5.13+HDFS、Hive、Impala*当 S3 配置为使用 SSE-KMS 时,Replication Manager 不支持 S3 作为源或目标。Note从CDP Private Cloud Base 7.0.3 到 7.1.6(源集群版本)都支持 Replication Manager 服务。Cloudera Manager 版本将从 7.0.3 开始。从 Cloudera Manager 6.1.0 开始,Replication Manager 在复制期间忽略 Kudu 支持的 Hive 表。此变更不会影响功能,因为 Replication Manager 不支持 Kudu 支持的表。进行此更改是为了防止由于 Hive Mestastore、Impala 和 Kudu 的交互方式导致数据丢失。2.1. 支持的复制场景2.1.1. 版本要将数据复制到 Cloudera Manager 7.x 管理的集群,或者从Cloudera Manager 7.x 管理的集群中复制数据,源或目标集群必须由 Cloudera Manager 5.14+ 或更高的版本来管理。请注意,某些功能在 Cloudera Manager 5.14.0 及更高版本或Cloudera Manager 6.0.0 及更高版本中可能不可用。2.1.2. Kerberos在集群上使用 Kerberos 身份验证时,Replication Manager 支持以下复制方案:· 安全来源到安全目的地。· 不安全的源到不安全的目的地。· 不安全来源到安全目的地。请记住以下要求:o 在目标集群具有多个源集群的复制场景中,所有源集群必须是安全的或不安全的。Replication Manager 不支持从安全和不安全源集群的混合复制。o 目标集群必须运行 Cloudera Manager 7.x 或更高版本。o 源集群必须运行兼容的 Cloudera Manager 版本。o 这种复制方案需要额外的配置。有关更多信息,请参阅从不安全集群复制到安全集群。2.1.3. 云存储Replication Manager 支持与 Amazon S3、Microsoft Azure ADLS Gen1 和 Microsoft Azure ADLS Gen2 (ABFS) 之间的复制。2.1.4. 传输层安全 (TLS)您可以将 TLS 与 Replication Manager 结合使用。此外,Replication Manager 支持为非 Hadoop 服务(Hive/Impala)启用 TLS 和禁用 TLS Hadoop 服务(例如 HDFS、YARN 和 MapReduce)的复制场景。2.1.5. Sentry到Ranger复制使用 HDFS 和 Hive 复制策略时要执行 Sentry 到 Ranger 复制,您必须在源集群上安装 Cloudera Manager 版本 6.3.1 及更高版本,并在目标集群上安装 Cloudera Manager 版本 7.1.1 及更高版本。当源集群启用了 Sentry 并且您要运行HDFS 复制策略时,请使用hdfs用户运行复制策略。复制策略将复制的文件和表的权限复制到目标集群。要使用任何其他用户帐户,请确保将用户帐户配置为在复制期间绕过 Sentry ACL。创建 Hive 复制策略时,请选择适当的选项以确保将 Sentry 权限迁移到 Ranger 权限。Replication Manager使用 authzmigrator 工具在 Hive 复制期间将数据从 Sentry 移动到 Ranger。2.2. 不支持的复制方案2.2.1. 版本不支持Cloudera Manager 6 受管集群和 Cloudera Manager 5.14.0 之前版本的集群之间进行复制。Note不支持在 HDP 和 Cloudera Manager 7.x 之间进行复制。2.2.2. Hive 复制Replication Manager 不支持托管表到托管表的复制。它将托管表从源集群转换为CDP 私有云基础集群的外部表。Replication Manager 将复制的表存储为外部表。2.2.3. Kerberos在集群上使用 Kerberos 身份验证时,不支持从安全源到不安全目标的复制。2.2.4. Ranger不支持 Ranger 到Ranger 复制。2.2.5. Apache Knox如果 Cloudera Manager 配置了Knox,Replication Manager 将不起作用。3. Replication Manager 的端口要求确保以下端口在源主机上是开放的并可访问的,以允许Cloudera Manager 服务器与 HDFS、Hive、MapReduce 和 YARN 主机之间的源和目标进行通信。3.1. Replication Manager 的端口详细信息ServiceDefault PortCloudera Manager Admin Console HTTP7180Cloudera Manager Admin Console HTTPS (with TLS enabled)7183Cloudera Manager Agent9000HDFS NameNode8020Key Management Server (KMS)16000HDFS DataNode9866NameNode WebHDFS9870YARN Resource Manager8032DataNode Secure1004NameNode Secure WebHDFS9871Hive Metastore9083Impala Catalog Server260004. 数据复制在使用 Replication Manager 之前,您必须了解有关数据复制的一些要求。4.1. Cloudera 复制许可证要求您必须拥有对应的许可证才能在 Replication Manager 中执行您的任务。4.2. 复制包含数千个文件和子目录的目录在具有数千个文件和子目录的目录中复制数据之前,请在hadoop-env.sh 文件中增加heap size。1. 在目标Cloudera Manager 实例上,转到HDFS 服务页面。2. 单击配置选项卡。3. 展开 Scope,然后选择HDFS 服务名称(Service-Wide)选项。4. 展开CategoryAdvanced并选择 Advanced。5. 找到HDFS Replication Environment Advanced Configuration Snippet (Safety Valve) for hadoop-env.sh属性6. 通过添加键值对来增加堆大小,例如: HADOOP_CLIENT_OPTS=-Xmx1g。在此示例中,1g将堆大小设置为 1 GB。此值应根据要复制的文件和目录的数量进行调整。7. 输入更改原因,然后单击保存更改以提交更改。4.3. Replication Manager日志保留默认情况下,Cloudera Manager 会将 Replication Manager 日志保留 90 天。您可以更改 Cloudera Manager 保留日志的天数或完全禁用日志保留。1. 转到Cloudera Manager > HDFS >配置部分。2. 在Cloudera Manager 管理控制台中,搜索以下属性:Backup and Disaster Log Retention.3. 输入要保留日志的天数。要禁用日志保留,请输入 -1。重要自动日志过期也会清除自定义设置的复制日志和元数据文件。这些路径由日志路径和目录设置,用于根据调度字段显示在 UI 上的元数据参数。用户有责任设置有效路径(例如,指定当前用户可写的合法 HDFS 路径)并为每个复制策略维护此信息。4.4. 从不安全集群复制到安全集群您可以使用 Replication Manager 将数据从不安全的集群(不使用 Kerberos 身份验证)复制到安全集群(使用 Kerberos 的集群)。请注意,反过来是不正确的。Replication Manager 不支持从安全集群复制到不安全集群。要执行复制,目标集群必须由 Cloudera Manager 6.1.0 或更高的版本进行管理。源集群必须运行 Cloudera Manager 5.14.0 或更高版本才能复制到 Cloudera Manager 6。Note在目标集群有多个源集群的复制场景中,所有源集群必须是安全的或不安全的。Replication Manager 不支持从安全和不安全源集群的混合复制。要启用从不安全集群到安全集群的复制,您需要在源集群和目标集群的所有主机上都存在一个用户。创建复制调度时,在Run As Username字段中指定此用户。1. 在源或目标集群中的主机上,使用以下命令添加用户:sudo -u hdfs hdfs dfs -mkdir -p /user/<username>例如,以下命令创建一个名为 milton 的用户:sudo -u hdfs hdfs dfs -mkdir -p /user/milton2. 使用以下命令设置用户目录的权限:sudo -u hdfs hdfs dfs -chown <username> /user/username例如,以下命令使 milton 成为 milton 目录的所有者:sudo -u hdfs hdfs dfs -chown milton /user/milton3. 使用以下命令为您在步骤1 中创建的用户创建supergroup组:groupadd supergroup4. 将您在步骤1 中创建的用户添加到您创建的组中:usermod -G supergroup <username>例如,将 milton 添加到名为 supergroup 的组中:usermod -G supergroup milton5. 对源和目标集群中的所有主机重复此过程,以便用户和组存在于所有主机上。完成此过程后,请在创建复制策略时在Run As Username字段中指定您创建的用户。5. 指定复制源您必须分配源集群来复制数据。最低要求角色: 集群管理员 (也由完全管理员提供)。您登录的 Cloudera Manager Server 是使用该 Cloudera Manager 实例设置的复制目标。在此目标 Cloudera Manager 实例的管理控制台中,您可以指定peer Cloudera Manager Server 作为 HDFS 和 Apache Hive 数据来源进行复制。5.1. 配置peer关系您必须将 Cloudera Manager 与peer连接,然后测试连接。如果您的集群使用 SAML 身份验证,请参阅在配置peer之前使用 SAML 身份验证配置peer。1. 在Cloudera Manager 中,选择左侧导航栏中的复制>peer。如果没有现有的peer,除了一条短消息之外,您只会看到一个添加peer点按钮。如果peer已存在,则它们会显示在“peer”列表中。2. 单击添加peer。3. 在“添加peer”对话框中,提供名称、要复制的数据的Cloudera Manager 服务器源的peer URL(包括端口)以及该服务器的登录凭据。重要分配给源服务器上的登录名的角色必须是用户管理员或完全管理员。Cloudera 建议使用 TLS/SSL。如果 URL 方案是 http 而不是 https,则会显示警告。将两个peer配置为使用 TLS/SSL 后,将远程源 Cloudera Manager TLS/SSL 证书添加到本地 Cloudera Manager 信任库,反之亦然。4. 单击对话框中的添加按钮以创建peer关系。peer被添加到peer列表中。Cloudera Manager 会自动测试 Cloudera Manager Server 和peer之间的连接。您也可以单击测试连接来测试连接。测试连接还测试集群的 Kerberos 配置。5.2. 修改peer您可以修改或删除peer。1. 要编辑peer,请选择peer点并单击操作>编辑。2. 进行更改。3. 单击更新peer以保存更改。4. 要删除peer,请选择peer并单击操作>删除。5.3. 使用 SAML 身份验证配置peer如果您的集群使用SAML 身份验证,请在创建peer点之前执行以下操作。1. 创建具有用户管理员或完全管理员角色的Cloudera Manager 用户帐户。您还可以使用具有这些角色之一的现有用户。由于您只会使用此用户来创建peer关系,因此您可以在添加peer后删除该用户帐户。2. 创建或修改peer。3. 删除刚刚创建的Cloudera Manager 用户帐户。6. HDFS 复制策略本节讨论与 HDFS 数据相关的复制。最低要求角色: 复制管理员(也由完全管理员提供)HDFS 复制使您能够将 HDFS 数据从一个 HDFS 服务复制到另一个服务,根据指定的复制策略将源服务上的数据集与目标服务上的数据集 同步。其中:目标服务必须由Cloudera Manager Server 管理,通过CM设置复制,而源服务可以由同一服务器或peer Cloudera Manager Server 管理。您还可以通过指定不同的源目录和目标目录来复制集群内的 HDFS 数据。远程的Replication Manager在复制文件时自动将 HDFS 元数据复制到目标集群。HDFS 元数据只需要在本地备份。6.1. 源数据当复制作业运行时,请确保源目录未被修改。复制期间添加的文件不会被复制。如果在复制期间删除文件,复制将失败。此外,确保目录中的所有文件都已关闭。如果源文件打开,复制将失败。如果您不能确保关闭所有源文件,您可以将复制配置为在出现错误的情况下继续进行。取消选中HDFS 复制的Abort on Error选项。复制完成后,您可以查看复制日志以识别打开的文件。确保在下一次复制之前关闭这些文件。6.2. 网络延迟和复制集群之间的高延迟会导致复制作业运行得更慢,但不会导致它们失败。为获得最佳性能,源集群 NameNode 和目标集群 NameNode 之间的延迟应小于 80 毫秒。(您可以使用Linux ping命令测试延迟 )。在延迟高达 360 毫秒时,Cloudera 已成功测试了的复制。随着延迟的增加,复制性能会下降。6.3. 性能和可扩展性限制HDFS 复制有一些限制。· 单个复制作业的最大文件数:1 亿。· 运行频率超过 8 小时一次的复制策略支持的最大文件数:1000 万。· 复制作业的吞吐量取决于源集群和目标集群的绝对读写吞吐量。· 需要定期重新平衡您的 HDFS 集群,以实现高效的复制操作。NoteCloudera Manager 提供可用于诊断 HDFS 复制性能的可下载数据。6.4. 从启用 Sentry 的集群进行 HDFS 复制在启用 Sentry 的源集群上运行 HDFS 复制策略时,复制策略可以复制文件和表及其权限。需要 Cloudera Manager 6.3.1 及更高版本才能在启用 Sentry 的源集群上运行 HDFS 复制策略。当您要在启用 Sentry 的源集群上运行 HDFS 复制策略时,您必须使用hdfs用户。如果要使用不同的用户帐户,则必须配置用户帐户以在复制过程中绕过 Sentry ACL。当 Sentry 不可用或 Sentry 不管理资源(如源集群中的文件或目录)的授权时,HDFS 使用其内部 ACL 来管理资源授权。当源集群启用了 Sentry 并且您使用hdfs用户名运行 HDFS 复制策略时,HDFS 会将 Sentry 中为复制的文件和表配置的 ACL 复制到目标集群。当启用 Sentry 并且您使用不同的用户名运行 HDFS 复制策略时,Sentry ACL 和 HDFS 内部 ACL 都会被复制,这会导致目标集群中的 HDFS 元数据不正确。如果 Sentry ACL 与 HDFS ACL 不兼容,则复制作业将失败。为避免非hdfs 用户的HDFS 和 Sentry ACL 之间的兼容性问题,您必须完成以下步骤:1. 创建一个仅用于Replication Manager作业的用户帐户,因为此用户将绕过 Sentry ACL。例如,创建一个名为bdr-only-user 的用户。2. 要在复制期间绕过Sentry ACL,请在源集群上执行以下步骤:a. 在Cloudera Manager 管理控制台中,选择Clusters > <HDFS service>。b. 选择配置并搜索以下属性:NameNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml.c. 添加以下属性: Name - dfs.namenode.inode.attributes.provider.bypass.users Value - 输入[***USERNAME, USERNAME@REALMNAME***],其中[***USERNAME***] 是用户您在步骤 1 中创建的 [***REALMNAME***] 是 Kerberos 领域名称。例如,如果在Realm上的用户名是bdr-only-user,则输入bdr-only-user, bdr-only-user@ElephantRealm。d. 重新启动NameNode。3. 在目标集群上重复步骤2。创建HDFS 复制策略时,请在“Run As Username”和“Run on Peer as Username”(如果可用)字段中指定您在步骤 1 中创建的用户。Note在运行所用用户名字段被用来发动MapReduce工作拷贝数据。 Run on Peer as Username字段用于在源上运行副本列表,如果与Run as Username不同。重要确保将Run on Peer的值设置为Username与Run as Username相同,否则 Replication Manager 从源读取 ACL 作为hdfs,它将 Sentry 提供的 ACL 拉到目标集群并将它们应用到 HDFS 中的文件。它可能导致在目标集群中额外使用 NameNode 堆。6.5. 基于快照差异的复制指南默认情况下,Replication Manager 使用快照差异(“diff”)通过比较 HDFS 快照并仅复制源目录中更改的文件来提高性能。虽然 Hive 元数据需要完整复制,但存储在 Hive 表中的数据可以利用基于快照差异的复制。要使用此功能,请遵循以下准则:· 源和目标集群必须由 Cloudera Manager 5.15.0 或更高版本管理。· 源和目标集群运行 CDH 5.15.0 或更高版本、5.14.2 或更高版本或 5.13.3 或更高版本。· 验证 HDFS 快照是不可变的。在 Cloudera Manager 管理控制台中,转到Clusters > HDFS service > Configuration部分并搜索Enable Immutable Snapshots。· 不要对全局路径使用快照差异。它没有针对全局路径进行优化。· 将快照根目录在层次结构中设置得尽可能低。· 要使用快照差异功能,配置为运行作业的用户需要是超级用户或快照根目录的所有者,因为他们 run-as-user必须具有列出快照的权限。· 决定您是希望 Replication Manager 在快照差异失败时中止还是继续复制。如果您选择将 Replication Manager 配置为在遇到错误时继续复制,Replication Manager 将执行完整的复制。请注意,由于执行完整复制,因此继续复制可能会导致更长的持续时间。· 当以下一项或多项更改时,Replication Manager 执行完整复制:删除策略、保留策略、目标路径或排除路径。· 从路径两者中复制策略的源和目的地簇必须是snapshottable根目录下或应snapshottable为策略来使用快照的diff运行。· 如果源数据包含加密子目录,请在复制策略中创建排除正则表达式以在复制期间排除该子目录。创建另一个复制策略来复制加密的子目录。这是因为,如果源数据中存在加密的子目录,则基于快照差异的复制可能会失败。· 如果创建 Hive 复制策略来复制数据库,请确保该数据库中表的所有 HDFS 路径都是快照表或位于快照表根目录下。例如,如果正在复制的数据库具有外部表,则所有外部表 HDFS 数据位置也应该是可快照的。否则可能会导致Replication Manager无法生成差异报告。如果没有差异报告,Replication Manager 不使用快照差异。· 每次复制后,Replication Manager 都会在源集群上保留一个快照。使用源集群上的快照副本,Replication Manager 为下一个复制周期执行增量备份。只有在以下情况下,Replication Manager 才会在源集群上保留快照:o Cloudera Manager 中的源和目标集群为 5.15 及更高版本o 源和目标 CDH 分别为 5.13.3+、5.14.2+ 和 5.15+6.6. 配置 HDFS 数据的复制在调度 HDFS 数据复制之前,您必须设置集群。1. 验证您的集群是否符合支持的复制方案之一。2. 如果您对源集群和目标集群使用不同的Kerberos 主体,请将目标主体添加为源集群上的代理用户。例如,如果您使用hdfssrc源集群上的hdfsdest主体和目标集群上的主体,请将以下属性添加到源 集群上core-site.xml属性的 HDFS 服务集群范围高级配置片段(安全阀):<property> <name>hadoop.proxyuser.hdfsdest.groups</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hdfsdest.hosts</name> <value>*</value> </property>如果源集群由与目标集群不同的 Cloudera Manager 服务器管理,则部署客户端配置并重新启动源集群上的所有服务。3. 从Cloudera Manager >复制>复制策略页面,单击创建复制策略。4. 选择HDFS复制策略。出现 创建 HDFS 复制策略 对话框。5. 选择 常规 选项卡以配置以下内容:a. 单击 名称 字段并为复制策略添加唯一名称。b. 单击 源 字段并选择源 HDFS 服务。您可以选择由peer Cloudera Manager Server 管理的HDFS 服务、本地HDFS 服务(由您登录的管理控制台的Cloudera Manager Server 管理)。c. 输入 要复制的目录(或文件)的 源路径。d. 单击目标字段并从您登录的管理控制台的Cloudera Manager Server 管理的HDFS 服务中选择目标HDFS 服务。e. 输入应保存源文件的目标路径。f.选择一个时间表:§ 立即-立即运行调度。§ 一次- 在未来运行一次调度。设置日期和时间。§ 重复- 将来定期运行调度。设置日期、时间和运行间隔。g. 在用户名运行字段中输入运行复制作业的用户。默认情况下,这是hdfs. 如果要以其他用户身份运行作业,请在此处输入用户名。如果您使用的是Kerberos,您必须在此处提供一个用户名,并且必须是一个ID大于1000的用户名。(您也可以通过YARN或MapReduce服务中的min.user.id属性来配置最小用户ID号.) 验证运行该作业的用户是否有一个主目录/user/username,在HDFS 中由username:supergroup 拥有。此用户必须具有从源目录读取和写入目标目录的权限。请注意以下事项:§ 用户不得出现在 YARN 配置中使用禁止系统用户属性指定的禁止用户列表中(转到 YARN 服务,选择配置选项卡并搜索属性)。出于安全考虑,默认情况下禁止 hdfs 用户运行 YARN 容器。§ 通过将用户添加到由“允许的系统用户”属性指定的用户“白名单”,可以覆盖对大于 1000 的用户 ID 的要求。(转到 YARN 服务,选择配置选项卡并搜索属性。)6. 选择“资源”选项卡以配置以下内容:a. 调度程序池- (可选)在字段中输入资源池的名称。您输入的值由您在 Cloudera Manager 为复制执行 MapReduce 作业时指定的MapReduce 服务使用。作业使用以下属性之一指定值:§ § MapReduce – 公平调度程序: mapred.fairscheduler.pool§ MapReduce – 容量调度程序: 队列名称§ Yarn – mapreduce.job.queuenameb. 最大Map槽数- 每个映射器的Map槽数限制。默认值为 20。c. 最大带宽- 每个Map的带宽限制。默认值为 100 MB。d. 复制策略- 文件复制任务应该静态还是动态地分布在映射器之间。(默认为Dynamic。)静态复制预先 在映射器之间分配文件复制任务,以实现基于文件大小的统一分配。动态复制将文件复制任务以小集合分配给映射器,当每个映射器完成其任务时,它会动态获取并处理下一组未分配的任务。7. 选择高级选项选项卡,配置以下内容:a. 添加排除单击链接以从复制中排除一个或多个路径。将显示基于正则表达式的路径排除字段,您可以在其中输入基于正则表达式的路径。添加排除项时,请包括正则表达式的快照相对路径。例如,要排除 /user/bdr目录,请使用以下正则表达式,其中包括bdr目录的快照:.*/user/\.snapshot/.+/bdr.*要从全局源路径中的复制中排除顶级目录,您可以指定正则表达式的相对路径而不包括 .snapshot在路径中。例如,bdr要从复制中排除 目录,请使用以下正则表达式:.*/user+/bdr.*Note当您设置路径排除过滤器(并将删除策略设置为删除)时,目标集群上的路径应该保持不变。但是,当前的行为是,即使目录/文件与排除过滤器匹配,也会在目标集群上删除它们。您可以添加多个要排除的正则表达式。b. § MapReduce服务- 要使用的 MapReduce 或 YARN 服务。§ 日志路径-日志的备用路径。§ 描述- 复制策略的描述。§ 错误处理- 您可以选择以下内容:§ 跳过校验和检查- 是否跳过对复制文件的校验和检查。如果选中,则不会验证校验和。默认情况下检查校验和。重要的在以下情况下,您必须跳过校验和检查以防止由于校验和不匹配而导致复制失败:§ 从源集群上的加密区域复制到目标集群上的加密区域。§ 从源集群上的加密区域复制到目标集群上的未加密区域。§ 从源集群上的未加密区域复制到目标集群上的加密区域。校验和有两个用途:§ 跳过已复制文件的复制。如果选择Skip Checksum Checks,如果源集群和目标集群之间的文件长度和修改时间相同,则复制作业将跳过复制文件。否则,作业会将文件从源复制到目标。§ 冗余验证数据的完整性。但是,不需要校验和来保证集群之间的准确传输。HDFS 数据传输在传输过程中受校验和保护,存储硬件也使用校验和来确保数据被准确存储。这两种机制协同工作以验证复制数据的完整性。§ 跳过列表校验和检查- 在比较两个文件以确定它们是否相同时是否跳过校验和检查。如果跳过,则使用文件大小和上次修改时间来确定文件是否相同。跳过检查可提高映射器阶段的性能。请注意,如果您选择跳过校验和检查选项,也会跳过此检查。§ Abort on Error - 是否在出现错误时中止作业。如果选中,则复制到该点的文件将保留在目标上,但不会复制其他文件。默认情况下,错误中止是关闭的。§ 在快照差异失败时中止- 如果快照差异在复制期间失败,Replication Manager 使用完整副本来复制数据。如果选择此选项,Replication Manager 会在遇到错误时中止复制。c. 保留- 是保留源文件系统上存在的块大小、复制计数、权限(包括 ACL)和扩展属性 (XAttrs),还是使用目标文件系统上配置的设置。默认情况下会保留源系统设置。当Permission被选中并且源和目标集群都支持 ACL 时,复制会保留 ACL。否则,不会复制 ACL。当扩展属性检查,并且源和目标集群都支持扩展属性,复制保留它们。(此选项仅在源集群和目标集群都支持扩展属性时显示。)Note要保留对 HDFS 的权限,您必须以超级用户身份在目标集群上运行 。使用“以用户名运行”选项来确保是这种情况。d. 删除策略- 在源上删除的文件是否也应从目标目录中删除。此策略还确定目标位置中与源无关的文件的处理方式。选项包括:§ § 保留已删除的文件- 保留目标文件,即使它们在源中不再存在。(这是默认设置。)。§ 删除到垃圾箱- 如果启用了 HDFS 垃圾箱,文件将移动到垃圾箱文件夹。§ 永久删除- 使用最少的空间;谨慎使用。此选项不会删除顶级目录中的文件和目录。这符合 rsync/Hadoop DistCp 行为。e. 警报- 是否为复制工作流中的各种状态变化生成警报。您可以在失败、启动、成功或复制工作流中止时发出警报。8. 单击保存策略。复制任务现在在复制策略 表中显示为一行。(任务最多可能需要 15 秒才能出现。)如果您在Schedule字段中选择 Immediate,则在您单击Save Policy时复制作业开始运行。要指定其他复制任务,请选择Create > HDFS Replication。Note如果您的复制作业需要很长时间才能完成,并且在复制完成之前文件已更改,则复制可能会失败。考虑将目录设为可快照,以便复制作业在复制文件之前创建目录的快照,然后在执行复制时从这些可快照目录中复制文件。6.7. 限制复制主机如果您的集群在资源有限的主机上安装了客户端,HDFS 复制可能会使用这些主机来运行复制命令,这可能会导致性能下降。您可以通过指定 DataNode 主机的“白名单”来限制 HDFS 复制仅在选定的 DataNode 上运行。1. 单击集群> HDFS 服务>配置。2. 键入HDFS Replication搜索框。3. 找到HDFS 复制环境高级配置片段(安全阀)属性。4. 添加HOST_WHITELIST 属性。输入以逗号分隔的DataNode 主机名列表以用于HDFS 复制。例如:HOST_WHITELIST=host-1.mycompany.com,host-2.mycompany.com5. 单击保存更改以提交更改。6.8. 查看复制策略“复制策略”页面显示有关每个调度复制作业的一行信息。每行还显示有关上次运行复制作业的最新消息。图 1.复制策略表一次只能发生一个与复制策略对应的作业;如果与同一复制策略关联的另一个作业在前一个作业完成之前启动,则取消第二个作业。您可以通过选择左侧的过滤器来限制显示的复制作业。如果您没有看到预期的策略,请调整或清除过滤器。使用搜索框搜索路径、数据库或表名称的策略列表。的复制策略列在下表中进行了描述。表 1.复制策略表字段描述ID内部生成的 ID 号,用于标识策略。提供一种方便的方式来识别策略。单击ID列标签可按ID对复制策略表进行排序。姓名您在创建策略时指定的唯一名称。类型复制策略的类型,HDFS 或 Hive。来源复制的源集群。目的地复制的目标集群。吞吐量写入的所有文件的每个映射器/文件的平均吞吐量。请注意,吞吐量不包括以下信息:所有映射器的总吞吐量以及文件写入后对文件执行校验和所花费的时间。进度复制的进度。完成复制作业完成的时间。单击已完成 列标签以按时间对复制策略表进行排序。下一次运行根据为策略指定的调度参数,调度下一次复制的日期和时间。将鼠标悬停在日期上可查看有关调度复制的其他详细信息。单击上次运行列标签以按上次运行日期对复制策略表进行排序。行动“操作” 按钮提供以下项目:·显示历史记录- 打开复制历史记录页面以进行复制。·编辑配置- 打开编辑复制策略页面。·Dry Run - 模拟复制任务的运行,但实际上并不复制任何文件或表。试运行后,您可以选择 Show History,这将打开Replication History页面,您可以在其中查看任何错误消息以及将在实际复制中复制的文件或表的数量和大小。·立即运行 -立即运行复制任务。·单击收集诊断数据以打开发送诊断数据屏幕,该屏幕允许您收集策略的最后 10 次运行的特定于复制的诊断数据:1. 选择将诊断数据发送到 Cloudera以自动将包发送到 Cloudera 支持。您还可以在发送捆绑包时输入票号和评论。2. 单击收集并发送诊断数据以生成包并打开复制诊断命令屏幕。3. 命令完成后,单击下载结果数据以下载包含捆绑包的 zip 文件。·禁用 | 启用- 禁用或启用复制策略。没有为禁用的复制策略安排进一步的复制。·删除- 删除策略。删除复制策略不会删除复制的文件或表。· 当作业正在进行时,“上次运行”列会显示一个微调器和进度条,并且在作业所在行下方的消息中指示复制任务的每个阶段。单击命令详细信息链接以查看有关命令执行的详细信息。· 如果作业成功,则会指示复制的文件数。如果自上一个作业以来源文件没有更改,则不会复制该文件。因此,在初始作业之后,实际上可能只复制文件的一个子集,这会在成功消息中指示。· 如果作业失败,则显示图标。· 要查看有关已完成作业的更多信息,请选择操作>显示历史记录。6.9. 查看复制历史您可以在“复制历史”页面上查看有关复制作业的历史详细信息。6.9.1. 要查看复制作业的历史记录:1. 从Cloudera Manager 中,选择复制>复制策略。将显示可用复制策略的列表。2. 找到作业所在的行,选择相同的行,然后单击操作>显示历史记录。“复制历史记录”页面出现,其中包含作业信息。图 1.复制历史屏幕(HDFS)6.9.2. 复制历史表“复制历史记录”页面显示以前运行的复制作业的表格,其中包含以下列:字段描述开始时间显示有关作业的详细信息。您可以展开该部分以查看以下作业详细信息:\·开始时间 - 显示复制作业开始的时间。·持续时间 - 显示完成作业的持续时间。·命令详细信息 - 单击查看后在新选项卡中显示命令详细信息 。该命令详细信息 页显示有关命令运行过程中每一步的细节和信息。在此页面上,单击“上下文”可以查看与命令相关的服务状态页面,然后单击“下载”将摘要下载为 JSON 文件。要查看命令详细信息,请展开 Step部分,然后选择Show All Steps、Show Only Failed Steps或 Show Only Running Steps。在本节中,您可以执行以下任务:o 查看实际的命令字符串。o 查看命令的开始时间和持续时间。o 单击上下文链接可查看与命令相关的服务状态页面。o 选择选项卡之一以查看命令的角色日志、 标准输出和标准错误。查看正在运行和最近的命令·MapReduce 作业。点击链接查看职位详情。·HDS 复制报告。单击下载 CSV 以查看以下选项:o 列表- 单击以下载包含复制报告的 CSV 文件。该文件列出了在复制作业期间复制的文件和目录的列表。o 状态- 单击可下载包含完整状态报告的 CSV 文件。该文件包含文件的完整状态报告,其中复制状态为以下之一:§ ERROR – 发生错误,文件未复制。§ DELETED – 已删除的文件。§ SKIPPED – 跳过复制的文件,因为它是最新的。o 仅错误状态- 单击可下载包含所有复制文件的状态报告的 CSV 文件,其中包含错误。该文件列出了已复制文件的状态、路径和错误消息。o 仅已删除状态- 单击可下载包含所有已删除文件的状态报告的 CSV 文件。该文件列出了已删除数据库和表的状态、路径和消息。o 仅跳过状态- 单击可下载包含所有跳过文件的状态报告的 CSV 文件。该文件列出了被跳过的数据库和表的状态、路径和消息。o 性能- 单击可下载 CSV 文件,其中包含有关正在运行的复制作业的性能的摘要报告。性能摘要报告包括正在处理复制作业的每个映射器的最后一个性能示例。o 完整性能- 单击可下载包含作业性能报告的 CSV 文件。性能报告显示在复制作业完全执行期间为所有映射器采集的样本。·(仅限试运行)查看可复制文件的数量。显示实际复制期间将复制的文件数。·(仅限试运行)查看可复制字节数。显示在实际复制期间将复制的字节数。·查看复制的 Impala UDF 的数量。(仅对选择了复制 Impala 元数据的 Hive/Impala 复制显示。)·如果创建复制作业时在用户运行身份字段中指定了用户,则会显示所选用户。·查看从复制作业返回的消息。期间完成复制作业所需的时间。结果指示复制作业的状态为成功或失败。预期文件预期复制的文件数及其文件大小基于复制策略的参数。复制的文件复制作业的复制文件数及其文件大小。文件失败复制作业复制失败的文件数及其文件大小。文件已删除已删除的文件数及其复制作业的文件大小跳过的文件复制作业跳过的文件数及其文件大小。复制过程会跳过目标中已存在且未更改的文件。6.10. 监控 HDFS 复制的性能您可以使用从 Cloudera Manager 管理控制台下载为 CSV 文件的性能数据来监控 HDFS 复制策略的进度。此文件包含有关正在复制的文件、平均吞吐量和其他有助于诊断 HDFS 复制期间性能问题的详细信息的信息。您可以查看运行 HDFS 复制作业和已完成作业的性能数据。查看正在运行的HDFS 复制策略的性能数据。1. 从Cloudera Manager 中,选择复制>复制策略。2. 选择策略,然后单击操作>显示历史记录。3. 单击下载CSV,然后选择以下选项之一以查看性能报告:o 性能 - 单击可下载包含有关复制作业性能的摘要报告的 CSV 文件。性能摘要报告包括正在处理复制作业的每个映射器的最后一个性能示例。o 完整性能 - 单击可下载包含作业性能报告的 CSV 文件。完整的性能报告包括在复制作业完全执行期间为所有映射器采集的所有样本。4. 要查看数据,请在电子表格程序(如Microsoft Excel)中打开文件。查看已完成的HDFS 复制策略的性能数据:表 1. HDFS 性能报告列性能数据列描述时间戳收集性能数据的时间主持人运行 YARN 或 MapReduce 作业的主机的名称。复制的字节数为当前正在复制的文件复制的字节数。已用时间(毫秒)当前正在复制的文件的复制操作所用的总时间(以毫秒为单位)。复制的文件复制的文件数。平均吞吐量 (KB/s)自当前正在复制的文件开始以来的平均吞吐量(以千字节/秒为单位)。最后一个文件(字节)最后一个文件的文件大小(以字节为单位)。最后文件时间(毫秒)以毫秒为单位复制最后一个文件所花费的时间。上次文件吞吐量 (KB/s)自上一个文件开始复制以来的吞吐量(以千字节/秒为单位)。除了性能报告之外,您还可以查看错误文件、删除的文件和复制作业期间跳过的文件的报告。要查看报告,请执行以下步骤:· 在复制策略页面上,选择策略并单击操作>显示历史记录。出现复制策略的复制历史页面。展开以查看复制作业详细信息。· 单击下载 CSV以获取以下选项:· o 列表- 单击以下载包含复制报告的 CSV 文件。该文件列出了在复制作业期间复制的文件和目录的列表。o 状态- 单击可下载包含完整状态报告的 CSV 文件。该文件包含文件的完整状态报告,其中复制状态为以下之一:§ ERROR – 发生错误,文件未复制。§ DELETED – 已删除的文件。§ SKIPPED – 跳过复制的文件,因为它是最新的。o 仅错误状态- 单击可下载包含所有复制文件的状态报告的 CSV 文件,其中包含错误。该文件列出了已复制文件的状态、路径和错误消息。o 仅已删除状态- 单击可下载包含所有已删除文件的状态报告的 CSV 文件。该文件列出了已删除数据库和表的状态、路径和消息。o 仅跳过状态- 单击可下载包含所有跳过文件的状态报告的 CSV 文件。该文件列出了被跳过的数据库和表的状态、路径和消息。o 性能- 单击可下载 CSV 文件,其中包含有关正在运行的复制作业的性能的摘要报告。性能摘要报告包括正在处理复制作业的每个映射器的最后一个性能示例。o 完整性能- 单击可下载包含作业性能报告的 CSV 文件。性能报告显示在复制作业完全执行期间为所有映射器采集的样本。要查看数据,请在电子表格程序(如 Microsoft Excel)中打开文件。每两分钟收集一次性能数据。因此,在复制作业的初始执行期间没有可用的数据,因为没有足够的样本来估计吞吐量和其他报告的数据。在 Excel 中显示的示例 CSV 文件如下所示:请注意以下限制和已知问题:· 如果您在复制作业开始后过早单击 CSV 下载,Cloudera Manager 将返回一个空文件或一个仅包含列标题的 CSV 文件,并在实际收集性能数据后稍后尝试。· 如果您使用表单使用代理用户 用户@域,无法通过链接获得性能数据。· 如果复制作业只复制可以在不到几分钟内传输的小文件,则不会收集性能统计信息。· 对于指定动态复制策略的复制策略,有关 MapReduce 作业传输的最后一个文件的统计信息隐藏了该 MapReduce 作业执行的先前传输。· CSV 文件中仅报告每个 MapReduce 作业的最后一次跟踪。原文链接:https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/data-migration/topics/rm-dc-hdfs-replication.html7. Hive/Impala复制策略Hive/Impala 复制使您能够根据指定的复制策略将 Hive 元存储和数据从一个集群复制(复制)到另一个集群,并将目标集群上的 Hive 元存储和数据集与源集群同步 。最低要求角色: 复制管理员(也由完全管理员提供)目标集群必须由设置复制的 Cloudera Manager Server 管理,源集群可以由同一服务器或Peer Cloudera Manager Server 管理。笔记由于 CDH 集群和 CDP-PvC Base 之间的仓库目录更改,Hive 复制不会从源集群中指定的数据库和表中复制表数据。但是复制作业成功运行而没有任何中断。在从 CDH 集群复制到 CDP-PVC BASE 时,建议 定义HDFS目标路径。如果未定义 HDFS 目标路径且 复制HDFS 文件 设置为 true,则使用原始源名称复制数据。例如,复制的表数据驻留在 /warehouse/tablespace/external/hive目录下,但数据被复制到 /user/hive/warehouse地点。此外, 在复制过程之前不定义 HDFS 目标路径可能会导致大量 HDFS 空间用于不需要的数据移动。重要的由于 Hive3 具有不同的默认表类型和仓库目录结构,因此在将 Hive 数据从 CDH5 或 CDH6 版本复制到 CDP-PVC BASE 时适用以下更改:· 在 Hive 复制期间,所有表都成为外部表。这是因为 Hive3 中的默认表类型是 ACID,这是唯一的托管表类型。在此版本中,BDR 不支持Hive2 -> Hive3复制到 ACID 表中,并且所有表都必须作为外部表进行复制。· 复制表将在Hive 配置参数hive.metastore.warehouse.external.dir 设置的外部 Hive 仓库目录下创建 。用户必须确保这与Hive 配置参数hive.metastore.warehouse.dir 具有不同的值 ,即托管表的位置。· 如果用户想要将相同的数据库从 Hive2 复制到 Hive3(设计上会有不同的路径),他们需要使用每个策略的强制覆盖选项以避免任何不匹配问题。笔记从 Sentry 复制到 Ranger 时,受支持的最低 Cloudera Manager 版本为 6.3.1 及更高版本。配置注意事项:· 如果hadoop.proxyuser.hive.groups配置已更改为将 Hive Metastore Server 的访问权限限制为某些用户或组,则该 hdfs组或包含该hdfs用户的组也必须包含在为Hive/Impala 复制指定的组列表中。此配置可以在 Hive 服务上指定为覆盖,也可以在核心站点 HDFS 配置中指定。这适用于源集群和目标集群上的配置设置。· 如果您在目标集群上配置了Hive/Impala 复制过程中复制 HDFS 数据的目录,复制过程中复制的权限会被 HDFS ACL 同步覆盖并且不会保留笔记如果您的部署包括由 Kudu 支持的表,Replication Manager 会过滤掉用于 Hive 复制的 Kudu 表,以防止数据丢失或损坏。7.1. Hive/Impala 复制的主机选择如果您的集群在资源有限的主机上安装了 Hive客户端,Hive/Impala复制可能会使用这些主机来运行复制命令,这可能会导致复制性能下降。为了提高性能,您可以指定要在复制期间使用的主机(“白名单”),以便不使用资源较少的主机。1. 单击集群> Hive 服务>配置。2. 键入Hive Replication搜索框。3. 找到Hive 复制环境高级配置片段(安全阀)属性。4. 添加HOST_WHITELIST属性。输入以逗号分隔的主机名列表,以用于 Hive/Impala 复制。HOST_WHITELIST=host-1.mycompany.com,host-2.mycompany.com5. 输入更改原因,然后单击保存更改以提交更改。7.2. Hive 表和 DDL 命令使用drop table和truncate table等DDL 命令时,以下内容适用。· 如果您配置 Hive表的复制,然后删除该表,该表将保留在目标集群上。发生后续复制时不会删除该表。· 如果删除目标集群上的表,并且该表仍包含在复制作业中,则复制期间将在目标上重新创建该表。· 如果删除源集群上的表分区或索引,复制作业也会将它们删除到目标集群上。· 如果您截断表,并且复制作业的删除策略设置为删除到垃圾箱或永久删除,则复制期间目标上的相应数据文件将被删除。7.3. 参数的复制数据库、表、分区和索引的参数在Hive/Impala 复制期间默认复制。您可以禁用参数复制:1. 登录到Cloudera Manager 管理控制台。2. 转到 Hive服务。3. 单击配置选项卡。4. 搜索Hive 复制环境高级配置片段。5. 添加以下参数:REPLICATE_PARAMETERS=false6. 单击保存更改。7.4. 动态环境中的 Hive 复制要在 Hive Metastore 更改的环境中使用 Replication Manager 进行 Hive 复制,例如在创建或删除数据库或表时,需要额外的配置。1. 打开 Cloudera Manager 管理控制台。2. 在源集群上搜索 hdfs-site.xml属性的HDFS 客户端高级配置片段(安全阀) 。3. 添加以下属性:a. 名称:replication.hive.ignoreDatabaseNotFound值:trueb. replication.hive.ignoreTableNotFound值:true4. 保存更改。5. 重启 HDFS 服务。7.5. 配置 Hive/Impala 数据的复制在配置Hive/Impala 复制作业之前,您必须设置集群。1. 验证您的集群是否符合支持的复制方案之一。2. 如果源集群由与目标集群不同的Cloudera Manager 服务器管理,请配置对等关系。3. 从Cloudera Manager > Replication,单击 Create Replication Policy。4. 选择Hive 复制策略。出现 创建 Hive 复制策略 对话框。5. 选择常规选项卡以配置以下内容:a. 使用名称字段为复制策略提供唯一名称。b. 使用源下拉列表选择您要复制的 Hive服务所在的集群。c. 使用目标下拉列表选择复制目标。如果 Cloudera Manager 管理的 Hive服务只有一个可用作目标,则将其指定为目标。如果此Cloudera Manager 管理多个 Hive服务,请从中选择。d. 根据您计划使用的目标集群类型,选择Use HDFS Destination。e. 选择以下权限之一:§ 不导入 Sentry 权限(默认)§ 如果 Sentry 权限是从 CDH 集群导出的,则同时导入 Hive 对象和 URL 权限§ 如果 Sentry 权限是从 CDH 集群导出的,则只导入 Hive 对象权限f. 选中“全部复制”以从源复制所有 Hive数据库。要仅复制选定的数据库,请取消选中此选项并输入要复制的数据库名称和表。§ 您可以使用加号指定多个数据库和表以向规范添加更多行。§ 您可以在一行中指定多个数据库,方法是用竖线 (|) 字符分隔它们的名称。例如: mydbname1|mydbname2|mydbname3。§ 正则表达式可用于数据库或表字段,如下表所述:正则表达式结果[\w].+任何数据库或表名。(?!myname\b).+除了名为 myname 的数据库或表之外的任何数据库或表。db1|db2[\w_]+db1 和 db2 数据库的所有表。数据库1[\w_]+单击“+”按钮,然后输入数据库[\w_]+db1 和 db2 数据库的所有表(替代方法)。g. 要指定应该运行 MapReduce 作业的用户,请使用Run As Username选项。默认情况下,MapReduce作业作为hdfs. 要以其他用户身份运行 MapReduce 作业,请输入用户名。如果您使用的是Kerberos,则必须在此处提供用户名,并且其 ID 必须大于 1000。笔记运行MapReduce工作的用户应该read与 execute对上Hive仓库目录的权限 源集群。如果您将复制作业配置为保留权限,则在目标集群上需要超级用户权限。h. 如果对等集群配置了不同的超级用户,请指定在对等上运行作为用户名选项。这仅适用于在kerberized 环境中工作时。6. 选择“资源”选项卡以配置以下内容:a. 调度程序池- (可选)在字段中输入资源池的名称。您输入的值由您在 Cloudera Manager 为复制执行MapReduce 作业时指定的MapReduce 服务使用。作业使用以下属性之一指定值:§ MapReduce – 公平调度程序: mapred.fairscheduler.pool§ MapReduce – 容量调度程序: queue.name§ Yarn – mapreduce.job.queuenameb. 最大Map槽和最大带宽 - 每个映射器的Map槽数量和带宽限制。默认值为 100 MB。c. 复制策略– 文件复制应该是静态的(默认)还是动态的。静态复制预先在映射器之间分配文件复制任务,以实现基于文件大小的统一分配。动态复制将文件复制任务以小集合分配给映射器,并且当每个映射器处理其任务时,它会动态获取并处理下一组未分配的任务。7. 选择Advanced选项卡指定导出位置,修改将执行复制的MapReduce 作业的参数,并设置其他选项。您可以选择一个MapReduce 服务(如果您的集群中有多个)并更改以下参数:a. 取消选中复制 HDFS文件复选框以跳过复制关联的数据文件。b. 如果源集群和目标集群都使用 CDH 5.7.0 或更高版本(包括5.11.x),请选择复制 Impala 元数据下拉列表并选择否以避免重复复制 Impala 元数据。(此选项仅在源集群和目标集群都支持时显示。)您可以为Replicate Impala Metadata选择以下选项:§ 是- 复制 Impala 元数据。§ 否– 不复制 Impala 元数据。§ Auto – Cloudera Manager 根据 CDH 版本确定是否复制 Impala 元数据。要在 Cloudera Manager 管理的 CDH 版本为 5.7 或更低版本时复制Impala UDF,请参阅有关何时选择此选项的信息。c. 该强制覆盖选项,如果选中,如果检测到不兼容的更改将强制覆盖到目的地metastore数据。例如,如果目标 Metastore 被修改,并且一个新分区被添加到表中,则此选项会强制删除该分区,并使用在源上找到的版本覆盖表。重要的如果 未设置Force Overwrite选项,并且 Hive/Impala 复制过程检测到源集群上的更改不兼容,则Hive/Impala 复制将失败。这有时会在重复复制中发生,其中与源集群上的现有数据库或表关联的元数据会随着时间的推移而发生变化。d. 默认情况下,Hive 元数据导出到默认 HDFS 位置( /user/${user.name}/.cm/hive),然后从此 HDFS 文件导入到目标 Hive元存储。在本例中,user.name是目标集群上 HDFS 服务的进程用户。要覆盖此导出文件的默认 HDFS位置,请在“导出路径”字段中指定路径。笔记在Kerberized 集群中,源集群上的 HDFS主体 必须具有read, write和 对目标集群上的导出路径目录的execute访问权限。e. 并发 HMS 连接数 - 并发 Hive Metastore 连接数。这些连接用于同时从 Hive导入和导出元数据。增加线程数可以提高 Replication Manager 的性能。默认情况下,新的复制策略使用 5 个连接。如果将该值设置为 1 或更多,Replication Manager 将使用具有指定连接数的多线程。如果将该值设置为 0 或更少,Replication Manager 将使用单线程和单连接。请注意,源和目标集群必须运行支持并发 HMS 连接的 Cloudera Manager 版本、Cloudera Manager 5.15.0 或更高版本和Cloudera Manager 6.1.0 或更高版本。f. 默认情况下,Hive HDFS 数据文件(例如 /user/hive/warehouse/db1/t1)被复制到相对于“ /”(在本例中为 /user/hive/warehouse/db1/t1)的位置。要覆盖默认值,请在HDFS Destination Path字段中输入路径。例如,如果您输入 /ReplicatedData,数据文件将被复制到 /ReplicatedData/user/hive/warehouse/db1/t1.g. 选择要用于此复制的MapReduce 服务(如果您的集群中有多个)。h. 日志路径-日志的替代路径。i. 描述- 复制策略的描述。j. Skip Checksum Checks - 是否跳过校验和检查,默认情况下执行。k.跳过列表校验和检查- 在比较两个文件以确定它们是否相同时是否跳过校验和检查。如果跳过,则使用文件大小和上次修改时间来确定文件是否相同。跳过检查可提高映射器阶段的性能。请注意,如果您选择 跳过校验和检查选项,也会跳过此检查。l. Abort on Error - 是否在出现错误时中止作业。通过选中该复选框,复制到该点的文件将保留在目标上,但不会复制其他文件。默认情况下,错误中止是关闭的。m. 在快照差异失败时中止- 如果快照差异在复制期间失败,Replication Manager 使用完整副本来复制数据。如果选择此选项,Replication Manager 会在遇到错误时中止复制。n. 删除策略- 源上的文件是否也应从目标目录中删除。选项包括:o.保留- 是保留源文件系统上存在的块大小、复制计数和权限 ,还是使用目标文件系统上配置的设置。默认情况下,设置保留在源上。笔记您必须以超级用户身份运行才能保留权限。使用“以用户名运行”选项来确保是这种情况。p. 警报- 是否为复制工作流中的各种状态变化生成警报。您可以提醒On Failure、 On Start、On Success或On Abort(复制工作流中止时)。8. 单击保存策略。复制任务在复制策略表中显示为一行 。要指定其他复制任务,请选择Create > Hive Replication。笔记如果您的复制作业需要很长时间才能完成,并且在复制完成之前表发生了变化,则复制可能会失败。考虑将 Hive 仓库目录和任何外部表的目录设为可快照,以便复制作业在复制文件之前创建目录的快照。7.6. 针对 Hive 复制策略的 Ranger 复制Sentry创建或编辑 Hive复制策略时,您可以选择迁移 Hive对象、Impala数据和正在复制的 URL 的Sentry 策略。Replication Manager 将Sentry 策略转换为目标集群中迁移数据的Ranger 策略。将Sentry 策略复制到Ranger 需要最低支持的Cloudera Manager 版本 6.3.1 及更高版本。在 Hive复制策略中,如果您选择如果 Sentry 权限从 CDH 集群导出,同时导入 Hive 对象和 URL 权限或如果 Sentry 权限从 CDH 集群导出,仅导入 Hive对象权限选项,复制管理器执行在复制作业运行期间自动执行以下任务:当您选择将Sentry 策略迁移到Ranger 时,Replication Manager 会自动执行以下任务:1. 使用authzmigrator 工具将每个Sentry 策略导出为单个 JSON文件。JSON 文件包含资源列表,例如 URI、数据库、表或列以及适用于它的策略。2. 使用DistCp 工具将导出的Sentry 策略复制到目标集群。3. 在使用authzmigrator 工具通过Ranger 其余端点过滤与复制作业相关的策略后,将Sentry 策略摄取到Ranger 中。为了过滤策略,Replication Manager 使用由Cloudera Manager 传递给authzmigrator 工具的过滤器表达式。如果您要复制数据库中表的子集,则数据库级策略将转换为每个被复制表的等效表级策略。(例如,对于每个复制的表,数据库上的 ALL -> 表上的 ALL)。Ranger 中将不会引用原始角色名称。权限直接授予组和用户关于资源而不是角色。这是在就地升级到CDP Private Cloud Base期间将Sentry 迁移到Ranger 的一种不同格式 ,后者确实导入和使用了 Sentry 角色。无论是否修改了策略,每次复制时都会重新创建每个策略。如果您希望继续安排数据复制,但您还想修改目标集群的Ranger 策略(并保留这些修改),您应该通过编辑复制策略在后续运行中禁用Sentry 到Ranger 迁移,并选择不导入 Sentry 权限(默认) 选项。7.7. Impala 和 Hive 用户定义函数 (UDF) 的复制默认情况下,对于 CDH 版本为 5.7 或更高版本的集群,Impala和 Hive UDF 保留在 Hive Metastore 中,并作为 Hive/Impala 复制的一部分自动复制。要在Cloudera Manager 管理的 CDH 版本为 5.6 或更低版本时复制Impala UDF,请参阅有关在创建Hive/Impala 复制策略时何时选择高级选项卡上的复制Impala 元数据选项的信息。复制作业运行后,您可以在复制策略页面上看到在计划的最后一次运行期间复制的 Impala 和 Hive UDF 的数量。您还可以在之前运行的复制的复制历史记录页面上查看复制的 UDF 数量 。7.8. 监控 Hive 或 Impala 复制的性能您可以使用从Cloudera Manager 管理控制台下载为 CSV 文件的性能数据来监控 Hive/Impala 复制策略的进度。此文件包含有关正在复制的表和分区的信息、平均吞吐量以及其他有助于诊断Hive/Impala 复制期间性能问题的详细信息。您可以查看运行Hive/Impala 复制作业和已完成作业的性能数据。查看正在运行的Hive/Impala复制的性能数据:1. 在Cloudera Manager 中,选择复制>复制策略。2. 找到策略所在行,选择策略,然后单击操作>显示历史记录。3. 单击Download CSV for HDFS Replication Report,然后选择以下选项之一以查看性能报告:o 性能- 单击可下载包含有关复制作业性能的摘要报告的 CSV 文件。性能摘要报告包括正在处理复制作业的每个映射器的最后一个性能示例。o 完整性能- 单击可下载包含作业性能报告的 CSV 文件。完整的性能报告包括在复制作业完全执行期间为所有映射器采集的所有样本。4. 要查看数据,请在电子表格程序(如Microsoft Excel)中打开文件。除了性能报告之外,您还可以查看错误文件、删除的文件和复制作业期间跳过的文件的报告。要查看报告,请执行以下步骤:1. 在“复制策略”页面上,找到该策略并单击“操作” >“显示历史记录”。出现复制策略的复制历史页面。展开以查看复制作业详细信息。2. 单击下载 CSV以获取以下选项:o 列表- 单击以下载包含复制报告的 CSV 文件。该文件列出了在复制作业期间复制的文件和目录的列表。o 状态- 单击可下载包含完整状态报告的 CSV 文件。该文件包含文件的完整状态报告,其中复制状态为以下之一:§ ERROR – 发生错误,文件未复制。§ DELETED – 已删除的文件。§ SKIPPED – 跳过复制的文件,因为它是最新的。o 仅错误状态- 单击可下载包含所有复制文件的状态报告的 CSV 文件,其中包含错误。该文件列出了已复制文件的状态、路径和错误消息。o 仅已删除状态- 单击可下载包含所有已删除文件的状态报告的 CSV 文件。该文件列出了已删除数据库和表的状态、路径和消息。o 仅跳过状态- 单击可下载包含所有跳过文件的状态报告的 CSV 文件。该文件列出了被跳过的数据库和表的状态、路径和消息。o 性能- 单击可下载 CSV 文件,其中包含有关正在运行的复制作业的性能的摘要报告。性能摘要报告包括正在处理复制作业的每个映射器的最后一个性能示例。o 完整性能- 单击可下载包含作业性能报告的 CSV 文件。性能报告显示在复制作业完全执行期间为所有映射器采集的样本。3. 要查看数据,请在电子表格程序(如Microsoft Excel)中打开文件。查看已完成的Hive/Impala 复制策略的性能数据:1. 在“复制策略”页面上,找到该策略并单击“操作” >“显示历史记录”。2. 要查看 Hive阶段的性能,请单击Hive 复制报告标签旁边的下载 CSV,然后选择以下选项之一:o 结果- 下载复制表的列表。o 性能- 下载 Hive 复制的性能报告。笔记如果复制的 HDFS阶段跳过所有 HDFS 文件,因为它们没有更改,或者如果复制 HDFS文件选项(在创建 Hive/Impala 复制策略时位于高级选项卡上) ,下载 HDFS复制报告的选项可能不会出现 未选中的。有关HDFS 性能报告中数据的说明,请参见表 1。3. 要查看数据,请在电子表格程序(如Microsoft Excel)中打开文件。每两分钟收集一次性能数据。因此,在复制作业的初始执行期间没有可用的数据,因为没有足够的样本来估计吞吐量和其他报告的数据。从 Cloudera Manager 管理控制台下载的 CSV 文件返回的数据具有以下结构:表 1. Hive 性能报告列Hive 性能数据列描述时间戳收集性能数据的时间主持人运行 YARN 或 MapReduce 作业的主机的名称。数据库名称数据库的名称。表名表的名称。TotalElapsedTimeSecs从复制操作开始经过的秒数。总表数要复制的表总数。该列的值将-1用于 Cloudera Manager 无法确定要更改的表数量的复制。总分区数要复制的分区总数。如果源集群运行 Cloudera Manager 5.9 或更低版本,则此列包含值 ,-1 因为旧版本不报告此信息。数据库计数当前复制的数据库数。数据库错误计数失败的数据库复制操作数。表数到目前为止复制的表总数(对于所有数据库)。当前表计数为当前数据库复制的表总数。表错误计数失败的表复制操作总数。分区计数到目前为止复制的分区总数(对于所有表)。当前分区计数为当前表复制的分区总数。分区跳过计数跳过的分区数,因为它们是在上次运行的复制作业中复制的。索引计数复制的索引文件总数(对于所有数据库)。当前索引计数为当前数据库复制的索引文件总数。索引跳过计数由于未更改而跳过的索引文件数。由于 Hive 中的错误,此值始终为零。Hive函数计数复制的 Hive 函数数。Impala 对象计数复制的 Impala 对象数。请注意以下限制和已知问题:· 如果您在复制作业开始后过早单击 CSV 下载,Cloudera Manager 将返回一个空文件或一个仅包含列标题的 CSV 文件,并在实际收集性能数据后稍后尝试。· 如果您使用表单代理用户,user@domain则无法通过链接获得绩效数据。· 如果复制作业只复制可以在不到几分钟内传输的小文件,则不会收集性能统计信息。· 对于指定动态复制策略的复制策略,有关MapReduce 作业传输的最后一个文件的统计信息隐藏了该MapReduce 作业执行的先前传输。· CSV 文件中仅报告每个MapReduce 作业的最后一次跟踪。7.9. 启用、禁用或删除复制策略创建新的复制策略时,它会自动启用。如果禁用复制策略,则可以稍后重新启用。管理复制策略。1. 从Cloudera Manager 中,选择复制>复制策略。2. 为所选下拉菜单选择操作,然后根据需要选择 启用|禁用|删除。要启用、禁用或删除多个复制策略,您可以从复制策略页面选择这些策略并重复步骤 2。8. 将数据复制到 Impala 集群Impala元数据作为常规Hive/Impala 复制操作的一部分进行复制。8.1. 复制 Impala 元数据Impala 元数据复制作为 Hive 复制的一部分执行。Impala复制仅支持在两个 CDH 集群之间进行。Impala 和 Hive服务必须在两个集群上运行。要启用 Impala 元数据复制,请执行以下任务:1. 安排 Hive复制。2. 确认在“创建 Hive复制”对话框的“高级”选项卡 上将“复制Impala 元数据”选项设置为“ 是” 。当您将复制 Impala 元数据选项设置为是时,Impala UDF(用户定义的函数)将在目标集群上可用,就像在源集群上一样。作为复制 UDF 的一部分,定义它们的二进制文件也会被复制。笔记要对已复制到目标集群的表运行查询或执行 DDL 语句,您必须在目标集群上运行 Impala INVALIDATE METADATA 语句以防止查询失败。8.2. 使 Impala 元数据无效对于不使用 LDAP身份验证的 Impala 集群,您可以将 Hive/Impala 复制作业配置为在复制完成后自动使Impala 元数据失效。如果集群使用Sentry,则Impala 用户应该有权运行INVALIDATE METADATA.配置导致Hive/Impala 复制作业运行ImpalaINVALIDATE METADATA完成复制后目标集群上每个表的语句。该语句在复制完成后清除目标集群Impala 中复制表和视图的元数据,允许目标上的其他Impala 客户端成功查询这些表并获得准确结果。但是,如果在复制运行时对任何复制的表或视图执行 DDL 操作,则此操作可能不安全。一般情况下,不建议直接修改目标上的复制数据/元数据。忽略这一点可能会导致使用这些表或视图的应用程序和查询出现意外或不正确的行为。笔记如果源包含 UDF,INVALIDATE METADATA即使您配置了自动失效,您也必须手动运行该语句并且不指定任何表。要配置该选项,请执行以下任务:1. 安排 Hive复制。2. 在Advanced选项卡上,选择Invalidate Impala Metadata on Destination选项。或者,您可以INVALIDATE METADATA为复制表手动运行该语句。9. 将快照与复制结合使用某些复制,尤其是那些需要很长时间才能完成的复制,可能会因为源文件在复制过程中被修改而失败。您可以通过将快照与复制结合使用来防止此类故障。CDH 5.0 及更高版本会自动使用快照。要利用这一点,您必须为快照启用相关目录(也称为使目录成为 快照表)。当复制作业运行时,它会检查指定的源目录是否是可快照的。在复制任何文件之前,复制作业会创建这些目录的时间点快照,并将它们用作文件副本的源。这可确保复制的数据与复制作业开始时的源数据一致。复制过程完成后,将保留用于后续运行的最新快照。目录是可快照的,因为它已启用快照,或者因为父目录已启用快照。快照目录的子目录包含在快照中。9.1. 带有快照的 Hive/Impala 复制如果您使用 Hive复制,Cloudera建议您将 Hive 仓库目录设为可快照。Hive 仓库目录位于 HDFS 文件系统中hive.metastore.warehouse.dir属性指定的位置。(默认位置是 /user/hive/warehouse。)要访问此属性:1. 打开Cloudera Manager 并浏览到 Hive服务。2. 单击配置选项卡。3. 在搜索框中,键入 hive.metastore.warehouse.dir。显示Hive 仓库目录属性。如果您在 Hive中使用外部表,还要使托管任何未存储在 Hive 仓库目录中的外部表的目录快照表。同样,如果您正在使用Impala 并使用Hive/Impala 复制来复制任何Impala 表,请确保表和关联数据库的存储位置也是可快照的。10. 使用 Kerberos 身份验证启用集群之间的复制要启用集群之间的复制,需要额外的设置步骤以确保源集群和目标集群可以通信。最低要求角色:集群管理员(也由完全管理员提供)重要的即使没有 Kerberos 领域信任关系,Cloudera Replication Manager 也可以与不同Kerberos 领域中的集群一起使用。Cloudera Manager 配置属性Trusted Kerberos Realms和Kerberos Trusted Realms用于 Cloudera Manager 和 CDH 配置,与 Kerberos 领域信任关系无关。如果您在不同Kerberos 领域中的集群之间使用独立的DistCp,则必须配置领域信任。10.1. 端口在启用Kerberos 身份验证的情况下使用Replication Manager 时,Replication Manager 需要以下页面中列出的所有端口Replication Manager 的端口要求。此外,用于Kerberos KDC 服务器和 KRB5服务的端口必须对目标集群上的所有主机开放。默认情况下,这是端口 88。10.2. 域名的注意事项如果源集群和目标集群都使用Kerberos 进行身份验证,请使用以下配置之一来防止运行复制作业时发生冲突。· 如果集群不使用相同的 KDC(Kerberos 密钥分发中心),Cloudera建议您为每个集群使用不同的领域名称。此外,如果您要跨两个不同领域中的集群进行复制,请参阅本主题后面的复制步骤以在这些集群之间建立信任。· 如果集群使用相同的 KDC 或属于统一领域一部分的不同 KDC,您可以使用相同的领域名称,例如其中一个 KDC 是主 KDC,另一个是工作 KDC。· 笔记如果您有多个集群用于隔离生产和非生产环境,则此配置可能会导致主体在两种环境中具有相同的权限。确保为每种类型的环境适当设置权限。重要的如果源集群和目标集群在同一领域但不使用相同的 KDC 或 KDC 不是统一领域的一部分,则复制作业将失败。10.3. HDFS、Hive 和 Impala 复制配置源集群和目标集群。1. 在目标集群中的主机上,确保每个主机上的 krb5.conf文件(通常位于 /etc/kbr5.conf)具有以下信息:o 源集群的Kerberos 领域的 KDC 信息。例如:[realms] SRC.EXAMPLE.COM = { kdc = kdc01.src.example.com:88 admin_server = kdc01.example.com:749 default_domain = src.example.com } DST.EXAMPLE.COM = { kdc = kdc01.dst.example.com:88 admin_server = kdc01.dst.example.com:749 default_domain = dst.example.com }o 源集群域的领域映射。您可以在[domain_realm]部分配置这些映射。例如:[domain_realm] .dst.example.com = DST.EXAMPLE.COM dst.example.com = DST.EXAMPLE.COM .src.example.com = SRC.EXAMPLE.COM src.example.com = SRC.EXAMPLE.COM笔记如果您遇到主机名不一致的情况,您必须导航到Cloudera Manager Host All Hosts并确保所有这些主机都以与domain_realm部分中所见类似的方式覆盖 。2. 在目标集群上,使用Cloudera Manager 将源集群的领域添加到Trusted Kerberos Realms配置属性:o 转到 HDFS 服务。o 单击配置选项卡。o 在搜索字段中键入Trusted Kerberos以查找Trusted Kerberos Realms 属性。o 单击加号图标,然后输入源 集群领域。o 输入更改原因,然后单击保存更改以提交更改。3. 转至 管理>设置。4. 在搜索字段中,键入domain name。5. 在域名字段中,输入要映射到目标集群 KDC 的任何域名或主机名。使用加号图标根据需要添加任意数量的条目。此属性中的条目用于生成 中的domain_realm 部分krb5.conf。6. 如果domain_realm在高级配置片段(安全阀)中配置了剩余的krb5.conf,请删除它的条目。7. 输入更改原因,然后单击保存更改以提交更改。10.4. Kerberos 连接测试作为测试连接的一部分,Cloudera Manager 测试在运行复制的源和目标集群上正确配置的 Kerberos 身份验证。添加对等方进行复制时,测试连接会自动运行,或者您可以从“操作”菜单手动启动测试连接 。当源和目标集群运行Cloudera Manager 5.12 或更高版本时,此功能可用。您可以通过设置禁用Kerberos的连通性测试 feature_flag_test_kerberos_connectivity,以false与Cloudera的管理器API: api/<version>/cm/config。如果测试检测到Kerberos 配置存在任何问题,Cloudera Manager 会根据Cloudera Manager 是否管理Kerberos 配置文件提供解决步骤。Cloudera Manager 测试以下场景:· 两个集群是否都启用了Kerberos。· 从Cloudera Manager 6.1 及更高版本开始,支持从不安全集群到安全集群的复制。· 如果源集群使用Kerberos 而目标集群不安全,则不支持复制。· 两个集群是否在同一个Kerberos 领域。同一个领域中的集群必须共享同一个 KDC,或者 KDC 必须在一个统一的领域中。· 集群是否位于不同的Kerberos 领域。如果集群在不同的领域,则必须根据以下标准配置目标集群:o 目标 HDFS 服务必须具有正确的 Trusted Kerberos Realms设置。o 该krb5.conf文件domain_realm在所有主机上都有正确的 映射。o 该krb5.conf文件包含realms有关所有主机的正确 信息。· 本地和对等 KDC 是否在可用端口上运行。该端口必须对集群中的所有主机开放。默认端口为 88。Cloudera Manager 运行测试后,Cloudera Manager 会提出解决任何Kerberos 配置问题的建议。10.4.1. Kerberos 建议如果Cloudera Manager 管理Kerberos 配置文件,Cloudera Manager 会为您正确配置Kerberos,然后提供您必须手动运行以完成集群配置的命令集。如果 Cloudera Manager 不管理Kerberos 配置文件,Cloudera Manager 会提供更正问题所需的手动步骤。11. 加密数据的复制HDFS 支持静态数据加密,包括通过 Hive访问的数据。本主题介绍了加密区域内和加密区域之间的复制如何工作,以及如何配置复制以避免因加密而失败。11.1. 加密集群之间传输的数据源目录和目标目录可能在也可能不在加密区域中。如果目标目录在加密区域中,则目标目录上的数据会被加密。如果目标目录不在加密区域中,即使源目录在加密区域中,该目录上的数据也不会加密。CDH 5.1 或更低版本不支持加密区域。配置加密区域时,您还可以配置密钥管理服务器(KMS) 来管理加密密钥。在复制过程中,当密钥从源集群传输到目标集群时,Cloudera Manager 使用TLS/SSL 对它们进行加密。配置加密区域时,您还可以配置密钥管理服务器(KMS) 来管理加密密钥。当指定加密源目录的 HDFS复制命令运行时,Cloudera Manager临时将加密密钥从源集群复制到目标集群,使用TLS/SSL(如果为 KMS 配置)来加密密钥。Cloudera Manager 然后使用这些密钥解密从源集群收到的加密文件,然后再将文件写入目标集群。重要的在配置 HDFS 复制时,必须选择 跳过校验和检查属性以防止在以下情况下复制失败:· 从源集群上的加密区域复制到目标集群上的加密区域。· 从源集群上的加密区域复制到目标集群上的未加密区域。· 从源集群上的未加密区域复制到目标集群上的加密区域。即使源目录和目标目录都在加密区域中,数据在从源集群读取时会被解密(使用源加密区域的密钥),并在写入目标集群时再次加密(使用密钥)用于目标加密区域)。如果您为 HDFS 数据传输配置了加密,则数据传输会被加密。笔记解密和加密步骤发生在运行复制数据的 MapReduce 作业的主机上的同一进程中。因此,纯文本数据仅存在于 Mapper 任务的内存中。如果源或目标集群上正在使用 KMS,并且您对源或目标目录使用加密区域,请为 KMS 配置 TLS/SSL 以防止将密钥作为纯文本传输到映射器任务。在复制期间,数据使用 distcp. 对于使用加密区域的集群,请使用 TLS/SSL 配置源和目标之间 KMS 密钥传输的加密。要配置源集群和目标集群之间的数据传输加密:· 在源集群和目标集群上为 HDFS客户端启用 TLS/SSL。您可能还需要在源和目标上的 SSL 证书之间配置信任。· 为两个对等Cloudera Manager 服务器启用TLS/SSL。· 使用 HDFS数据传输加密来加密数据传输。以下博客文章提供了有关使用 HDFS进行加密的其他信息:https : //blog.cloudera.com/blog/2013/03/how-to-set-up-a-hadoop-cluster-with-network-encryption/。11.2. 安全考虑您在计划复制作业时使用“运行方式”字段指定的用户需要对要复制的密钥和数据目录的完全访问权限。这不是 KMS 管理的推荐最佳实践。如果您更改 KMS 中的权限以启用此要求,您可能会意外地为该用户提供对使用相同密钥的其他加密区域中的数据的访问权限。如果未指定用户的运行方式领域,复制运行作为默认用户,hdfs。要访问加密数据,用户必须在 KMS 上获得他们需要与之交互的加密区域的授权。您在计划复制时使用运行方式字段指定的用户必须具有此授权。密钥管理员必须为该用户向 KMS 添加 ACL 以防止授权失败。使用 KMS 协议从源到客户端的密钥传输使用 REST 协议,这要求您为 KMS 配置 TLS/SSL。启用TLS/SSL 后,密钥不会以纯文本形式通过网络传输。12. 快照您可以使用Cloudera Manager 或使用命令行创建 HBase 和 HDFS 快照。HDFS 快照允许您创建目录或整个文件系统的时间点备份,而无需实际克隆数据。它们可以提高数据复制性能并防止因更改源目录而导致的错误。这些快照作为只读目录出现在文件系统上,可以像其他普通目录一样访问。12.1. Cloudera Manager 快照策略Cloudera Manager 支持创建快照策略,这些策略定义要创建快照的目录或表、应拍摄快照的时间间隔以及每个快照时间间隔应保留的快照数量。例如,您可以创建一个同时拍摄每日和每周快照的策略,并指定应维护七个每日快照和五个每周快照。最低要求角色: 复制管理员(也由完全管理员提供)笔记您还可以通过使用快照来提高可靠性。12.1.1. 管理快照策略您必须为快照启用 HDFS目录,以允许为该目录创建快照策略。要将 HDFS目录指定为快照表,请按照以下步骤操作12.1.1.1. 创建快照策略:1. 从Cloudera Manager,选择复制>快照策略。现有快照策略显示在表格中。2. 要创建新策略,请单击创建快照策略。3. 从下拉列表中,选择要为其创建策略的服务(HDFS 或 HBase)和集群。4. 为策略提供一个名称,并可以选择输入描述。5. 指定要包含在快照中的目录、命名空间或表。重要的不要拍摄根目录的快照。o 对于 HDFS 服务,选择要包含在快照中的目录路径。下拉列表允许您仅选择启用快照的目录。如果没有为快照启用目录,则会显示警告。单击以添加路径和删除路径。o 对于 HBase 服务,列出要包含在快照中的表。您可以使用 Java 正则表达式来指定一组表。例如,finance.*匹配名称以 开头的所有表finance。您还可以使用 语法为给定命名空间中的所有表创建快照。{namespace}:.*6. 指定快照计划。您可以每小时、每天、每周、每月或每年或这些的任意组合安排快照。根据您选择的频率,您可以指定拍摄快照的时间、星期几、月份中的某一天或一年中的月份,以及在每个时间间隔保留的快照数量。调度信息中的每个时间单位都与更大粒度的时间单位共享。也就是说,分钟值由所有选定的计划共享,小时由适用于小时的所有计划共享,依此类推。例如,如果您指定在半小时拍摄每小时快照,并在 20 小时拍摄每日快照,则每日快照将在 20:30 发生。要选择间隔,请选中相关框。这些字段显示您可以编辑要保留的快照的时间和数量的位置。7. 指定是否应为快照工作流中的各种状态更改生成警报。您可以在失败、启动、成功或快照工作流中止时发出警报。8. 单击保存策略。新策略出现在 快照策略页面上。12.1.1.2. 要编辑或删除快照策略:1. 从Cloudera Manager,选择复制>快照策略。现有快照策略显示在表格中。2. 找到该策略并单击操作菜单,然后选择 编辑或删除选项。12.1.2. 快照历史“快照历史记录”页面显示有关已运行或尝试的快照作业的信息。该页面显示了一个包含以下列的快照作业表:表 1.快照历史字段描述开始时间快照作业开始执行的时间。单击以显示有关快照的详细信息。例如:单击“查看”链接以打开“托管计划快照命令”页面,该页面显示有关执行命令的每个步骤的详细信息和消息。结果显示快照是成功还是失败。路径 | 处理的表HDFS 快照:为快照处理的路径数。HBase 快照:为快照处理的表数。路径 | 未处理的表HDFS Snapshots:快照未处理的路径数。HBase Snapshots:快照未处理的表 数。创建的快照创建的快照数量。快照已删除删除的快照数量。创建过程中的错误显示创建快照时发生的错误列表。每个错误都显示相关路径和错误消息。删除过程中的错误显示删除快照时发生的错误列表。每个错误都显示相关路径和错误消息。12.1.3. 孤立的快照当快照策略包含对要保留的快照数量的限制时,Cloudera Manager 会在每次添加新快照时检查存储的快照总数,并在必要时自动删除最旧的现有快照。编辑或删除快照策略时,从策略中删除的文件、目录或表可能会留下“孤立”快照,这些快照不会自动删除,因为它们不再与当前快照策略相关联。Cloudera Manager 从不选择这些快照进行自动删除,因为只有在策略创建包含这些文件、目录或表的新快照时才会选择删除。您可以通过Cloudera Manager 或通过创建使用 HDFS或 HBase 快照命令的命令行脚本手动删除快照。很难找到孤立的快照以进行手动删除。快照策略自动接收前缀, cm-auto后跟全局唯一标识符 (GUID)。您可以通过搜索该策略独有的前缀来查找特定策略的所有快照。cm-auto-guid为避免孤立快照,请在编辑或删除关联的快照策略之前删除快照,或记录要删除的快照的标识名称。该前缀显示在策略列表中的策略摘要中,并出现在删除对话框中。记录快照名称(包括关联的策略前缀)是必要的,因为在删除策略后无法确定与策略关联的前缀,并且快照名称不包含对快照策略的可识别引用。12.2. 管理 HDFS 快照本主题演示了如何使用Cloudera Manager 或命令行管理 HDFS 快照。对于 HDFS服务,使用文件浏览器选项卡查看与集群上的服务关联的 HDFS目录。您可以查看当前保存的文件快照,并删除或恢复它们。在 HDFS文件浏览器选项卡中,您可以:· 将 HDFS目录指定为“可快照”,以便可以为这些目录创建快照。· 启动 HDFS目录的即时(计划外)快照。· 查看当前维护的已保存快照列表。这些可以包括一次性的即时快照,以及基于策略的计划快照。· 删除保存的快照。· 从保存的快照恢复 HDFS目录或文件。· 将 HDFS目录或文件从保存的快照恢复到新目录或文件(恢复为)。在使用快照之前,请注意以下限制:· 包含加密目录的快照无法在创建它们的区域之外恢复。· Cloudera Manager Admin Console 无法对启用了静态加密的 HDFS路径执行快照操作(例如创建、恢复和删除)。此限制仅影响Cloudera Manager 管理控制台,不影响 CDH 命令行工具或未由管理控制台执行的操作,例如使用命令行工具的 Replication Manager。有关快照操作的更多信息,请参阅Apache HDFS 快照文档。12.2.1. 浏览 HDFS 目录您可以浏览 HDFS目录以选择正确的集群。要浏览 HDFS目录以查看快照活动:1. 从Clusters选项卡中,选择您的 CDH HDFS 服务。2. 转到文件浏览器选项卡。当您浏览 HDFS的目录结构时,您选择的目录的基本信息会显示在右侧(所有者、组等)。12.2.2. 启用和禁用 HDFS 快照要创建快照,必须为快照启用 HDFS目录。您不能将目录指定为快照策略的一部分,除非它已为快照启用。最低要求角色:集群管理员(也由完全管理员提供)12.2.2.1. 为快照启用 HDFS 目录1. 从Clusters选项卡中,选择 CDH HDFS 服务。2. 转到文件浏览器选项卡。3. 转到要启用快照的目录。4. 在文件浏览器中,单击完整文件路径旁边的下拉菜单并选择 启用快照。笔记为目录启用快照后,您将无法在其任何子目录上启用快照。只能在启用了快照的目录上拍摄快照。12.2.2.2. 禁用可快照目录要为启用了快照的目录禁用快照,请使用 右上角下拉菜单按钮中的禁用快照。如果目录的快照存在,则必须先将其删除,然后才能禁用快照。12.2.3.拍摄和删除 HDFS 快照要管理 HDFS快照,请为快照启用 HDFS目录。最低要求角色: 复制管理员(也由完全管理员提供)12.2.3.1. 拍摄快照笔记您还可以通过创建快照策略来安排定期发生快照。1. 从Clusters选项卡中,选择 CDH HDFS 服务。2. 转到文件浏览器选项卡。3. 转到包含要恢复的快照的目录。4. 单击完整路径名旁边的下拉菜单并选择 Take Snapshot。显示拍摄快照屏幕。5. 输入快照的名称。6. 单击“确定”。存在“拍摄快照”按钮,可立即对目录进行快照。7. 要拍摄快照,请单击“拍摄快照”,指定快照的名称,然后单击“拍摄快照”。快照被添加到快照列表中。已拍摄的任何快照均按拍摄时间、名称和菜单按钮列出。12.2.3.2. 删除快照1. 从Clusters选项卡中,选择 CDH HDFS 服务。2. 转到文件浏览器选项卡。3. 转到包含要删除的快照的目录。4. 在快照列表中,找到要删除的快照,单击。5. 选择删除。12.2.4. 恢复快照从快照还原之前,请确保有足够的磁盘空间。1. 从Clusters选项卡中,选择 CDH HDFS 服务。2. 转到文件浏览器选项卡。3. 转到要还原的目录。4. 在文件浏览器中,单击完整文件路径旁边的下拉菜单(在文件浏览器列表的右侧),然后选择以下选项之一:o 从快照恢复目录o 将目录从快照还原为...显示恢复快照屏幕。5. 如果要将快照恢复到其他目录,请选择从快照恢复目录为...。输入必须将快照还原到的目录路径。确保 HDFS上有足够的空间来从快照还原文件。笔记如果在将目录从快照还原为...字段中输入现有目录路径 ,则该目录将被覆盖。6. 选择以下选项之一:o 使用 HDFS 'copy' 命令- 此选项执行速度较慢,并且在安全集群中不需要凭据。它将快照的内容复制为子目录或目标目录中的文件。o 使用DistCp / MapReduce - 此选项执行速度更快,并且需要安全集群中的凭据(运行方式)。它将目标目录与源快照的内容合并。选择此选项后,以下附加字段(与配置复制时可用的字段类似)将显示在“更多选项”下:§ 恢复HDFS数据时,如果集群中存在MapReduce或YARN服务,则使用DistributedCopy(distcp)恢复目录,提高恢复速度。所述还原快照屏幕HDFS(下更多选项)允许使用的MapReduce或纱作为MapReduce的服务的选择。对于文件,或者如果MapReduce 或 YARN服务不存在,则执行正常复制。§ Skip Checksum Checks - 是否跳过校验和检查(默认是执行它们)。如果选中,则不会执行校验和验证。在以下情况下,您必须选择此属性以防止在恢复快照时失败:§ 在单个加密区域内恢复快照。§ 将快照从一个加密区域恢复到不同的加密区域。§ 将快照从未加密区域恢复到加密区域。原文链接:https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/data-migration/topics/cdp-data-migration-replication-manager-to-cdp-data-center.html
2022年11月
2022年08月
2022年07月
2021年12月
2021年09月