gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档Hive

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  大数据开发
  • 分类归档: "Hive"
  • ( 页面2 )
Hive 5月 18,2023

修复hive重命名分区后新分区为0的问题

hive分区重命名后,新的分区的分区大小为0 ,
例如

alter table entersv.ods_t_test partition(dt='2022-11-08') rename to partition(dt='2022-11-21')

ods_t_test 的2022-11-21分区大小为0。怎样修复

  • 使用 msck repair table 命令来修复表的元数据,让hive重新扫描分区目录并更新分区信息2。
  • 使用 analyze table 命令来重新计算分区的统计信息,包括分区大小,行数等3。

下面的示例代码:

-- 修复表的元数据
msck repair table entersv.ods_t_test;
-- 重新计算分区的统计信息
analyze table entersv.ods_t_test partition(dt) compute statistics;
作者 east
Hive 5月 16,2023

Hive 性能调优:行之有效的成功方法

您确定您的 Hive 查询正在以最佳状态执行吗?你可能会感到惊讶。 Apache Hive 是当今许多大型企业环境中使用最普遍的查询引擎,但这并不意味着它可以自动优化工作。为了充分利用引擎并实现 Hive 查询优化,调整其性能非常重要。但在深入探讨之前,让我们介绍一下 Hive 性能调优的基础知识。

什么是 Hive 性能调优? Hive 性能调优是指旨在改进和加速 Hive 环境性能的集体流程和步骤。当查询未优化时,简单语句的执行时间会更长,从而导致性能滞后和停机。

如何优化 Hive 查询?性能调优是优化 Hive 查询的关键。首先,通过分区、分桶、压缩等调整数据。改进 Hive 查询的执行是另一种 Hive 查询优化技术。您可以通过使用 Tez、避免偏斜和增加并行执行来做到这一点。最后,抽样和单元测试可以帮助您首先查看(并解决)较小规模的问题,从而帮助优化查询。

虽然我们现在了解它的重要性,但调整 Hive 环境以获得最佳性能可能会很棘手。知道如何分析 Hive 查询性能是成功的必要条件。但是 Hive 性能调优最佳实践是什么?开发人员和运维团队可以做些什么来确保最佳的 Hive 查询性能?

如果您有这些问题,这篇文章适合您。继续阅读以了解三个关键类别的有效性能调整最佳实践。无论您是调整时间还是有效利用资源,这些技巧都适用。

想要更多关于提高 Hive 查询性能的技巧?获取我们的电子书:通过真正了解查询的执行方式来提高性能。

如何提高我的 Hive 性能?大多数用户和开发人员都是从调整他们的数据开始的。使用分区、分桶、压缩、避免小文件等都是很棒的 Hive 查询优化技术。

在 Pepperdata,我们处理有关 Hive 查询的各种问题,其中主要是提高 Hive 性能。在本节中,我们将深入探讨如何尽可能少地操纵数据以获得成功。

分区

分区是一种常见的 Hive 查询调优策略,它根据键将表数据放置在表位置的单独子目录中。分区键提供了一个机会来定位表数据的一个子集,而不是扫描您的操作不需要的数据。

无论存在多少数据,当你有分区时,Hive 只读取特定数量的数据来生成结果。这极大地提高了性能,即使您执行复杂的分析查询也是如此。这是因为 Hive 只需从子句中指定的几个分区读取数据。它已经在启动查询执行之前过滤掉所需的数据。

分桶

Bucketing 类似于分区,是一种 Hive 查询调优策略,允许您以数据子集为目标。在这种情况下,专门通过扫描更少的数据来提高连接性能。由于需要输入、输出或存储在内存中的数据更少,因此这改进了跨时间和效率向量的查询。

Hive 中的分桶需要将表数据集分解为更小的部分。因此,数据更容易处理。使用分桶,您可以连接相似的数据类型并将它们写入单个文件。此处的此步骤大大提高了连接表或读取数据时的性能。这就是带分区的分桶在 Hive 用户中如此受欢迎的原因。

压缩

压缩被列为最好的 Hive 查询优化技术之一。大数据压缩减少了处理大型数据集所需的带宽和存储量。此外,压缩从您的系统中消除了冗余和不重要的部分。

查询操作的每一位数据都有与从磁盘获取数据、进入内存、内存不足以及返回磁盘或另一个最终目标相关的 I/O。压缩最大限度地减少了遍历每个步骤的数据量,并减少了在查询状态中移动所花费的时间。

避免小文件

从查询中消除小文件操作是一种有效的 Hive 性能调优策略。这样做可以促进健康的 Hive 生态系统。每个文件都由 Hive Metastore 跟踪并存储在 HDFS 中,每个文件都经过性能优化以处理较大的文件而不是许多较小的文件。查询性能受限于整个系统和平台的健康状况。

反规范化数据

如果您想消除在运行时从多个表连接数据的需要,Hive 专家建议将数据反规范化作为一种​​首选的 Hive 性能调整方法。通过向一个或多个表添加冗余数据来执行反规范化。这可以帮助我们避免在关系数据库中进行代价高昂的连接。

虽然规范化很有用,但除了从操作中完全消除不需要的数据之外,避免连接是您可以对给定查询做出的最有影响力的更改之一。

表设计

Hive 表不同于大多数数据专业人员所习惯的传统数据库表。它们本质上是子目录。增加分区数量以促进高效读取和并行性是针对这种情况的最有效的 Hive 优化技术之一。然而,这个解决方案并不过分。分区过多会降低 Metastore 和 Hive 服务器的性能。跟踪和基线性能是了解分区数量何时从有益变为有害的最佳方式。

简单连接通常更好

有很多策略旨在提高连接的效率。 SMB 连接、映射连接、流表——每一个都旨在消除连接的复杂性或阶段。嵌套连接的执行成本也很高。由于连接的成本很高,因此正在做很多工作来提高连接性能。

输入文件格式选择

输入格式选择在 Hive 查询调优中很重要。例如,在处理生成大量数据的大规模生产系统时,JSON 不是理想的格式选择。这是因为 JSON 和类似的格式类型实际上占用了大量空间以及一些解析开销。

Apache Hive 利用 RCFile 和 ORC 等列式输入格式来解决此类问题。列格式使您能够单独访问每一列,从而减少分析查询中的读取操作。这导致更快的查询性能。

一开始就正确编写 Hive 查询至关重要。 Hive 查询的执行主要取决于其用户编写的代码。但并不是所有的代码都写得完美。事实上,他们需要不断调整和改变。 Hive 查询调优不仅仅与数据有关;提高执行力对于 Hive 的成功也至关重要。

使用 Tez(或更好的东西)

Apache Tez 是一个构建在 Apache Hadoop 2.0 (Yarn) 之上的框架,旨在加速 Hive 的查询执行。 Tez 帮助用户启动和持有一个或多个容器,这些容器可以重复使用以执行多个查询。它还可以帮助用户避免多次磁盘 IO 并减少启动 JVM 的开销。

执行引擎显然是开发人员关注的焦点,因为我们看到 Tez、LLAP 和 Hive on Spark 等框架希望以无需低级调优即可提高性能的方式添加到核心 Hive。理解和利用手头任务的最佳执行引擎应该是 Hive 性能调整的强制性考虑因素。

避免歪斜

Hive 查询部署一组分布式任务。整体查询仅与最慢的任务一样快。确保在任务之间均匀分配工作是一种有效的 Hive 性能调整方法。这是因为在某些任务中,它通过处理比必要的更多数据来防止查询本身变慢。

增加并行执行

默认情况下,Hive 只会在给定时间执行一个阶段。然而,一个特定的工作可能包含多个阶段,这些阶段可能并不完全相互依赖。并行执行这些非相互依赖的阶段,而不是在一个实例中运行单个阶段,可以大大减少整个作业的运行时间。

并行执行是最好的 Hive 优化技术之一,但只有在不需要顺序操作时才应利用它。并行度的数量取决于资源的可用性和数据的结构。这是另一个领域,如果没有良好的性能解决方案,“正确”的数字可能很难得出。

抽样/单元测试是一个很大的帮助

抽样和单元测试就是在你去操作一百万行之前获取你的数据的一个子集并运行一千行。这种特定的 Hive 查询调优最佳实践可帮助您了解您的代码如何工作,以便在您将大数据集投入其中之前获得所需的结果。这并非万无一失,但在小范围内解决失败或奇怪的结果比在规模上这样做更快、更有效。

将错误的查询拒之门外

仔细检查查询性能并防止低效查询进入生产环境听起来很简单,但是这个 Hive 性能调整步骤经常被跳过,直到出现问题并且为时已晚。在提升到更高级别的环境之前,应自动测量每个查询的性能和效率以满足最低可接受水平。

根据我们的 2021 年大数据调查报告,29% 的企业表示 Hive 应用程序和工作负载消耗了他们的大部分资源。 Hive 是当今企业运营的重要组成部分。这就是为什么在保持资源消耗和相关成本可控的同时微调 Hive 查询以实现最佳性能至关重要的原因。

作者 east
Hive 5月 7,2023

Hive 查询优化的 Hive 性能调优方法

您确定您的 Hive 查询正在以最佳状态执行吗?你可能会感到惊讶。 Apache Hive 是当今许多大型企业环境中使用最普遍的查询引擎,但这并不意味着它可以自动优化工作。为了充分利用引擎并实现 Hive 查询优化,调整其性能非常重要。但在深入探讨之前,让我们介绍一下 Hive 性能调优的基础知识。

什么是 Hive 性能调优? Hive 性能调优是指旨在改进和加速 Hive 环境性能的集体流程和步骤。当查询未优化时,简单语句的执行时间会更长,从而导致性能滞后和停机。

如何优化 Hive 查询?性能调优是优化 Hive 查询的关键。首先,通过分区、分桶、压缩等调整数据。改进 Hive 查询的执行是另一种 Hive 查询优化技术。您可以通过使用 Tez、避免偏斜和增加并行执行来做到这一点。最后,抽样和单元测试可以帮助您首先查看(并解决)较小规模的问题,从而帮助优化查询。

虽然我们现在了解它的重要性,但调整 Hive 环境以获得最佳性能可能会很棘手。知道如何分析 Hive 查询性能是成功的必要条件。但是 Hive 性能调优最佳实践是什么?开发人员和运维团队可以做些什么来确保最佳的 Hive 查询性能?

如果您有这些问题,这篇文章适合您。继续阅读以了解三个关键类别的有效性能调整最佳实践。无论您是调整时间还是有效利用资源,这些技巧都适用。

想要更多关于提高 Hive 查询性能的技巧?获取我们的电子书:通过真正了解查询的执行方式来提高性能。

如何提高我的 Hive 性能?大多数用户和开发人员都是从调整他们的数据开始的。使用分区、分桶、压缩、避免小文件等都是很棒的 Hive 查询优化技术。

在 Pepperdata,我们处理有关 Hive 查询的各种问题,其中主要是提高 Hive 性能。在本节中,我们将深入探讨如何尽可能少地操纵数据以获得成功。

分区

分区是一种常见的 Hive 查询调优策略,它根据键将表数据放置在表位置的单独子目录中。分区键提供了一个机会来定位表数据的一个子集,而不是扫描您的操作不需要的数据。

无论存在多少数据,当你有分区时,Hive 只读取特定数量的数据来生成结果。这极大地提高了性能,即使您执行复杂的分析查询也是如此。这是因为 Hive 只需从子句中指定的几个分区读取数据。它已经在启动查询执行之前过滤掉所需的数据。

分桶

Bucketing 类似于分区,是一种 Hive 查询调优策略,允许您以数据子集为目标。在这种情况下,专门通过扫描更少的数据来提高连接性能。由于需要输入、输出或存储在内存中的数据更少,因此这改进了跨时间和效率向量的查询。

Hive 中的分桶需要将表数据集分解为更小的部分。因此,数据更容易处理。使用分桶,您可以连接相似的数据类型并将它们写入单个文件。此处的此步骤大大提高了连接表或读取数据时的性能。这就是带分区的分桶在 Hive 用户中如此受欢迎的原因。

压缩

压缩被列为最好的 Hive 查询优化技术之一。大数据压缩减少了处理大型数据集所需的带宽和存储量。此外,压缩从您的系统中消除了冗余和不重要的部分。

查询操作的每一位数据都有与从磁盘获取数据、进入内存、内存不足以及返回磁盘或另一个最终目标相关的 I/O。压缩最大限度地减少了遍历每个步骤的数据量,并减少了在查询状态中移动所花费的时间。

避免小文件

从查询中消除小文件操作是一种有效的 Hive 性能调优策略。这样做可以促进健康的 Hive 生态系统。每个文件都由 Hive Metastore 跟踪并存储在 HDFS 中,每个文件都经过性能优化以处理较大的文件而不是许多较小的文件。查询性能受限于整个系统和平台的健康状况。

反规范化数据

如果您想消除在运行时从多个表连接数据的需要,Hive 专家建议将数据反规范化作为一种​​首选的 Hive 性能调整方法。通过向一个或多个表添加冗余数据来执行反规范化。这可以帮助我们避免在关系数据库中进行代价高昂的连接。

虽然规范化很有用,但除了从操作中完全消除不需要的数据之外,避免连接是您可以对给定查询做出的最有影响力的更改之一。

表设计

Hive 表不同于大多数数据专业人员所习惯的传统数据库表。它们本质上是子目录。增加分区数量以促进高效读取和并行性是针对这种情况的最有效的 Hive 优化技术之一。然而,这个解决方案并不过分。分区过多会降低 Metastore 和 Hive 服务器的性能。跟踪和基线性能是了解分区数量何时从有益变为有害的最佳方式。

简单连接通常更好

有很多策略旨在提高连接的效率。 SMB 连接、映射连接、流表——每一个都旨在消除连接的复杂性或阶段。嵌套连接的执行成本也很高。由于连接的成本很高,因此正在做很多工作来提高连接性能。

输入文件格式选择

输入格式选择在 Hive 查询调优中很重要。例如,在处理生成大量数据的大规模生产系统时,JSON 不是理想的格式选择。这是因为 JSON 和类似的格式类型实际上占用了大量空间以及一些解析开销。

Apache Hive 利用 RCFile 和 ORC 等列式输入格式来解决此类问题。列格式使您能够单独访问每一列,从而减少分析查询中的读取操作。这导致更快的查询性能。

一开始就正确编写 Hive 查询至关重要。 Hive 查询的执行主要取决于其用户编写的代码。但并不是所有的代码都写得完美。事实上,他们需要不断调整和改变。 Hive 查询调优不仅仅与数据有关;提高执行力对于 Hive 的成功也至关重要。

使用 Tez(或更好的东西)

Apache Tez 是一个构建在 Apache Hadoop 2.0 (Yarn) 之上的框架,旨在加速 Hive 的查询执行。 Tez 帮助用户启动和持有一个或多个容器,这些容器可以重复使用以执行多个查询。它还可以帮助用户避免多次磁盘 IO 并减少启动 JVM 的开销。

执行引擎显然是开发人员关注的焦点,因为我们看到 Tez、LLAP 和 Hive on Spark 等框架希望以无需低级调优即可提高性能的方式添加到核心 Hive。理解和利用手头任务的最佳执行引擎应该是 Hive 性能调整的强制性考虑因素。

避免歪斜

Hive 查询部署一组分布式任务。整体查询仅与最慢的任务一样快。确保在任务之间均匀分配工作是一种有效的 Hive 性能调整方法。这是因为在某些任务中,它通过处理比必要的更多数据来防止查询本身变慢。

增加并行执行

默认情况下,Hive 只会在给定时间执行一个阶段。然而,一个特定的工作可能包含多个阶段,这些阶段可能并不完全相互依赖。并行执行这些非相互依赖的阶段,而不是在一个实例中运行单个阶段,可以大大减少整个作业的运行时间。

并行执行是最好的 Hive 优化技术之一,但只有在不需要顺序操作时才应利用它。并行度的数量取决于资源的可用性和数据的结构。这是另一个领域,如果没有良好的性能解决方案,“正确”的数字可能很难得出。

抽样/单元测试是一个很大的帮助

抽样和单元测试就是在你去操作一百万行之前获取你的数据的一个子集并运行一千行。这种特定的 Hive 查询调优最佳实践可帮助您了解您的代码如何工作,以便在您将大数据集投入其中之前获得所需的结果。这并非万无一失,但在小范围内解决失败或奇怪的结果比在规模上这样做更快、更有效。

将错误的查询拒之门外

仔细检查查询性能并防止低效查询进入生产环境听起来很简单,但是这个 Hive 性能调整步骤经常被跳过,直到出现问题并且为时已晚。在提升到更高级别的环境之前,应自动测量每个查询的性能和效率以满足最低可接受水平。

根据我们的 2021 年大数据调查报告,29% 的企业表示 Hive 应用程序和工作负载消耗了他们的大部分资源。 Hive 是当今企业运营的重要组成部分。这就是为什么在保持资源消耗和相关成本可控的同时微调 Hive 查询以实现最佳性能至关重要的原因。

作者 east
Hive 5月 6,2023

Hive 查询介绍——它们是什么以及如何有效地编写它们

在大数据领域,Hive 是一个大问题。精心编写和精心设计的 Hive 查询可加速从数据集中检索数据。 Hive 比 SQL 好得多,因为前者可以更有效地处理复杂数据。此外,Hive 查询有助于降低处理成本。这就是为什么为大数据分析用户和开发人员正确编写和优化 Hive 查询至关重要。

与其他可用的数据处理平台相比,完全优化的数据查询以更快的速度为您提供所需的数据。高效有效的 Hive 查询可以减少 50% 的执行时间。当您的数据处理框架运行得更快时,好处就会增加。

回答这个问题首先要准确理解 Hive 到底是什么。 Apache Hive 是一个在 Hadoop 之上开发的开源数据仓库平台,用于执行数据分析和分布式处理。 Facebook 创建了 Apache Hive 以减少编写 Java MapReduce 平台所需的工作。

大数据流程需要快速准确地处理大量不同的数据,以提供高度可行的见解。如果手动完成,这是一项不可能完成的任务。 Hive 的存在是为了简化大数据处理,并通过快速 Hive 查询将原始数据转化为可操作的内容。

使用 Hive 进行查询和数据分析比使用 MapReduce 框架更容易、更快,即使在处理大型数据集时也是如此。为简单起见,我们将重点关注 MapReduce 作为主要执行引擎,了解 Hive 还可以利用 Tez、Tez LLAP 和 Spark。 MapReduce 是一个低级平台,需要多个自定义程序才能运行。开发人员必须熟悉 Java,它已经是一个复杂的平台,才能充分利用 MapReduce。相比之下,您无需成为 Java 专家即可使用 Hive。

通常,Hive 查询只是对信息的请求。当在数据科学和计算机编程的上下文中使用时,Hive 查询是同一回事。不同之处在于信息直接来自数据库。

Hive 查询不仅仅是随机信息请求。您要检索的信息必须具体。因此,您可以使用一组预定义代码和数据库原生的编程语言来编写和优化 Hive 查询。一旦数据库收到并理解该指令,它就会收集查询中指定的所有信息并发布您请求的数据。

要真正从您的查询中获得最大价值,它们必须写得很好并且经过专业调整。但在此之前,让我们深入了解您需要了解的关于它们的其他信息。

用于创建数据库管理任务和流程的标准编程语言称为结构化查询语言 (SQL)。但是,SQL 并不是使用 Hive 执行查询和数据分析的唯一编程语言。 AQL、Datalog 和 DMX 也是流行的选择。

Hive 查询语言或 HiveQL 是一种类似于 SQL 的声明性语言。 HiveQL 所做的是将这些查询转换为 MapReduce 程序。它还使开发人员能够通过将复杂的 MapReduce 程序替换为 Hive 查询来处理和分析结构化和半结构化数据。

任何熟悉 SQL 命令的开发人员都会发现使用 Hive 查询语言创建请求很容易。

分区、表和桶的创建

您可以在 Hive 中创建查询,以将存储在 Hadoop 文件中的大型数据集分类到表、分区和存储桶中。在每个模型中,您根据分区或列键对相同类型的数据进行分组。可以有一个或多个分区键来帮助查明特定分区。分区数据集加速了对数据切片的查询。

ETL 功能

在将数据加载到其目标数据存储之前,您需要使用 ETL(提取、转换和加载)功能清理、准备和转换该数据。 Hive 查询可以做到这一点。数据通常从源中提取,然后存储在通用或兼容的存储中,例如 Azure Data Lake Storage 或 Azure Storage blob。然后一系列查询转换数据。在此之后,数据在 Apache Hive 中进行组织,然后再批量加载到其目标数据仓库中。

创建用于合并不同数据表的连接

Hive 查询可以包括连接,这是一种用于通过使用每个表共享的值来组合来自两个或多个表的特定字段或记录的功能。联接在速度方面以指数方式提高 Hive 查询的效率,具体取决于查询的编写方式。例如,当它们首先对最小表进行流式处理,最后对最大表进行流式传输时,带有连接子句的查询执行得更快,而不是相反。

有四种类型的连接,对每一种类型的深入了解将帮助用户选择正确的连接来使用——并编写正确的查询。这四种类型的连接是:

按查询排序

HiveQL 中的 ORDER BY 语法使用“SELECT”语句来帮助对数据进行排序。此语法遍历 Hive 表上的列,以按照“Order by”子句中的说明查找和筛选特定列值。查询只会选取 Order by 子句中提到的列名,并以升序或降序显示匹配的列值。

按查询分组

当 Hive 查询带有“GROUP BY”时,它会探索 Hive 表上的列并收集 group by 子句中提到的所有列值。查询将仅查看名称定义为“group by”子句的列,并将通过对特定和匹配的列值进行分组来显示结果。

按查询排序

当 Hive 查询带有“排序依据”子句时,它会遍历查询定义的名称下的列。执行后,查询会探索 Hive 表的列以对输出进行排序。如果您使用“DESC”指令按查询排序,您将按降序排序和显示结果。带有“ASC”的查询将执行升序排序并以类似方式显示结果。

按查询聚类

带有 CLUSTER BY 子句或命令的 Hive 查询通常部署在查询中以同时执行 DISTRIBUTE BY 和 SORT BY 的功能。此特定查询可确保对所有输出数据文件进行绝对排序或排序。

分配方式

DISTRIBUTE BY 指令确定输出如何在 MapReduce 作业中的缩减程序之间分配。 DISTRIBUTE BY 的功能类似于 GROUP BY 子句,因为它管理如何将数据行加载到 reducer 中进行处理。

查看另一篇博文,您将在其中了解如何通过 Hive 查询优化来充分利用 Hive 查询。

以下是您在管理 Hive 查询时会遇到的常见命令的简要介绍。

Hive 数据定义语言 (DDL) 命令

Apache Hive 备忘单是一个包含所有 Apache Hive 语法和函数的五部分摘要。为开发人员和大数据工程师提供参考或指导。

Apache Hive 备忘单分为以下部分:

Hive 查询会消耗资源。在大数据的世界里,资源就是金钱,资源的低效利用可能会阻碍任何组织。因此,Hive 查询优化对于将资源消耗保持在最低水平、运营成本可控以及整体性能处于最佳水平至关重要。

以下是优化 Hive 查询的一些有效方法:

针对我们所有的查询优化您的方法至关重要。 Pepperdata 为企业提供大数据优化解决方案,旨在为他们的查询、Query Spotlight 以及他们的所有堆栈、应用程序、流程等提供全面的可见性和可观察性。用户享受实时性能报告和数据驱动的建议,以优化其大数据基础架构及其所有组件的性能,同时显着降低运营成本。

作者 east
Hive 4月 2,2023

如何把cdh中hive存储在表数据转换为pgsql

要把cdh中hive存储在表数据转换为pgsql,您可能需要以下步骤:

  1. 在cdh集群上配置一个外部账户,以便访问CDP云存储2。
  2. 在CDP Data Lake集群上创建一个Hive数据仓库,并设置相应的权限和配置1。
  3. 在CDH集群上使用Replication Manager服务创建一个Hive复制策略,选择要复制的数据库和表,并指定目标CDP Data Lake集群和存储位置2。
  4. 运行复制策略,并检查复制结果和日志2。
  5. 在CDP Data Lake集群上使用Beeline或其他客户端连接到Hive服务,并验证数据是否正确导入2。
  6. 在CDP Data Lake集群上使用以下命令将Hive表导出为CSV文件3:
DROP TABLE IF EXISTS TestHiveTableCSV;
CREATE TABLE TestHiveTableCSV ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' AS SELECT * FROM TestHiveTable;
  1. 在CDP Data Lake集群上使用以下命令将CSV文件复制到本地目录:
hadoop fs -copyToLocal /user/hive/warehouse/testhivetablecsv /tmp
  1. 在本地目录上使用以下命令将CSV文件导入到pgsql数据库:
psql -d testdb -c "COPY testpgtable FROM '/tmp/testhivetablecsv' WITH (FORMAT csv);"
作者 east
Hive 1月 24,2023

数仓开发常用hive命令

在做数仓开发或指标开发时,是一个系统工程,要处理的问题非常多,经常使用到下面这些hive命令:

内部表转外部表

alter table ${tablename} set tblproperties (‘EXTERNAL’=True’);

外部表转内部表

alter table ${tablename} set tblproperties (‘EXTERNAL’=False’);

显示分区

show partitions ${tablename};

创建分区

alter table ${tablename} add if not exists partition(dt=’2022-11-08′)

删除分区

alter table ${tablename} drop partition(dt=’2022-11-21′)

修改分区

alter table ${tablename} partition(dt=’2022-11-08′) rename to partition(dt=’2022-11-21′)

获取table详细描述信息、存储格式等

desc formatted ${tablename}

修改hive表路径

alter table ${tablename} set location ‘${warehouse.dir}’

hive加载本地数据到分区表

load data local inpath ‘/tmp/test.txt’ into table ${tablename} partition (dt=’2022-11-08′);

加载本地目录的数据到分区表

load data inpath ‘/tmp’  into table ${tablename}  partition (dt=’2022-11-08′);

排他锁解锁

set hive.support.concurrency=true;  

set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;

设置session具有Admin权限

set role admin;

授予所有权限给某个用户

grant all on ${dbName} to user {userName};

查看指定用户在所有库下面的权限

show grant user {userName};

查看指定用户在某个库的权限

show grant user {userName} on database {dbName};

 授予某个库的权限给某个用户

grant select on database {dbName} to user {userName};

grant insert on database {dbName} to user {userName};

grant update on database {dbName} to user {userName};

grant delete on database {dbName} to user {userName};

Hive赋予用户某表权限

grant create on database {dbName} to user {userName};

grant select on table 库名.表名 to user 用户名 ;

grant insert on table {dbName}.tableName to user {userName};

grant update on table {dbName}.tableName to user {userName};

grant delete on table {dbName}.tableName to user {userName};

作者 east
Hive, Spark 1月 19,2023

Spark SQL或Hive开发调试小技巧

  • 在本地开发机装本地模拟环境,或者能远程调试,可以参考Spark如何在生产环境调试
  • 输出dataframe日志,最好有一个开关来控制,正式上线时,把开关关了来提升速度
if (isDebug) {
dataframeDF.show(10)
}
  • dataframe的输出,有时看得不是很清楚,可以生成临时表来记录中间过程,方便对中间过程进行查看 insertHive(resultDF, “dataframe_temp”)
  • 如果是运行的数据比较大,调试起来要等,可以对dataframe进行限定条数或筛选 dataframe.limit(1000) dataframe.filter(” id = ‘ewgwgs’ “)
  • 对复杂的sql,一步到位写起来爽,出问题了不知是哪一步出问题,可以分解出几个简单sql,每一步都有输出,对照结果方便找出问题。
  • 对复杂计算的,写的代码觉得似是而非,可以先整理一个样例,手动写计算过程,然后用代码对照这些过程来一步步实现。

作者 east
Hive 11月 3,2022

解决CDH 6.3.2 Hue访问Hive自定义用户密码验证

在前面文章介绍了
CDH 6.3.2 Hive自定义用户名密码验证 ,如果hue配置不做更改的话,在hue中看不到hive的数据库和执行不了命令,hue会报“thrift TSocket read 0 bytes” 、“
 Bad status: 3 (Error validating the login) (code THRIFTTRANSPORT) ”等错误。

解决方法:

(1)修改hue的python代码

cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/beeswax/src/beeswax/server
vi hive_server2_lib.py
增加红框中的’CUSTOM’

(2)修改hue的配置
在hue的配置页面,搜索”hue_safety_valve” ,找到hue_safety_valve.ini
添加下面代码:(
auth_username 是在hive的hive-site.xml中配置的,不同的是hive-site的
auth_password 是工具处理后,hue这里的配置需要处理前的原始密码)

[desktop]

auth_username=hdfs
auth_password=未加密前的密码



然后重启hue

作者 east
Hive 11月 3,2022

CDH 6.3.2 Hive自定义用户名密码验证

为了增强hive的安全性,可以自定义用户名密码验证。

首先写成相应的工具类

import javax.security.sasl.AuthenticationException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;
import org.slf4j.Logger;
public class CustomPasswdAuthenticator implements org.apache.hive.service.auth.PasswdAuthenticationProvider{
    private Logger LOG = org.slf4j.LoggerFactory.getLogger(CustomPasswdAuthenticator.class);
    private static final String HIVE_JDBC_PASSWD_AUTH_PREFIX="hive.jdbc_passwd.auth.%s";
    private Configuration conf=null;
    @Override
    public void Authenticate(String userName, String passwd)  
              throws AuthenticationException {  
            LOG.info("user: "+userName+" try login.");  
            String passwdConf = getConf().get(String.format(HIVE_JDBC_PASSWD_AUTH_PREFIX, userName));  
            if(passwdConf==null){  
              String message = "user's ACL configration is not found. user:"+userName;  
              LOG.info(message);  
              throw new AuthenticationException(message);  
            }   
            if(!passwd.equals(passwdConf)){  
              String message = "user name and password is mismatch. user:"+userName;  
              throw new AuthenticationException(message);  
            }  
          }  
          public Configuration getConf() {  
            if(conf==null){  
              this.conf=new Configuration(new HiveConf());  
            }  
            return conf;  
          }  
          public void setConf(Configuration conf) {  
            this.conf=conf;  
          }
}

把这个工具类打包成jar包放在hive根目录的lib目录下,
/opt/cloudera/parcels/CDH/lib/hive/lib/hiveAuth.jar


HDFS修改core-site.xml配置

搜索 core-site.xml

core-site.xml 的群集范围高级配置代码段(安全阀)

<property>   
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value> </property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>





Hive修改hive-site.xml配置

<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
</property>
<property>
<name>hive.security.authorization.task.factory</name>
<value>org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl</value>
</property>
<property>
<name>hive.users.in.admin.role</name>
<value>hdfs</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>
</property>
<property>
<name>hive.server2.custom.authentication.class</name>
<value>org.apache.hadoop.hive.contrib.auth.CustomPasswdAuthenticator </value>
</property>

<property>
<name>hive.jdbc_passwd.auth.hdfs</name>
<value>2ad4fed18d94500baa7dcf70fd7b1ecf</value>
</property>

重启hadoop和hive

作者 east
Hive 8月 15,2022

用Sqoop 从Hive导入到mysql发生java.lang.NumberFormatException异常

用CDH自带的sqoop,把hive的数据导入到sqoop,发生java.lang.NumberFormatException异常

在Yarn查找到详细日志如下:

java.lang.NumberFormatException
	at java.math.BigDecimal.<init>(BigDecimal.java:494)
	at java.math.BigDecimal.<init>(BigDecimal.java:383)
	at java.math.BigDecimal.<init>(BigDecimal.java:806)
	at org.apache.sqoop.mapreduce.hcat.SqoopHCatExportHelper.convertStringTypes(SqoopHCatExportHelper.java:271)
	at org.apache.sqoop.mapreduce.hcat.SqoopHCatExportHelper.convertToSqoop(SqoopHCatExportHelper.java:211)
	at org.apache.sqoop.mapreduce.hcat.SqoopHCatExportHelper.convertToSqoopRecord(SqoopHCatExportHelper.java:134)
	at org.apache.sqoop.mapreduce.hcat.SqoopHCatExportMapper.map(SqoopHCatExportMapper.java:56)
	at org.apache.sqoop.mapreduce.hcat.SqoopHCatExportMapper.map(SqoopHCatExportMapper.java:35)
	at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
	at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:799)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
	at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875)
	at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)

想到可能是定义的mysql表结构,Decimal类型转化出问题。有可能是decimal没有定义精度,尝试先改为string类型,再用sqoop导入hive到mysql中,一切正常,在mysql也顺利看到数据了。

作者 east
Hive 8月 10,2022

Oozie重复执行和Container exited with a non-zero exit code 143

写了1个比较复杂的spark任务,用shell脚本来执行。用shell脚本直接执行时一点问题都没有。但用hue配置了Oozie任务后,经常执行不到一半就中断,看到又重复执行,但没多久就中止了。

查了很久原因,后来在yarn的Oozie执行日志找到下面这个

[2022-08-04 17:05:36.981]Container killed on request. Exit code is 143
[2022-08-04 17:05:36.998]Container exited with a non-zero exit code 143. 

通过各种相关关键字在网上找原因和解决方案,后来在差不多放弃时,看到一个留言:

通过将部署模式从客户端更改为群集解决了此问题 。 我正在从oozie应用程序触发spark作业。因此,在客户端模式下,驱动程序将在oozie JVM上启动。为了避免这种情况,我将模式设置为集群。

进行修改尝试,果然顺利执行成功:

spark-submit –master yarn –deploy-mode cluster –class com.xxx.Test –jars hdfs://cdh1:8020/data/apps/jars/fastjson-1.2.51.jar,hdfs://cdh1:8020/data/apps/jars/hive-jdbc-2.1.1-cdh6.3.2-standalone.jar –conf spark.yarn.maxAppAttempts=0 –driver-memory 2g –driver-cores 1 –executor-memory 3200m –executor-cores 3 –num-executors 4 hdfs://cdh1:8020/data/apps/test.jar

作者 east
Hive 8月 9,2022

sqoop导入mysql带json字段显示不全或乱码

原来是在hive的建表结构如下:

CREATE external TABLE IF NOT EXISTS ods_test_delta(
 id string COMMENT "", 
 create_date string COMMENT "创建时间",
 jsonValue string COMMENT "带json的字段",
 update_date string COMMENT "更新时间",
 del_flag string COMMENT "删除标志"
) COMMENT "测试表"
partitioned by (dt string)
row format delimited
fields terminated by '\u0001'
lines terminated by '\n'
stored as textfile
LOCATION '/data/warehouse/warehouse/ods/ods_test_delta/';

在做ods抽取数据到dwd层时,发现带json的字段显示不全,怀疑是fields terminated影响了。后来想到的一个方法,不预先创建hive的表结构,直接用sqoop导入,发现没有显示不全或乱码。

进入hive的命令行,输入

show create table ods_test_delta
CREATE external TABLE IF NOT EXISTS ods_test_delta(
 id string COMMENT "", 
 create_date string COMMENT "创建时间",
 jsonValue string COMMENT "带json的字段",
 update_date string COMMENT "更新时间",
 del_flag string COMMENT "删除标志"
) COMMENT "测试表"
partitioned by (dt string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ( 
  'field.delim'='', 
  'line.delim'='\n', 
  'serialization.format'='')
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/data/warehouse/warehouse/ods/ods_test_delta/';

用上面的表结构进行创建hive的表结构,经测试没有json显示不全的问题。

作者 east

上一 1 2 3 4 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.