将 Impala 数据迁移到 CDP

2021-10-20 12:21:58 浏览数 (2)

这是CDH/HDP/Apache Hadoop迁移到CDP系列的博客,如对迁移感兴趣,请关注该系列之前博客《使用 Replication Manager 迁移到CDP 私有云基础》、《将数据迁移到CDP 私有云基础的数据迁移用例》、《将Hive数据迁移到CDP》、《将 Kudu 数据迁移到 CDP》、《将 HBase 迁移到 CDP》、《将 Accumulo 迁移到 CDP》、《安全和治理迁移到CDP》、《将 Oozie 迁移到 CDP》。

在将 Impala 工作负载从 CDH 平台迁移到 CDP 之前,您必须了解 CDH 和 CDP Impala 之间的语义和行为差异以及需要在数据迁移之前执行的活动。

要将关键 Impala 工作负载成功迁移到云环境,您必须了解目标环境中的容量要求,并了解当前环境与目标环境之间的性能差异。

CDH 和 CDP 之间的 Impala 变化

CDH 中的Impala 和CDP 中的Impala 之间存在一些差异。在您将工作负载从 CDH 5.13-5.16 或 CDH 6.1 或更高版本迁移到CDP 私有云基础或公共云后,这些更改会影响 Impala 。其中一些差异要求您更改 Impala 脚本或工作流程。

当您将工作负载迁移到CDP 私有云基础或公共云时,您在 CDH 版本 5.11 - 5.16 或 6.1 或更高版本中使用的 Impala 版本更改为 Impala 3.4 。

更改数据文件的位置

如果 Impala 托管表在迁移之前位于hdfs的 /user/hive/warehouse上,则转换为外部的表将保留在那里。迁移过程将 hive.metastore.warehouse.dir 属性设置为此位置,将其指定为 Hive 仓库位置。您可以使用 Cloudera Manager 更改仓库的位置。

在 CDH 到 CDP 迁移后,现有表的位置不会更改。在 CDP 中,托管表和外部表有单独的 HDFS 目录。

  • 托管表的数据文件在 Cloudera Manager 配置设置指定的仓库位置可用Hive Warehouse Directory。
  • 外部表的数据文件在 Cloudera Manager 配置设置指定的仓库位置可用Hive Warehouse External Directory。

迁移后,将(hive.metastore.warehouse.dir)设置为 Impala 托管表所在的/user/hive/warehouse。

您可以使用 Cloudera Manager 中的 Hive Metastore Action 菜单更改仓库的位置。

使用Hive Configuration页面创建 Hive 目录

  1. Hive > Action Menu > Create Hive User Directory
  2. Hive > Action Menu > Create Hive Warehouse Directory
  3. Hive > Action Menu > Create Hive Warehouse External Directory

设置存储引擎 ACL

您必须了解为 Impala 设置 ACL 以允许 Impala 写入 Hive 仓库目录的步骤。

迁移后,将(hive.metastore.warehouse.dir)设置为 Impala 托管表所在的/user/hive/warehouse。当 Impala 工作负载从 CDH 迁移到 CDP 时,会自动为默认仓库目录设置 ACL 设置。如果您在迁移到 CDP 后更改了仓库目录的默认位置,请按照以下步骤操作以允许 Impala 写入 Hive 仓库目录。

完成Hive/Impala Configuration页面上自由格式字段中的初始配置, Cloudera Manager以允许 Impala 写入 Hive 仓库目录。

  1. 使用Impala Configuration页面设置 Impala 用户 ACL
    1. Impala >操作菜单>在仓库目录上设置 Impala 用户 ACL
    2. Impala >操作菜单>在外部仓库目录上设置 Impala 用户 ACL
  1. Cloudera Manager 为用户“Impala”设置 ACL。但是,在启动 Impala 服务之前,请使用子命令getfacl 和setfacl.
    1. 使用getfacl方法验证托管表和外部表的 HDFS 目录的 ACL .

例子:

代码语言:javascript复制
$ hdfs dfs -getfacl hdfs:///warehouse/tablespace/managed/hive
# file: hdfs:///warehouse/tablespace/managed/hive
# owner: hive
# group: hive
user::rwx
group::rwx
other::---
default:user::rwx
default:user:impala:rwx
default:group::rwx
default:mask::rwx
default:other::---
$ hdfs dfs -getfacl hdfs:///warehouse/tablespace/external/hive
# file: hdfs:///warehouse/tablespace/external/hive
# owner: hive
# group: hive
# flags: --t
user::rwx
group::rwx
other::rwx
default:user::rwx
default:user:impala:rwx
default:group::rwx
default:mask::rwx
default:other::rwx
    1. 如有必要,请使用setfacl命令设置 HDFS 目录的 ACL

例子:

代码语言:javascript复制
$ hdfs dfs -setfacl hdfs:///warehouse/tablespace/managed/hive
$ hdfs dfs -setfacl hdfs:///warehouse/tablespace/external/hive

有关使用子命令getfacl 和 的更多信息setfacl,请参阅使用 CLI 命令创建和列出 ACL。

    1. 上面的示例将用户显示Impala为Hive组的一部分 。如果在您的设置中,该用户 Impala不属于该组, Hive则确保该用户Impala所属的组 具有对该目录分配的 WRITE 权限。

查看用户Impala所属的组:

代码语言:javascript复制
$ id -Gn impala
uid=973(impala) gid=971(impala) groups=971(impala),972(hive)

元数据的自动失效/刷新

要在将原始数据摄取到表中时获取新信息,您可以使用 hms_event_polling_interval_s 标志。

新的默认行为

当原始数据被摄取到表中时,会生成新的 HMS 元数据和文件系统元数据。在 CDH 中,要获取此新信息,您必须手动发出 Invalidate 或 Refresh 命令。但是在 CDP 中,此功能由 hms_event_polling_interval_s 标志控制。默认情况下,此标志设置为 2 秒。当在 HMS 中检测到更改时,此选项会自动刷新表。启用元数据的自动失效/刷新后,目录服务器以可配置的时间间隔轮询 Hive Metastore (HMS) 通知事件,并自动将更改应用于 Impala 目录。如果需要刷新事件轮询不支持的特定表,则必须运行表级 Invalidate 或 Refresh 命令。

元数据改进

在 CDP 中,默认情况下启用所有目录的元数据改进。您可以使用这几个旋钮来控制 Impala 如何管理其元数据以提高性能和可扩展性。

use_local_catalog

在 CDP 中,所有 Impala 协调器的按需模式默认设置use_local_catalog为 True,以便 Impala 协调器根据需要从目录中提取元数据并将其缓存在本地。这导致了许多性能和可扩展性的改进,例如减少了协调器上的内存占用和自动缓存逐出。

catalog_topic_mode

按需元数据获取的粒度位于协调器和catalogd. 添加/删除分区等常见用例不会触发大型元数据的不必要的序列化/反序列化。

该功能可用于以下任一模式。

元数据按需模式

在这种模式下,所有协调器都按需使用元数据。

设置以下内容catalogd:

--catalog_topic_mode=minimal

在所有impalad协调器上设置以下内容 :

--use_local_catalog=true

混合模式

在这种模式下,只有部分协调器可以按需使用元数据。

Cloudera 建议您仅使用混合模式来测试本地目录对堆使用的影响。

设置以下内容catalogd:

--catalog_topic_mode=mixed

impalad使用按需元数据在协调器上设置以下内容:

--use_local_catalog=true

局限性:

On-demand元数据模式协调器不支持 HDFS 缓存。

参考:

有关目录改进的详细信息,请参阅Impala 元数据管理。

默认托管表

在 CDP 中,托管表是具有insert_only 默认属性的事务表。您必须了解在 CDP 中修改托管表上的文件系统的新默认行为以及切换到旧行为的方法。

新的默认行为

  • 您不能再对 CDP 中的托管表执行文件系统修改(添加/删除文件)。事务表的目录结构与非事务表不同,添加的任何带外文件可能会或可能不会被 Hive 和 Impala 拾取。
  • 目前在Impala该insert_only事务表不能改变。ALTER TABLE事务表上的语句当前显示错误。
  • Impala 目前不支持对事务表进行压缩。您应该使用 Hive 来压缩表。
  • 在SELECT,INSERT,INSERT OVERWRITE,和TRUNCATE语句支持只插入的事务表。

切换到 CDH 行为的步骤:

  • 如果您不需要事务表,请将DEFAULT_TRANSACTIONAL_TYPE查询选项 设置为 NONE默认情况下任何新创建的托管表都不是事务表。
  • 删除表时,外部表不会删除数据文件。要在删除表时随表一起清除数据,请添加external.table.purge = true表属性。当external.table.purge设置为true,则当数据被删除DROP TABLE 时执行的语句。

Impala 集群上表的自动刷新

该属性enable_insert_events在 CDP 中用于在 Impala 插入表时自动刷新其他 Impala 集群上的表或分区。

enable_insert_events

如果 Impala 插入到一个表中,它会刷新基础表或分区。当此配置 enable_insert_events设置为True(默认)时,Impala 生成 INSERT 事件类型,当其他 Impala 集群接收到这些类型时,它会自动刷新表或分区。

笔记

事件处理必须开启,此属性才能工作。

Hive 和 Impala 之间的互操作性

本主题介绍了在 CDP 中所做的更改,以实现 Hive 和 Impala 之间的最佳互操作性,从而改善用户体验。

Hive 和 Impala 之间的统计互操作性

新的默认行为:

表的统计信息是特定于引擎的,即 Hive 或 Impala,因此每个引擎都可以使用自己的统计信息,而不会覆盖其他引擎生成的统计信息。

当您COMPUTE STATS在Impala 上发布声明时,您需要在Hive 上发布相应的声明,以确保Hive 和Impala 的统计数据都是准确的。

Impala的COMPUTE STATS命令不会覆盖同一个表的 Hive 统计信息。

切换到 CDH 行为的步骤:

没有解决方法。

Hive 默认文件格式互操作性

新的默认行为:

Hive 创建的托管表默认为 ORC 文件格式,并支持完整的事务功能。如果您在未指定STORED AS子句的情况下创建表并从 Hive 加载数据,那么 Impala 无法读取或写入此类表。但是 Impala 可以继续读取非事务性和仅插入事务性 ORC 表。

切换到 CDH 行为的步骤:

  • STORED AS PARQUET如果您希望在这些表上与 Impala 进行互操作,则在 Hive 中创建表时必须使用该子句。
  • 如果要在系统级别更改此默认文件格式,请在 Cloudera Manager 的 Hive_on_Tez 服务配置中,将hive_default_fileformat_managed字段设置 为 parquet。

Impala 支持 Apache Hadoop 中使用的多种文件格式。它还可以加载和查询其他 Hadoop 组件(如 hive)生成的数据文件。从任何 CDH 5.x 版本升级到7.1、如果在Hive中使用默认的LazyBinaryColumnarSerDe创建RC文件,Impala将无法读取RC文件。但是,您可以将 hive.default.rcfile.serde 的配置选项设置为 ColumnarSerDe,以保持 hive 和 impala 之间的互操作性。

托管表和外部表空间目录

新的默认行为:

在 CDP 中,托管表和外部表有单独的 HDFS 目录。

  • 托管表的数据文件位于 Cloudera Manager 配置设置指定的仓库位置, hive_warehouse_directory.
  • 外部表的数据文件位于 Cloudera Manager 配置设置指定的仓库位置, hive_warehouse_external_directory.

如果您执行文件系统级别的操作来添加/删除表上的文件,则需要考虑它是外部表还是托管表以查找表目录的位置。

切换到 CDH 行为的步骤:

检查DESCRIBE FORMATTED命令的输出以查找表位置。

对完整事务表禁用 ORC 支持

在 CDP 7.2.0 及更早版本中,Impala 查询禁用 ORC 表支持。但是,您可以选择使用命令行参数切换到 CDH 行为 ENABLE_ORC_SCANNER。

新的默认行为

在 CDP 7.2.0 及更早版本中,如果您使用 Impala 查询 ORC 表,您将看到它失败。为了缓解这种情况,您必须将显式 STORED AS 子句添加到创建 Hive 表的代码中,并使用 Impala 可以读取的格式。另一种选择是在 Cloudera Manager 中设置全局配置以更改 hive_default_fileformat_managed。

切换到 CDH 行为的步骤:

将查询选项ENABLE_ORC_SCANNER设置 TRUE为重新启用 ORC 表支持。

此选项不适用于完整的事务性 ORC 表,并且查询会返回错误。

笔记

如果您使用的是 CDP 7.2.1 或更高版本,则ENABLE_ORC_SCANNER默认启用该参数,您可以使用 Impala 查询 ORC 表,而无需任何手动干预。

CDP 中的 ORC 与 Parquet

理解用于存储 Hive 数据的优化行列式 (ORC) 文件格式和用于存储 Impala 数据的 Parquet 之间的差异很重要。当您为应用程序使用适当的格式时,查询性能会提高。

Impala 的授权提供程序

使用 CDH 中可用的 BDR 服务,您可以迁移 CDP 中的权限,因为 Ranger 是授权提供者而不是 Sentry。您必须了解 Ranger 如何在 CDP 中执行可能与使用 Sentry 不同的策略。

新行为:

  • 的CREATE ROLE,GRANT ROLE, SHOW ROLE语句不支持作为游侠目前不支持角色。
  • 当前,当重命名特定资源时,策略不会自动转移到新重命名的资源。
  • SHOW GRANT 使用无效的用户/组不会返回错误。

下表列出了在 Impala 中运行 SQL 语句的不同访问类型要求。

SQL语句

Impala 访问要求

DESCRIBE view

基础表上的 VIEW_METADATA

ALTER TABLE RENAMEALTER VIEW RENAME

目标表/视图上的 ALL源表/视图上的 ALTER

SHOW DATABASESSHOW TABLES

VIEW_METADATA

在哪里:

  • VIEW_METADATA权限表示SELECT, INSERT, or REFRESH权限。
  • ALL特权表示SELECT, INSERT, CREATE, ALTER, DROP, and REFRESH特权。

有关在 Impala 中执行 SQL 语句所需的最低权限级别和范围的更多信息,请参阅Impala 授权。

迁移Sentry策略

由于 CDP 利用 Ranger 作为其授权服务,您必须将权限从 Sentry 迁移到 Ranger。您可以使用 CDH 中提供的 BDR 服务来迁移权限。此服务将 Sentry 授权策略迁移到 Ranger 作为复制策略作业的一部分。创建复制策略时,选择要迁移的资源,然后为这些资源迁移 Sentry 策略。您可以将一组对象的所有权限或权限迁移到 Ranger。

在Sentry Permissions一节的Create Replication Policy向导包含下列选项:

  • 包含元数据的Sentry权限- 选择此选项可在复制作业期间迁移Sentry权限。
  • 从元数据中排除 Sentry 权限- 如果您不想在复制作业期间迁移 Sentry 权限,请选择此选项。

创建复制策略向导的复制选项部分包含以下选项:

  • 包括元数据和数据
  • 仅包含元数据

迁移阶段

Sentry 和 Ranger 具有不同的权限模型。Sentry权限授予角色和用户。这些被转换为组和用户的权限,因为 Ranger 当前不支持角色。接下来是按资源分组,因为 Ranger 策略是按资源分组的。授予资源的所有权限都被视为单个 Ranger 策略。

Sentry 策略向 Ranger 的迁移通过以下操作执行:

  • 导出- 导出操作在源集群中运行。在此操作期间,将获取 Sentry 权限并将其导出到 JSON 文件。根据您提供的配置,此文件可能位于本地文件系统或 HDFS 或 S3 中。
  • 翻译和摄取- 这些操作发生在目标集群上。在转换操作中,Sentry 权限被转换为 Ranger 可以读取的格式。然后将权限导入 Ranger。当权限被导入时,它们被标记为源集群名称和摄取发生的时间。导入后,包含权限的文件将被删除。

由于 Sentry 权限和 Ranger 服务策略之间没有一对一的映射,Sentry 权限在 Ranger 服务策略中被转换为它们的等效项。有关如何将 Sentry 操作应用于 Ranger 中相应操作的更多信息,请参阅 Sentry 到 Ranger 权限。

笔记

由于 Ranger 中的授权模型与 Sentry 的模型不同,因此并非所有策略都可以使用 BDR 进行迁移。对于某些资源,您必须在将工作负载从 CDH 迁移到 CDP 后手动创建权限。

Atlas 的数据治理支持

CDH 和 CDP 环境都支持 Impala 操作的治理功能。将工作负载从 CDH 迁移到 CDP 时,您必须手动将 Navigator 元数据迁移到 Atlas,因为 Navigator 元数据不会从 CDH 自动迁移到 CDP。

这两个环境收集相似的信息来描述 Impala 活动,包括:

  • Impala 访问请求的审计
  • 描述 Impala 查询的元数据
  • 描述 Impala 操作创建或更新的任何新数据资产的元数据

支持这些操作的服务在两种环境中是不同的。功能分布在服务中,如下所示:

功能

CDH

CDP

审计

访问请求

导航器控制台中的审计选项卡

Ranger 控制台中的审计页面

创建或更新元数据目录条目的服务操作

导航器控制台中的审计选项卡

Atlas 仪表板中每个实体的审计选项卡

一般服务操作

导航器控制台中的审计选项卡

没有收集其他审计。

元数据目录

Impala 操作:CREATE TABLE AS SELECTCREATE VIEWALTER VIEW AS SELECTINSERT INTOINSERTOVERWRITE

流程和流程执行实体列级和表级沿袭

流程和流程执行实体列级和表级沿袭

将 Navigator 内容迁移到 Atlas

作为将工作负载从 CDH 迁移到 CDP 的一部分,您必须使用 Atlas 作为 CDP 中集群的 Cloudera Navigator 数据管理。您可以选择手动将 Navigator 元数据迁移到 Atlas,因为 Navigator 元数据不会从 CDH 自动迁移到 CDP。Atlas 使用新操作“重建”现有集群资产和沿袭的元数据。但是,必须将 Navigator Managed 元数据标签和您在 CDH 中手动输入的任何元数据手动移植到 Atlas 业务元数据标签。如果您有使用 Navigator 的应用程序,则必须移植它们以使用 Atlas API。

笔记

Navigator审核信息未移植。要保留遗留审计信息,您可以保留一个“只读”的 Navigator 实例,直到不再需要它为止。您可能需要将旧集群上的 CM/Navigator 升级到更新版本以避免 EOL。

将内容从 Navigator 迁移到 Atlas 涉及 3 个步骤:

  • 从 Navigator 中提取内容
  • 将该内容转换为 Atlas 可以使用的形式
  • 将内容导入到 Atlas

CDH 和 CDP 中的 Impala 配置差异

CDH 和 CDP 中有一些与 Impala 相关的配置差异。这些差异是由于 CDP 中为实现 Hive 和 Impala 之间的最佳互操作性而进行的更改,以改善用户体验。在将 Impala 工作负载从 CDH 迁移到 CDP 之前查看更改。

配置选项中的默认值更改

配置选项

范围

CDH 6.x 中的默认值

CDP 中的默认值

DEFAULT_FILE_FORMAT

Query

TEXT

PARQUET

hms_event_polling_interval_s

Catelogd

0

2

ENABLE_ORC_SCANNER

Query

TRUE

TRUE

use_local_catalog

Coordinator/Catalogd

false

true

catalog_topic_mode

Coordinator

full

minimal

新的配置选项

配置选项

范围

默认值

default_transactional_type

Coordinator

insert_only

DEFAULT_TRANSACTIONAL_TYPE

Query

insert_only

disable_hdfs_num_rows_estimate

Impalad

false

disconnected_session_timeout

Coordinator

900

PARQUET_OBJECT_STORE_SPLIT_SIZE

Query

256 MB

SPOOL_QUERY_RESULTS

Query

FALSE

MAX_RESULT_SPOOLING_MEM

Query

100 MB

MAX_SPILLED_RESULT_SPOOLING_MEM

Query

1 GB

FETCH_ROWS_TIMEOUT_MS

Query

不适用

DISABLE_HBASE_NUM_ROWS_ESTIMATE

Query

FALSE

enable_insert_events

TRUE

默认文件格式

为了提高可用性和功能性,Impala 显着改变了表的创建。在 CDP 中,表的默认文件格式是 Parquet。

新的默认行为

当您发出CREATE TABLE不带STORED AS子句的语句时,Impala 会创建 Parquet 表而不是像 CDH 中的 Text 表。

例如,如果您在未提供STORED AS 子句的情况下基于文本文件创建外部表 ,然后发出选择查询,则查询将在 CDP 中失败,因为 Impala 期望文件采用 Parquet 文件格式。

切换到 CDH 行为的步骤:

  1. 如果文件格式不是 Parquet ,则在CREATE TABLE语句中添加显式的stored as子句 。
  2. 启动协调器时所有表的default_transactional_type标志设置为text。
  3. 将查询选项default_file_format设置TEXT为恢复为一个或多个CREATE TABLE 语句的默认文本格式。

重新连接到 HS2 会话

客户端可以在保持 HiveSever2 (HS2) 会话运行的同时与 Impala 断开连接,也可以通过提供 session_token 重新连接到同一会话。

新的默认行为

默认情况下,断开连接的会话会在 15 分钟后终止。

  • 由于这种行为变化,客户不会注意到差异。
  • 如果客户端在没有驱动程序明确关闭会话的情况下断开连接(例如,由于网络故障),断开连接的会话和与其关联的查询可能保持打开状态并继续消耗资源,直到断开连接的会话超时。管理员可能会注意到这些断开连接的会话和/或相关的资源消耗。

切换到 CDH 行为的步骤:

您可以将该--disconnected_session_timeout标志调整为较低的值,以便快速清除断开连接的会话。

自动行数估计

为了优化复杂或多表查询,Impala 可以访问有关数据量和值分布方式的统计信息。Impala 使用此信息来帮助并行化和分发查询工作。

新的默认行为

Impala 查询计划器可以利用有关整个表和分区的统计信息。此信息包括物理特征,例如行数、数据文件数、数据文件的总大小和文件格式。对于分区表,数字是按分区计算的,并作为整个表的总数。此元数据存储在 Metastore 数据库中,可由 Impala 或 Hive 更新。

如果表上没有可用的统计信息,Impala 通过根据表中的行数估计表的大小来估计基数。默认情况下,此行为处于开启状态,并且在统计数据不可用的大多数情况下,应该会产生更好的计划。

对于某些边缘情况,当该表上不存在统计信息时,Impala 可能会生成错误的计划(与 CDH 中的相同查询相比),这可能会对查询性能产生负面影响。

切换到 CDH 行为的步骤:

将查询选项DISABLE_HDFS_NUM_ROWS_ESTIMATE设置 TRUE为禁用此优化。

在 SQL 查询中使用保留字

为了符合 ANSI SQL,Impala 拒绝 CDP 中 SQL 查询中的保留字。保留字是不能直接用作标识符的字。如果需要将其用作标识符,则必须用反引号将其引用。

CDH 6 中添加了新的保留字。要从具有不同保留字集的 CDH 5 移植 SQL 语句,您必须使用 SQL 语法中的保留字更改使用对此类表或数据库的引用的查询。

  1. 查找具有问题的参考表,表中如使用保留字,如create table语句 select中的CREATE 语句。
  2. 用反引号将表名括起来。
代码语言:javascript复制
CREATE TABLE select (x INT): fails
CREATE TABLE `select` (x INT): succeeds

Impala 中的其他杂项变化

在将您的工作负载从 CDH 版本 5.13-5.16 或 CDH 版本 6.1 或更高版本迁移到CDP Private Cloud Base或 CDP Public Cloud后,查看可能影响 Impala 的 Impala 语法或服务的更改。您在 CDH 版本 5.11-5.16 或 6.1 或更高版本中使用的 Impala 版本更改为CDP Private Cloud Base 中的Impala 3.4 。

十进制 V2 默认值

在 CDP 中,Impala 默认使用 DECIMAL V2。

要继续使用该DECIMAL类型的第一个版本以实现查询的向后兼容性,请将DECIMAL_V2查询选项设置为 FALSE:

SET DECIMAL_V2=FALSE;

列别名替换

以符合SQL标准,帕拉不再执行别名取代在的子表达式GROUP BY,HAVING和ORDER BY。

下面的示例引用sum(ss_quantity)了 ORDER BY子句中的实际列而不是别名,Total_Quantity_Purchased 并且还引用ss_item_sk了GROUP BY子句中的实际列而不是别名,Item因为子表达式中不再支持别名。

代码语言:javascript复制
select
ss_item_sk as Item,
count(ss_item_sk) as Times_Purchased,
sum(ss_quantity) as Total_Quantity_Purchased
from store_sales
group by ss_item_sk
order by sum(ss_quantity) desc
limit 5;
 ------- ----------------- -------------------------- 
| item  | times_purchased | total_quantity_purchased |
 ------- ----------------- -------------------------- 
| 9325  | 372             | 19072                    |
| 4279  | 357             | 18501                    |
| 7507  | 371             | 18475                    |
| 5953  | 369             | 18451                    |
| 16753 | 375             | 18446                    |
 ------- ----------------- -------------------------- 

默认 PARQUET_ARRAY_RESOLUTION

该查询选项PARQUET_ARRAY_RESOLUTION控制基于索引的分辨率在Parquet数组的行为。在 Parquet 中,您可以使用 2 级或 3 级表示法来表示数组。PARQUET_ARRAY_RESOLUTION 的默认值为 THREE_LEVEL 以匹配 Parquet 标准 3 级编码。有关详细信息,请参阅Parquet_Array_Resolution 查询选项。

集群提示默认值

默认情况下启用集群提示,它将按 HDFS 和 Kudu 表中的分区列添加本地排序到查询计划。noclustered 提示可防止在具有排序列的表中聚集,但会被忽略并显示警告。

删除了查询选项

已删除以下查询选项:

  • DEFAULT_ORDER_BY_LIMIT
  • ABORT_ON_DEFAULT_LIMIT_EXCEEDED
  • V_CPU_CORES
  • RESERVATION_REQUEST_TIMEOUT
  • RM_INITIAL_MEM
  • SCAN_NODE_CODEGEN_THRESHOLD
  • MAX_IO_BUFFERS
  • RM_INITIAL_MEM
  • DISABLE_CACHED_READS

Impala shell选项 refresh_after_connect

删除了启动 Impala Shell的选项refresh_after_connect。

EXTRACT 和 DATE_PART 函数

该EXTRACT和DATE_PART功能以下列方式改变:

  • EXTRACT和DATE_PART函数的输出类型更改为BIGINT。
  • 从 TIMESTAMP 中提取毫秒部分会返回秒部分和毫秒部分。例如,EXTRACT (CAST('2006-05-12 18:27:28.123456789' AS TIMESTAMP), 'MILLISECOND')返回28123.

SHUTDOWN 命令的端口

如果您从 CDH 6.1 或更高版本升级并指定端口作为SHUTDOWN命令的一部分 ,请更改端口号参数以使用 Kudu7: RPC (KRPC) 端口在 Impala 代理之间进行通信。

客户端连接超时更改

升级后客户端连接超时的默认行为发生变化。

在 CDH 6.2 及更低版本中,如果--fe_service_threads已分配指定的最大线程数,客户端将无限期地等待以打开新会话。

升级后,服务器需要一个新的启动标志, --accepted_client_cnxn_timeout来控制对新连接请求的处理。配置的服务器线程数不足以满足工作负载。

如果--accepted_client_cnxn_timeout > 0,则在指定的超时后拒绝新的连接请求。

如果--accepted_client_cnxn_timeout=0,客户端无限期地等待连接到 Impala。这将设置升级前行为。

默认超时为 5 分钟。

Hive 和 Impala 之间的互操作性

Impala 支持 Apache Hadoop 中使用的多种文件格式。它还可以加载和查询其他 Hadoop 组件(如 Hive)生成的数据文件。从任何CDH 5.x 版本升级到CDP Private Cloud Base 7.1 后,如果使用默认在Hive 中创建RC 文件 LazyBinaryColumnarSerDe,Impala 将无法读取RC 文件。但是,您可以设置hive.default.rcfile.serdeto 的配置选项ColumnarSerDe来维护 hive 和 impala 之间的互操作性。

元数据的改进

从 CDH 升级到 CDP 后,所有 Impala 协调器默认设置use_local_catalog为按需模式,True以便 Impala 协调器从目录中提取元数据并将其缓存在本地。这减少了协调器的内存占用并自动执行缓存驱逐。

在 CDP 中,默认情况下设置catalog_topic_mode为minimal为所有协调器启用按需元数据。

重新计算统计信息

将工作负载从任何 CDH 5.x 版本迁移到CDP Private Cloud Base 7.1 后,重新计算 Impala 的统计数据。尽管 CDH 5.x 统计信息在升级后可用,但在重新计算统计信息之前,查询不会从新功能中受益。

减少过多的网络流量

由于通过 statestore 进行传播,目录元数据可能会变大并导致网络流量过多。--compact_catalog_topic引入该标志是为了通过压缩目录主题条目以减少其序列化大小来缓解此问题。这以少量 CPU 时间为代价节省了网络带宽。默认情况下启用此标志。

容量规划要考虑的因素

在将工作负载从 CDH 迁移到 CDP 公共云之前选择合适的云环境规模对于保持性能特征至关重要。在为您的环境选择 CDP 容量时,需要考虑查询工作负载中的多个因素。

  • 查询内存要求
  • CPU 利用率
  • 磁盘带宽
  • 工作集大小
  • 并发查询执行

在进入大小细节之前,了解 PC 和本地主机之间的核心硬件差异很重要:

CDH主机推荐

AWS R5D.4xlarge 实例

CPU cores

20-80

16

Memory

128GB 最低 推荐 256GB

128

Network

最低 10Gbps 推荐 40Gbps

高达 10Gbps

Ephemeral Storage

12 个 2TB 驱动器(1000MBps 连续)

2 个 300GB NVMe SSD(1100MBps 连续)

Network Storage

不适用

gp2 每卷 250 MB/s

R5D.4xlarge 实例与 CDH 推荐的 CPU、内存和带宽规格非常匹配,因此建议作为 CDP 的实例类型。但是,AWS 临时存储不能用作主数据库存储,因为它是暂时的且容量不足。这种核心差异需要不同的策略来实现良好的扫描性能。

CDP 大小和缩放

在迁移之前,必须计划扩展和并发。在公共云环境中,能够根据工作负载需求弹性地获得更好的扩展性和并发性,使系统能够以低于您计划的最大限制的成本运行。如果您将目标环境配置为将峰值工作负载作为恒定的默认配置进行配置,则当系统需求低于该水平时,您可能会出现成本超支。

在 CDP 中,T-Shirt 大小定义了单个集群的 executor 实例数量,从而确定了单个查询的内存限制和性能。相反,仓库大小参数和自动缩放决定了分配多少集群来支持并发查询执行。

尺寸

执行者数量

X-Small

2

Small

10

Medium

20

Large

40

T-Shirt 尺寸必须至少足够大,以支持单个查询的最高内存使用量。在大多数情况下,如果查询之间的工作集具有共性,则大小不需要更大,但可以提供更好的数据缓存。增加 T-Shirt 尺寸可以直接增加单用户容量,也可以增加多用户容量。这是因为来自更大集群的额外内存和资源允许处理更大的数据集,并且还可以通过共享资源来支持并发查询执行。选择太小的大小会导致数据缓存不佳、中间结果溢出或内存分页。选择太大的大小可能会由于空闲的执行程序而导致过多的 PC 运行成本。

根据现有硬件选择 T 恤尺寸时要考虑的一个警告是,在您的本地环境中的同一主机上运行的其他进程是什么。特别是 HDFS 或其他本地托管的文件系统可能会消耗大量资源。您可以为 CDP 选择较小的大小,因为这些进程将被隔离在 CDP 环境中它们自己的 pod 中。查看 CM 每进程指标以隔离 CDP 将放在执行程序实例上的 impalad 和 Impala 前端 Java 进程并在整个集群中聚合这些指标可能会有所帮助。由于元数据缓存,java 进程可能会累积大量内存使用。

并发

目标环境的大小对应于系统可以处理的峰值并发。并发是可以同时运行的查询数。

每个执行程序组可以同时运行 12 个查询,并且可以使用自动缩放功能透明地处理偶尔出现的峰值。导致添加更多执行程序组的自动缩放将查询并发性加倍到 24。通过添加更多集群来扩展仓库允许运行更多并发查询,但不会提高单用户容量或性能。这是因为来自附加集群的执行程序对该集群是私有的。并发执行的查询将被路由到不同的集群并独立执行。通过更改自动缩放参数,可以更改集群数量以匹配并发使用情况。

缓存热数据集

目前 CDH 支持计算节点上的缓存机制,用于缓存从远程文件系统读取的工作集,例如远程 HDFS 数据节点、S3、ABFS 和 ADLS。这抵消了输入/输出性能差异。

在CDP公有云中,经常访问的数据缓存在SSD上的存储层,以便后续查询可以快速检索,从而提升性能。每个执行程序最多可以有 200 GB 的缓存。因此,中等大小的缓存可以保留 200 * 20 = 4 TB 的数据。对于列格式(例如 ORC),缓存中的数据会被解压但不会被解码。如果热数据集的预期大小为 6 TB,大约需要 30 个执行器,则可以选择过度配置(选择大的)以确保完全缓存覆盖;或配置不足(选择一种介质)以降低成本,但会降低缓存命中率。

笔记

Impala 数据缓存使用基于 LIRS 的算法。

使用 WXM 规划容量

如果您在环境中部署了 WXM,则可以使用 WXM 为目标环境生成容量计划。要构建满足您的容量要求的自定义云环境,您必须分析您现有的 CDH 架构、了解您的业务需求并生成容量计划。

您应该如何调整impala 计算集群的大小(在Datahub 或CDW 服务中)可能会有所不同,因为计算节点大小(CPU 和RAM)与您当前在CDH 中使用的不同。如果您当前使用的是 20 节点的 CDH 集群,这并不一定意味着您将需要 20 节点的 Datahub 集群或 CDW 中的 20 节点的 Impala 虚拟仓库。

使用 WXM 功能生成容量计划

使用 WXM 的好处

  • 您可以在迁移数据之前探索您的集群并分析您的工作负载。您还可以确定适合云迁移的 Impala 工作负载。
  • 您还可以在将工作负载迁移到 CDP 公共云之前优化工作负载。这降低了由于工作负载欠佳而导致云成本失控的风险。
  • 您可以为要迁移的工作负载生成云友好性分数。
  • 您可以选择为目标环境自动生成容量。
  • WXM 与复制管理器一起自动执行复制计划。

使用 WXM 的先决条件

在设置 Cloudera Manager Telemetry Publisher 服务以将诊断数据发送到 Workload XM 之前,您必须确保您拥有正确版本的 Cloudera Manager 和 CDH。

要将 Workload XM 与 Cloudera Manager 管理的 CDH 集群一起使用,您必须具有以下版本:

  • 对于 CDH 5.x 集群:
    • Cloudera Manager 5.15.1 或更高版本
    • CDH 5.8 或更高版本
  • 对于 CDH 6.x 集群:
    • Cloudera Manager 6.1 或更高版本
    • CDH 6.1 或更高版本

笔记

无论您是管理 CDH 5.x 还是 CDH 6.x 集群,Workload XM 在 Cloudera Manager 6.0 上都不可用。

在确认您拥有正确版本的 Cloudera Manager 和 CDH 后,您必须配置数据编辑和防火墙。

有关配置防火墙的信息,请参阅为 Workload XM 配置防火墙。

有关在发送到 WXM 之前编辑数据的信息,请参阅诊断数据的编辑功能

自动生成容量计划的步骤

如果您的环境中部署了 Cloudera 工作负载管理器,请按照高级步骤生成容量计划并将 Impala 工作负载迁移到云。

  1. Cloudera 工作负载管理器页面上,选择一个集群来分析您的数据仓库工作负载。工作负载视图的“摘要”页面包含多个图形和选项卡,您可以查看以进行分析。使用工作负载视图功能,您可以更精细地分析工作负载。例如,您可以分析访问特定数据库或使用特定资源池的查询是如何根据 SLA 执行的。或者,您可以检查特定用户发送到集群的所有查询的执行情况。
  2. 数据仓库工作负载视图页面上,您可以通过单击定义新并从下拉菜单中选择选择推荐的视图来选择自动生成的工作负载视图 。查看用于创建工作负载视图的标准,从自动生成的工作负载视图中选择符合您要求的标准。
  3. 您可以通过单击“定义新”并从下拉菜单中选择“手动定义视图”来自定义构建要迁移的工作负载。您可以选择定义一组标准,使您能够分析一组特定的工作负载。
  4. 如果您选择自定义构建,一旦生成自定义构建工作负载,您将返回到数据仓库工作负载页面,您的工作负载将出现在列表中。使用搜索栏搜索您的工作负载,然后单击工作负载以查看工作负载详细信息。
  5. 工作负载视图的详细信息页面包含多个图形和选项卡,您可以查看以进行分析。查看工作负载并确保这是您要迁移到云的工作负载。
  6. 在您对要突增的工作负载感到满意后,单击突增到云选项并选择查看性能评级详细信息。
  7. 查看云性能评级详细信息,并通过单击启动突发到云向导调用以继续迁移到云 。
  8. Burst to Cloud 向导会引导您完成生成容量计划以及将您选择的工作负载复制到云目标的步骤。

CDH 和 CDP 之间的性能差异

评估此迁移可能带来的性能变化。如果您计划将当前 Impala 工作负载迁移到公共云,请执行性能影响分析以评估此迁移将如何影响您。

IO 性能注意事项

本地 CDH 主机通常连接大量 IO 硬件以支持 HDFS 上的大型扫描操作,可能为许多 SSD 设备和专用互连提供每秒 10 GB 的带宽。由于云实例的瞬态特性和成本结构,这种模型对于 CDP 中的主存储并不实用。

与许多 AWS 数据库产品一样,CDP 中的 HFS 使用 EBS 卷进行持久化。EBS gp2 的带宽限制为 250MB/秒/卷。此外,如果带宽超过阈值,EBS 可能会在延长的持续时间内将吞吐量限制为零。由于这些限制,在许多情况下依靠直接 IO 到 EBS 来提高性能是不切实际的。EBS 也通过共享网络硬件进行路由,并且可能由于冗余而具有额外的性能限制。

为了缓解 PC IO 带宽差异,严重依赖临时存储来缓存工作集。虽然这是从 CDH 继承的现有 Impala 行为,但转到主存储的代价要高得多,因此必须在本地缓存更多数据以保持同等性能。由于临时存储也用于中间结果的溢出,因此重要的是避免可能竞争带宽的过度溢出。

原文链接:https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/data-migration/topics/cdp_data_migration_impala_overview.html

0 人点赞