这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

群集布局

Vertica 支持两种用于 Hadoop 集成的群集架构。您使用的架构会影响您对与 HDFS 集成的决策。这些选项也可能受到许可条款的限制。

  • 您可以将 Vertica 共置于部分或全部 Hadoop 节点。然后,Vertica 可以充分利用数据局部性。

  • 您可以构建一个独立于 Hadoop 群集的 Vertica 群集。在此配置中,Vertica 可以充分利用各个节点;不与 Hadoop 共享资源。

无论采用哪种体系结构,如果您使用 hdfs 方案读取 ORC 或 Parquet 文件,就必须做一些额外的配置。请参阅配置 HDFS 访问

1 - 共置群集

使用共置群集时,Vertica 安装在部分或全部 Hadoop 节点上。如下图所示,除所有 Hadoop 节点使用的公用网络以外,Vertica 节点还使用专用网络:

您可以选择将 Vertica 置于全部或仅部分 Hadoop 节点上。如果要使用 HDFS 存储位置,您应该使用至少三个 Vertica 节点(企业模式数据库中的 K-safety 的最小数)。

使用更多 Vertica 节点可以提高性能,因为查询所需的 HDFS 数据更可能是节点的本地数据。

您可以将 Hadoop 和 Vertica 群集置于单个机架内,或者跨许多个机架和节点。如果您不在每个节点上共置 Vertica,则可以通过将其共置在每个机架中的至少一个节点上来提高性能。请参阅配置机架位置

通常情况下,Hadoop 和 Vertica 共同使用整个节点。由于这种配置使用共享节点,您必须在配置中解决这些节点上的潜在资源争用。有关详细信息,请参阅为共置群集配置 Hadoop。无需对仅 Hadoop 的节点做任何更改。

硬件建议

Hadoop 群集常常不具有完全相同的预配要求或硬件配置。但是,根据常规硬件和操作系统要求和建议中推荐的最佳实践标准,Vertica 节点的大小和功能应该相当。

由于 Hadoop 群集的规格并不总能满足这些标准,Vertica 建议针对 Hadoop 群集中的 Vertica 节点采用以下规格。

2 - 为共置群集配置 Hadoop

如果让 Vertica 共置于任何 HDFS 节点,那么有一些额外的配置要求。

Hadoop 配置参数

为获得最佳性能,请使用指定的最小值设置以下参数:

WebHDFS

Hadoop 有两种服务可为 HDFS 提供 Web 访问权限:

  • WebHDFS

  • httpFS

对于 Vertica,您必须使用 WebHDFS 服务。

YARN

YARN 服务在较新版本的 Hadoop 中提供。它为 Hadoop 群集执行资源管理。将 Vertica 共置于由 YARN 管理的 Hadoop 节点时,您必须在 YARN 中进行一些更改。

Vertica 建议在共享节点上为 Vertica 留出至少 16GB 的内存。预留更多内存将带来性能提升。如何执行此操作取决于您的 Hadoop 发行版:

  • 如果您使用 Hortonworks,创建一个 "Vertica" 节点标签,然后将其分配给运行 Vertica 的节点。

  • 如果您使用 Cloudera,请启用并配置静态服务池。

有关详细信息,请查阅 Hadoop 发行版的文档。或者,您可以禁用共享节点上的 YARN。

Hadoop Balancer

Hadoop Balancer 可在整个 HDFS 范围内重新分配数据块。此功能对于许多 Hadoop 服务都非常有用。但对于 Vertica 而言,此功能可能会在某些条件下降低性能。

如果您使用 HDFS 存储位置,Hadoop Load Balancer 可能会将数据从正在对其进行操作的 Vertica 节点上移走,从而降低性能。如果 Vertica 没有在所有 Hadoop 节点上运行,读取 ORC 或 Parquet 文件时也有可能发生这种情况。(如果您使用独立的 Vertica 和 Hadoop 群集,所有 Hadoop 访问均通过网络实现,而且性能成本不太明显。)

为了避免在整个 HDFS 群集内进行不必要的数据块移动,请考虑将 Vertica 节点排除在再平衡以外。请参阅 Hadoop 文档,以了解如何执行此操作。

复制因子

默认情况下,HDFS 存储每个数据块的三个副本。Vertica 通常会被设置为通过 K-Safety 存储每个数据项的两个副本。因此,将复制因子降低到 2 不但可以节省空间,还能提供数据保护。

要降低 HDFS 存储的副本数量,请按照对 HDFS 存储位置进行故障排除中的说明,设置 HadoopFSReplication。

用于非 HDFS 用途的磁盘空间

您还需要为非 HDFS 用途留出一些磁盘空间。要使用 Ambari 预留磁盘空间,将 dfs.datanode.du.reserved 设置为 hdfs-site.xml 配置文件中的一个值。

设置此参数可为 Vertica 需要的非 HDFS 文件保留空间。

3 - 配置机架位置

如果可能,在规划查询时,Vertica 会自动使用与包含数据的 HDFS 节点共置的数据库节点。将查询执行移到更靠近数据的位置可以减少网络延迟并提高性能。这种称为节点定位的行为不需要额外的配置。

当 Vertica 仅共置于 HDFS 节点的子集上时,有时没有与数据共置的数据库节点。但是,如果查询使用同一机架中的数据库节点,性能通常会更好。如果配置了有关 Hadoop 机架结构的信息,Vertica 会尝试使用与要查询的数据位于同一机架中的数据库节点。

例如,下图说明了具有三个机架的 Hadoop 群集,每个机架包含三个数据节点。(典型的生产系统在每个机架上会有更多的数据节点。)在每个机架中,Vertica 共置于一个节点上。

如果您配置了机架位置,则 Vertica 使用 db01 查询 dn1、dn2 或 dn3 上的数据,使用 db02 和 db03 分别查询 rack2 和 rack3 上的数据。因为 HDFS 会复制数据,所以任何给定的数据块都可以存在于多个机架中。例如,如果在 dn2、dn3 和 dn6 上复制数据块,Vertica 将使用 db01 或 db02 来查询它。

Hadoop 组件是机架感知的,因此描述机架结构的配置文件已经存在于 Hadoop 群集中。要在 Vertica 中使用此信息,请配置描述此机架结构的故障组。Vertica 在查询计划中使用故障组。

配置故障组

Vertica 使用 容错组 来描述物理群集布局。由于您的数据库节点共置在 HDFS 节点上,因此 Vertica 可以使用有关 HDFS 群集物理布局的信息。

Hadoop 将其群集布局数据存储在 HADOOP_CONF_DIR 中的拓扑映射文件中。在 HortonWorks 上,该文件通常命名为 topology_mappings.data。在 Cloudera 上,它通常命名为 topology.map。使用此文件中的数据为故障组脚本创建输入文件。有关此文件格式的详细信息,请参阅创建容错组输入文件

以下是前面说明的群集的拓扑映射文件示例:

[network_topology]
dn1.example.com=/rack1
10.20.41.51=/rack1
dn2.example.com=/rack1
10.20.41.52=/rack1
dn3.example.com=/rack1
10.20.41.53=/rack1
dn4.example.com=/rack2
10.20.41.71=/rack2
dn5.example.com=/rack2
10.20.41.72=/rack2
dn6.example.com=/rack2
10.20.41.73=/rack2
dn7.example.com=/rack3
10.20.41.91=/rack3
dn8.example.com=/rack3
10.20.41.92=/rack3
dn9.example.com=/rack3
10.20.41.93=/rack3

根据这些数据,您可以创建以下输入文件来描述该群集的 Vertica 子集:

/rack1 /rack2 /rack3
/rack1 = db01
/rack2 = db02
/rack3 = db03

此输入文件告知 Vertica 数据库节点 "db01" 在 rack1 上,"db02" 在 rack2 上,"db03" 在 rack3 上。在创建此文件时,忽略那些不是 Vertica 节点的 Hadoop 数据节点。

创建输入文件后,运行故障组工具:

$ python /opt/vertica/scripts/fault_group_ddl_generator.py dbName input_file > fault_group_ddl.sql

此脚本的输出是创建故障组的 SQL 文件。按照创建容错组中的说明执行。

您可以使用以下语句查看新的故障组:

=> SELECT member_name,node_address,parent_name FROM fault_groups
INNER JOIN nodes ON member_name=node_name ORDER BY parent_name;

 member_name  | node_address  | parent_name
-------------------------+--------------+-------------
db01          | 10.20.41.51   | /rack1
db02          | 10.20.41.71   | /rack2
db03          | 10.20.41.91   | /rack3

(3 rows)

使用多层机架

Hadoop 群集可以使用多层机架。例如,/west/rack-w1、/west/rack-2 和 /west/rack-w3 可能由一个数据中心提供服务,而 /east/rack-e1、/east/rack-e2 和 /east /rack-e3 由另一个数据中心提供服务。对故障组脚本输入文件中的条目使用以下格式:

/west /east
/west = /rack-w1 /rack-w2 /rack-w3
/east = /rack-e1 /rack-e2 /rack-e3
/rack-w1 = db01
/rack-w2 = db02
/rack-w3 = db03
/rack-e1 = db04
/rack-e2 = db05
/rack-e3 = db06

不要使用完整的机架路径(例如 /west/rack-w1)创建条目。

审核结果

要查看机架位置可以加载多少数据,请在查询中使用 EXPLAIN 并在输出中查找如下语句:

100% of ORC data including co-located data can be loaded with rack locality.

4 - 单独的群集

对于单独的群集,Vertica 群集和 Hadoop 群集不共享节点。您应当在两个群集之间使用高带宽网络连接。

下图说明了分置群集的配置:

网络

网络是任何配置良好的群集的关键性能组件。当 Vertica 将数据存储到 HDFS 时,它可以通过网络写入和读取数据。

图中所示的布局需要两个网络,而添加第三个网络也能带来好处:

  • 数据库专用网络:Vertica 使用专用网络进行命令与控制和在各节点之间移动数据,以支持其数据库功能。在某些网络中,命令与控制和数据传递会拆分到两个网络。

  • 数据库/Hadoop 共享网络:每个 Vertica 节点必须能够连接到每个 Hadoop 数据节点和 NameNode。Hadoop 的最佳实践通常需要为 Hadoop 群集提供专用网络。这并不是一项技术要求,但专用网络可以提高 Hadoop 的性能。Vertica 和 Hadoop 应该共享专用 Hadoop 网络。

  • 可选客户端网络:外部客户端可以通过客户端网络访问群集网络。这并不是一项绝对需求,但使用支持通过客户端连接到 Vertica 或 Hadoop 的第三个网络能够提高性能。如果配置不支持客户端网络,那么客户端连接应使用共享网络。

Hadoop 配置参数

为获得最佳性能,请使用指定的最小值设置以下参数: