在Oracle Cloud Infrastructure上部署 Hadoop 的注意事项
运行 Hadoop 的许多客户在浏览云迁移时具有类似的问题:
- 我们如何将 Hadoop 部署或迁移到云?
- 我们如何保护云中的 Hadoop?
- 我们如何在云中为 Hadoop 实施 HA 和 DR?
- 与内部部署相比,云中 Hadoop 部署的性能如何实现类似?
- 在部署多个环境时,我们如何跟踪和管理我们的成本?
本文章提供了Oracle Cloud Infrastructure对这些问题的答案。
部署
当您订阅 Oracle 基础结构即服务(IaaS)时,您可以访问与其关联的所有计算、存储和网络服务。Oracle Cloud Infrastructure 上的部署与内部部署类似,前提是每个 Hadoop 分发都具有相同的版本和功能。
简介和资源经理
Oracle Cloud Infrastructure 工程团队已与每个 Hadoop ISV 合作,以实现利用 Terraform 的部署。通过 Terraform,您可以将基础结构部署为代码(IaC),其中包括 Hadoop 生态系统的所有方面,从网络(虚拟云网络、子网、VNIC)和安全访问控制列表,用于计算和存储预配。Terraform 是灵活、高度可扩展的,以及许多云提供商的标准。
您可以选择是将这些模板用作在Oracle Cloud Infrastructure上部署 Hadoop 的框架,还是可以留下您用于内部部署的现有部署工具。两种方法都有效。
如果您希望使用 Terraform 部署 Hadoop,请考虑使用 Oracle 资源管理器。考虑使用资源管理器的主要优点:
- Terraform 状态元数据保留在高可用性位置。
- 对资源管理器的访问可以在其他Oracle Cloud Infrastructure 服务包含的安全性和审计工具中进行管理。
- 资源管理器会删除与在Oracle Cloud Infrastructure上配置 Terraform 进行部署的复杂性。
资源管理器界面支持使用预期的堆栈变量值填充的基于 Yaml 的方案文件。这样,您可以定义堆栈中每个变量允许的形状、软件版本和其他参数。

插图 resource-manager-ui.png 的说明
填充方案文件后,值将显示在一个易于使用的 UI 中。方案文件可让您下拉列表包含这些值,以及用户可在其中键入或粘贴输入的定制输入字段。
方案文件中的字段也可以具有相关性,因此,如果用户在一个字段中选择值,则将根据该选择显示或隐藏其他字段。
集群服务拓扑
部署 Hadoop 时,请考虑集群服务拓扑到节点角色的以下映射:
节点类型 | Hadoop 角色 | Hadoop 服务 |
---|---|---|
边缘 | 用户有权从上次访问 | 客户机库 , Oozie |
实用程序 | 集群管理 | Cloudera 管理器、Ambari、元数据数据库 |
主体 | 核心集群服务 | Zookeeper, NameNode, JournalNode, HIVE, HBase Master, Spark History, Job History, Resource Manager, HTTPFS, SOLR |
员工 | 工作量执行 , 数据存储 | HDFS, NodeManager, Region Server, Kafka 中介 , Spark 执行程序 , 地图/减少 |
在选择要用于这些角色的计算配置时,以后在此解决方案中介绍了最佳实践。另请考虑以下标准:
- 此集群将使用多少个并行用户 ?
边缘节点数应根据并发用户数缩放到数量和 OCPU 中。每个 OCPU 的两个并发用户是一个很好的准则,允许每个用户使用一个线程。跨容错域的其他边缘节点还提供了冗余。
- 是否有特定的 Spark 或 HBase 区域服务器内存要求 ?
此类要求直接影响员工节点的数量和组成。HBase 的大小调整要求了解基础应用程序并且有所不同。大多数客户已了解 HBase 部署的要求,特别是区域服务器数和每个服务器分配的内存。Spark 工作量相似地具有聚集内存目标,通过获取 Worker 节点数乘以每个 worker 的可用内存来实现该目标。
- 是否需要特定 HDFS 容量?
大多数客户都具有此要求。但在扩展大量裸金属 DenseIO 员工节点之前,请考虑 NVMe 基于 HDFS 可以按块存储卷进行扩充以实现所需的 HDFS 密度,如后面解决方案中所述。Oracle 建议您了解 HDFS 要求,而且还根据因素工作量要求,以便您可以“适当的大小”集群在最大限度地降低成本时命中两个目标。
移植
当运行 Hadoop 的客户决定部署到Oracle Cloud Infrastructure时,通常有大量数据可迁移。HDFS 中批量提供了此数据,并支持数据库中存在的群集元数据。
由于多种原因,直接在 Internet 上复制 HDFS 数据会很难:
- 数据量太大或可用带宽太大,无法在任何有意义的时间范围内支持线上数据副本。
- 数据敏感,监管或法规要求可能不允许在 Internet 上复制数据。
- 内部部署群集资源受约束,数据复制将影响正在进行的工作负荷。
支持多种数据迁移方法。它们是按要迁移的数据类型定义的。
HDFS 数据迁移
将 HDFS 数据复制到Oracle Cloud Infrastructure有三种常见方法:
- 通过在 Internet 上或 FastConnect 中使用 VPN,直接将数据从内部部署群集复制到Oracle Cloud Infrastructure 区域的对象存储。完成此过程后,可使用来自对象存储的数据解除冻结Oracle Cloud Infrastructure 集群。
- 通过互联网或通过 FastConnect 将数据直接从内部部署群集复制到Oracle Cloud Infrastructure 群集。
- 将数据复制到数据传输设备,该设备将部署到客户数据中心,填写数据,然后发运到 Oracle 并上载到对象存储。然后,可使用此数据解除冻结Oracle Cloud Infrastructure 集群。
有关上述每种方法的技术详细信息将在此解决方案的后面进行讨论。
元数据迁移
群集元数据通常远小于 HDFS 数据,并存在于内部部署群集中的数据库中。
集群元数据的移植取决于以下两种因素:源集群中的 Hadoop 分发,以及用于存储元数据的数据库。此数据的传输非常简单,特定于每个 Hadoop 分发。
以后此解决方案中提供了有关每个 Hadoop 分发的细节。
安全性
云端安全对于 Hadoop 尤其重要,也有许多方法可确保在Oracle Cloud Infrastructure 上进行部署保持安全。
首先考虑一些特定于Oracle Cloud Infrastructure的安全控制:
- 利用身份和访问管理(Identity and Access Management, IAM)来控制有权访问云资源的人员、用户组具有的访问权限以及具体资源。此体系结构可以提供以下结果:
- 基于组织结构安全隔离云资源
- 通过浏览器界面、REST API、SDK 或 CLI 验证用户以访问云服务
- 对用户组进行授权以对相应的云资源执行操作
- 与现有身份提供方的联合
- 启用托管服务供应商(MSP)或系统集成者(SI)来管理基础结构资产,同时仍允许操作员访问资源
- 对应用程序实例进行授权以对云服务进行 API 调用
- 审计虚拟云网络(VCN)中所有网络的安全列表。尽可能使这些规则受限制,并仅允许信任流量进入面向网络的子网。
- 在面向网络的主机上启用主机防火墙,并仅允许必要的流量。
- 请考虑定期使用安全审计。
加密也是用于运动中的其余数据和数据的良好选项。请考虑以下资源:
- Cloudera 加密机制
- 临时工
- HDFS 加密-静态
- 电汇加密
- MapR 加密
其他特定于 Hadoopsecurity 的安全注意事项包括:
- 在具有专用 IP 地址的子网上部署群集,这些群集仅向面向互联网的子网公开必要的 api 或 uid。
- 使用集群安全性运行 Hadoop
- 使用边缘节点可通过 SSH 隧道访问集群服务。在 Mac 或 Linux 上更为容易。
- 利用 Apache Knox 确保 API 端点安全。
- 利用 Apache Sentry 或 Cloudera 导航器可实现对集群数据和元数据的基于角色的访问。
网络安全
由于 Hadoop 和安全注意事项的开放性,大多数客户都首选在专用子网中部署其 Hadoop 集群。然后,对集群服务的访问权限只能通过使用维边节点、对 Ui、api 和服务面板的负载平衡访问,或者通过 FastConnect VPN 或 SSH 隧道通过维边代理进行直接访问。
公共子网可以扩展边缘节点和实用程序节点的集群部署,这些节点可以运行面向互联网的服务(如 Cloudera Manager 或 Ambari)。这是完全可选的。您可以选择利用 FastConnect VPN 并作为内部部署网络拓扑的扩展运行整个部署。这只需要客户可路由的专用 IP 段,该段在 VCN 层关联,然后拆分为Oracle Cloud Infrastructure中的适当子网。访问是使用安全列表控制的,该安全列表应用于子网级别。最佳做法是将具有相似访问要求的资源分组到相同的子网中。
子网拓扑
VCN 介绍了您选择的单个连续 IPv4 CIDR 块。在 VCN 中,可以为集群主机部署单个 IPv4 子网。对每个子网中的访问权限由安全列表控制。可通过防火墙在主机级别控制其他安全性。
最佳做法是将 Hadoop 集群资源划分为无法直接从 Internet 访问的专用子网。对集群的访问应该通过面向公众的子网中的其他主机进行控制,并使用适当的安全列表规则来控制公共和专用网段之间的通信。此模型为 Hadoop 集群提供了最佳安全性。
- 公共子网可用于边缘节点(用户访问)以及任何需要公开 UI 或 API(例如 Cloudera 管理器或 Ambari)才能进行外部访问的服务。
- 专用子网应该用于集群主机(主体、worker),不能直接从 Internet 访问。而是需要在公共子网中提供中间主机用于访问、负载平衡器或由 VPN、FastConnect 或 SSH 代理直接访问。
安全列表
安全列表控制子网级别的入站流量和出站流量。对于 Hadoop,最好在具有集群主机的子网与 TCP 通信和 UDP 通信的子网之间具有完全无限制的双向访问。公共子网应具有高度限制的安全列表,以仅允许可信端口(甚至源 IP 地址)访问 api 和 uid。
高可用性
Hadoop 具有用于高可用性(HA)的内置方法,这些方法未在此处介绍。下面是利用Oracle Cloud Infrastructure for Hadoop 实现 HA 的最佳做法。
区域选择
Oracle Cloud Infrastructure 中的每个区域都包含一到三个可用性域。每个可用性域还包含三个容错域。选择接近您和业务资源的家乡区域(例如数据中心)。所选区域的组成部分确定是否可以使用单个可用性域部署或多个可用性域部署。
单个可用性-主部署
Oracle 建议在Oracle Cloud Infrastructure上为 Hadoop 部署使用单个可用性域进行部署。对于 MapR 部署,此体系结构仅支持一个。此部署模型是网络透视的性能最佳的,因为集群内流量包含在本地网段中,此部署模型保持低延迟和高吞吐量。可用性域中的资源在容错域之间进行条带化,以实现物理基础结构的 HA。
故障域是可用性域内的一组硬件和基础结构。每个可用性域包含三个容错域。在容错域中,您可以分发实例,使它们在单个可用性域内不在同一物理硬件上。影响一个容错域的硬件故障或计算硬件维护不会影响其他容错域中的实例。
多可用性-主部署
多可用性域部署(跨多租户的可用性域部署)仅受 Cloudera 和 Hortonworks 支持,但也可以使用 Apache Hadoop。
但是,对于跨越的可用性域,请考虑以下事项:
- 集群内连接必须遍历 WAN 段,这会增加延迟并降低最佳吞吐量。这对性能的可度量影响,尤其是裸金属员工节点。对于较小的 VM Worker 节点,性能影响较小。
- 并非所有Oracle Cloud Infrastructure 区域都支持此模型。
下图显示了在单个可用性域中使用 10 TB TeraSort 与某个集群(由五个 Worker 节点和三个主体节点组成)跨越时度量的性能影响:

插图 comparison-availability-domain-across ing.png 的说明
跨越可用性域不会在单个区域中提供集群服务的额外冗余。集群资源还可以利用每个可用性域中的容错域来增加逻辑“机架拓扑”;对于机架识别,每个容错域都将被视为"机架”。以下图表说明了这些优点。

插图 archiArchitecture e-multi-availability-domains.png 的说明
灾难恢复
Oracle Cloud Infrastructure 中的灾难恢复(DR)取决于您的恢复点目标(RPO)和恢复时间目标(Recovery Time Objective, RTO)要求。
如果 RPO 或 RTO 接近实时,则针对 Hadoop 的唯一选项是在其他可用性域或区域中创建 DR 群集,然后在生产和 DR 群集之间复制数据。如果 RPO 和 RTO 需求更加灵活,我们建议利用对象存储作为 HDFS 和群集元数据的备份目标。根据需要调度复制过程,以便满足您的 RPO 目标,通过使用 DistCp(分布式副本)等工具将数据推入对象存储。您还可以将数据库(Oracle、MySQL)备份到对象存储桶,或者复制到其他可用性域或区域中的其他数据库实例。
如果您的 DR 要求为单个区域无法提供的数据指定地理冗余,您也可以在区域之间复制对象存储中的数据。如果发生灾难,请考虑使用 Terraform 在其他可用性域(位于同一区域或不同区域中)中快速预配资源,并从对象存储中的数据复水 DR 集群。
成本管理
如此解决方案的其余部分所述,计算和存储需求有多种方法可以“右侧大小”,从而降低基础设施成本。Oracle Cloud Infrastructure 提供了其他工具,可帮助您管理与 Hadoop 部署关联的成本:
- 您可以对部署使用标记,以便于跟踪使用。
- 您可以在区间级别设置配额,以限制不同业务部门的使用。考虑使用多个区间来管理生产、QA 和开发环境,并根据需要限制配额。
利用云的动态性质也很适用于可能无需持久保持的环境。如果您使用对象存储作为数据的备份(或数据池),则使用 Terraform、使用来自对象存储的数据解除冻结 HDFS 时,可以轻松地创建环境,并在不再需要时销毁环境。
具有块存储卷的 VM 环境也可以暂停计算开单,并且只需为存储消耗收费。