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

分类归档Hive

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

  • 首页   /  大数据开发
  • 分类归档: "Hive"
  • ( 页面3 )
Hive 7月 20,2022

Hive批量删除表的工具

在建设数仓时,批量创建了很多表,发现创建错了,想批量删除,一个个删除觉得太麻烦,想批量删除。

可以利用hive打印出所有表名,用shell来搜索关键字,并用shell的管道技术来输出。

#/bin/sh
db_name=$1
#用于筛选出待删除表名的关键字
key_word=$2
hive -e "SHOW TABLES IN ${db_name};"|grep "${key_word}"|xargs -I{} echo drop table ${db_name}.{}\;>>batch_drop.log

然后打开batch_drop.log,就可以批量删除table的命令,复制到hive的shell命令界面中执行就可以。

作者 east
Hive 7月 14,2022

Hive增加字段casecade报“Error while compiling statement: FAILED: NullPointerException null”

最近在使用hive做数仓开发遇到各种坑,使用casecade为了刷新旧分区数据(
cascade的中文翻译为“级联”,也就是不仅变更新分区的表结构(metadata),同时也变更旧分区的表结构 )

例如用下面的语句

ALTER TABLE plaintiff_info ADD COLUMNS(test3 STRING ) CASCADE

就遇到下面的错误:Error while compiling statement: FAILED: NullPointerException null

因为之前这样增加字段并刷新历史数据成功过,怀疑过字段为空等,各种怀疑和尝试,最后发现之前成功的是手动创建分区表,失败的是非分区表。 非分区表再添加字段时不能加CASCADE 。

分区表,指创建时有

PARTITIONED BY (
dt string)

或者使用spark SQL创建带有 partitionBy(“year”)

作者 east
Hive, 数据挖掘 7月 1,2022

Datart连接Hive需要的jar包

最近在做数仓开发,把结果输入到datart这个bi工具,刚开始用datart来连接mysql,为了减少层次,想直接连接hive。发现是需要配置jdbc驱动的。

大数据集群用的是CDH6.3.2,需要的jar包跟网上不同。刚开始用hive-jdbc-2.1.1-cdh6.3.2-standalone.jar,发现冲突了。后来从用下面这些包解决了依赖问题。

不过用最新的 datart-1.0.0-beta.3 ,发现存在问题:
无法查询sql 。报错如下:

Request failed with status code 400

image

github官方论坛提示: 该问题已经修复,等beta.4版本发布后升级即可

作者 east
Hadoop, Hive 6月 24,2022

idea远程连接hadoop、hive操作权限不够问题解决

使用idea远程操作hive,进行写数据时提示权限不够:

Permission denied: user=test, access=WRITE, inode=”/data/warehouse/db1/dws/dws_test1″:hdfs:supergroup:drwxr-xr-x

要解决这类问题,最方便方法是hdfs设置HADOOP_USER_NAME,这样远程访问就用指定的名来访问。( 如果是CDH安装的,超级用户hdfs )有几类操作方法:

方法一
打开要设置类文件的Configurations

第二步name中写自己的用户名称就行

再重新运行java文件就可以了

方法二
在java文件中进行设置
FileSystem fs= FileSystem.get(new URI(“hdfs://cdh01:9000”),conf,“hdfs”);

方法三

设置windows环境变量

作者 east
Hive, Spark 5月 27,2022

Idea用Spark SQL远程访问CDH6.3.2的hive

win10的开发环境,想在idea用Spark SQL来访问CDH6.3.2服务器的hive。刚开始用pom配置原生的spark等jar包。发现访问有问题,各种折腾还是没解决。

看到网上说要用cdh的包。就把相关的包替换成cdh的包。没想到用cdh的包各种缺少依赖包,折腾几个小时还没解决。

后来想到一个简单暴力的办法,把cdh集群的的jar包都下载下来,然后idea添加这个文件夹为依赖。

果然解决缺少依赖包的问题,不用1个个去排查添加了。不过新问题随之而来。又提示ANTLR Tool version 4.5 used for code generation does not match the current runtime version 4.7ANTLR

按网上教程处理未果,想到会不会是CDH的jar包版本重复导致的,一看果然是这样,先把antlr4-runtime-4.5.1-1.jar和antlr4-runtime-4.5.jar排除掉。重新运行果然是可以了。

还需要做下面的操作:

在本地安装spark,并把远程服务器hive.xml、core-site.xml、mapred-site.xml和yarn-site.xml拷贝到spark的conf

如果远程服务器是有hostname的,需要修改hosts

作者 east
Hive 5月 24,2022

用Sqoop导入mysql到hive遇到的坑

坑1:所有字段的值都为null

发现原因是在于,建hive表是设定的分割符不恰当,跟从mysql导入过来的数据的分隔符不一样,所以导致hive切分不了数据,于是查询为空,但是这个过程,是不属于导入失败的,所以导入命令没有报错。因为sqoop import实际上是把数据存放到hdfs对应路径上了,而不是“直接导入表里”,查询时,hive会从hdfs的路径上提取数据,再根据hive表的结构和定义,来向我们展示出类似表格的形式。因此,导入过程是不会报错的,但是因为hive定义的分隔符和存在hdfs上数据的分隔符不一致,所以查询是全为NULL的。查看自己hive的建表语句

CREATE TABLE IF NOT EXISTS ods.test1 (
id BIGINT, 
type_id INT, 
parent_id INT,
 name STRING, 
 note_state INT) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

可以看到分隔符为:FIELDS TERMINATED BY ‘\t’,而从postgresql或者mysql来的数据的分隔符则应该为:FIELDS TERMINATED BY ‘\u0001’,那我们只要改回来就可以正常导入了。

把表删了,重新建表,指定分隔符为FIELDS TERMINATED BY ‘\u0001’.

CREATE TABLE IF NOT EXISTS ods.test1 (
id BIGINT, 
type_id INT, 
parent_id INT,
 name STRING, 
 note_state INT) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\u0001' STORED AS TEXTFILE;

坑2: tinyint类型的 都为null

sqoop运⾏完成之后,发现为tinyint类型的⼀类始终为null,经检查发现上游mysql有值,再查看hdfs⽂件,发现这列被抓换为了boolean类型。解决方案:在jdbc的连接后⾯加上:tinyInt1isBit=false,例如connect jdbc:mysql://192.168.1.80:3306/my_log?tinyInt1isBit=false

作者 east
Hive 4月 10,2022

生产环境选型:Hive对比Pig

Apache Hadoop 包括一个不断增长的软件库,可帮助用户管理数据。对于需要管理大量信息的组织而言,Hive 和 Pig 是两个最关键的 Hadoop 项目。以下 Hive 与 Pig 比较将帮助您确定哪个 Hadoop 组件更符合您的需求。您还将有机会了解替代 ETL 解决方案的优势,这些解决方案使数据管理和丰富变得更加容易。

Hive vs Pig:最关键的区别
显然,Hive 和 Pig 为用户提供了很多优势。您使用的工具可能取决于您的数据需求。你是数据分析师还是程序员?您使用结构化数据还是半结构化数据?

了解这些问题的答案将帮助您确定更适合您的选项。通过了解 Hive 与 Pig 最关键的区别,您可以专注于适合您和您的组织的工具。

Hive 具有将数据转换为报告的可靠功能,而 Pig 为您提供了一种编程语言,可帮助您从一个或多个数据库中提取所需的信息。
Hive 在服务器端工作,而 Pig 在集群的客户端工作。
Hive 可以访问原始数据,而 Pig Latin 脚本不能。
HiveQL 遵循数据分析师可以轻松掌握的声明性 SQL 语言,而 Pig 依赖于具有更大学习曲线的 SQL 变体。
Hive 处理结构化数据,而 Pig 可以处理结构化和半结构化数据。

什么是 Hive Hadoop?
Apache 的 Hadoop Hive 组件执行多种功能,帮助数据分析专业人员通过类似于 SQL 的操作界面定位和丰富数据。 如果您的团队成员已经了解 SQL,那么他们很容易开始使用 Hive。

数据分析师经常使用 Hive 来:

分析数据。
查询大量非结构化数据。
生成数据摘要。
Hive 为您提供了一种可靠的方式来定位和分析非结构化数据。 显然,Hive 并不是每个组织的完美工具,但它具有出色的功能,使其成为需要有效方式处理非结构化数据的团体的有用工具。

什么是Pig Hadoop?
Apache Pig 使用脚本语言 Pig Latin 从 Hadoop 中查找、提取和丰富数据结构化和半结构化数据。许多人发现 Pig Latin 有点难学。但是,克服学习曲线可以让用户更好地控制他们的 Hadoop 数据。

选择Pig的人经常指出它:

快速加载数据。
隐式定义表模式。
支持同组。
像所有数据工具一样,Pig 也有其优点和缺点。您可以深入了解以下优点和缺点,以帮助您确定是否要将 Pig 作为 Hadoop 策略的一部分。

Apache Hadoop 在 ETL 中的作用
有些人错误地认为 Apache Hadoop 是一种 ETL 工具,它为他们提供了提取、转换和加载数据所需的所有工具。 Hadoop 提供了一些出色的优势,但它不属于 ETL 类别。但是,如果使用得当,它可以改进 ETL 策略和项目。

许多人使用 Apache Hadoop 之类的数据,因为它可以:

提高性能并防止硬件出现故障。
在将流行类型的数据移动到 ETL 管道之前集成它们。
提高处理和传输大数据的速度。
在用户将受损数据转移到其他工具之前识别安全漏洞并警告用户。
注意可能擦除或损坏数据的风险,让您有机会在丢失项目的关键信息之前解决问题。
虽然将 Hadoop 称为 ETL 解决方案是不正确的,但您可以将其称为 ETL 助手。该解决方案有几个很棒的功能,可以提高 ETL 项目的速度和准确性。

Hive:优点和缺点
要了解有关 Hive 优缺点的更多信息,直接从经常使用 Hadoop 组件的人那里获取信息是有意义的。 TrustRadius 评论家给 Apache Hive 打了 7.8 分(满分 10 分)。

用户从 Hive 获得的一些优势包括:

对已经熟悉 SQL 的任何人都适用的简单查询。
可在需要时从多个服务器寻求增援的可扩展性。
为数据分析生成临时查询的选项。
它处理长时间运行的查询的能力如何。
它能够连接各种关系数据库,包括 Postgres 和 MySQL。
使用 Java 和 Python 编写自定义函数的选项。
简化 Hadoop 体验,尤其是当没有技术背景的人参与数据项目时。
这就是潜在用户在选择 Hive 时应该考虑的一系列积极特征。不过,用户也有很多批评。例如,Hive 的许多批评包括:

缺乏对在线处理数据的支持。
无法支持子查询,
更新数据的复杂方法。
即席查询速度慢。
缺乏让管理员为用户分配特定角色的安全控制。
将易用性置于处理速度之上,尤其是在批处理方面。
尽管许多用户赞赏 Hive 的查询语言是基于 SQL 构建的,但他们指出 Hive 遗漏了一些非常有用的 SQL 命令。这种缺陷迫使用户浪费时间重写应该自动附带 Hadoop 组件的命令。

Pig:优点和缺点
Apache Pig 的数值审查略胜 Apache Hive。 TrustRadius 用户给 Pig 打了 7.9 分(满分 10 分)。

Apache Pig 用户提到的一些优点包括:

与 MapReduce、Spark 和 Tez 一起使用的快速执行。
它能够处理几乎任何数量的数据,无论大小。
使其与其他工具(如 Hive 和 DBMS)结合以改进其功能的功能。
一个强大的文档流程,可帮助新用户学习 Pig Latin。
本地和远程互操作性,让专业人员可以在任何地方通过可靠的连接工作。
尽管很多人喜欢 Apache Pig,但它确实存在给用户带来问题的问题。针对 Pig 的一些投诉集中在:

无法解决复杂的数学问题。
难以实施顺序检查。
很少有用于循环数据的选项,这会增加用户的工作量。
有些人难以掌握的特定领域语言(猪拉丁语)。
显然,Apache 可以对 Pig 进行一些改进。然而,它确实填补了一个吸引某些用户的利基空间。

作者 east
Hive, 数据库 4月 4,2022

Hive对比SQL:哪个更适合数据分析

Hive 和 SQL 之间的主要区别:

架构:Hive 是一个用于数据分析的数据仓库项目; SQL 是一种编程语言。 (但是,Hive 通过称为 HiveQL 的编程语言执行数据分析,类似于 SQL。)


设置:Hive 是一个基于开源软件程序 Hadoop 的数据仓库。
数据分析:Hive 比 SQL 更有效地处理复杂数据,适合不太复杂的数据集。


价格:Hive 价格从每位用户每月 12 美元起。 SQL 是开源和免费的。


评论:Hive 在 G2 网站上的客户评论评分为 4.2/5。因为 SQL 是一种编程语言而不是“产品”,所以它在 G2 上没有评论。


大数据需要强大的工具。成功的组织查询、管理和分析来自数百个数据源的数千个数据集。这就是 Hive 和 SQL 等工具的用武之地。尽管非常不同,但查询和编程大数据都是如此。

但是哪种工具适合您的组织?在这篇评论中,我们在功能、价格、支持、用户评分等方面比较了 Hive 与 SQL。

什么是Hive?
Apache Hive 是一个用于数据查询和分析的数据仓库项目。 Hive 建立在 Apache Hadoop(一个用于处理大数据的开源程序)之上,通过查询语言 HiveQL 执行数据分析,它允许用户构建数据并生成各种有用的分析。

Hive 由 Facebook 开发,使希望从电子表格、网络日志、CRM 系统等中查询和汇总数据的用户受益。 它在 Hadoop 分布式文件系统 (HDFS) 中查询数据,并将该系统用于自己的存储。 它还运行 MapReduce 作业。

什么是 SQL?
结构化查询语言 (SQL) 是一种特定于领域的编程语言,用于管理数据和/或处理数据流。它主要管理数据并处理关系数据库管理系统中保存的实时数据。在这篇评论的上下文中,SQL 就像 HiveQL。

SQL 由 Oracle 开发,是一种用于分析查询的声明性语言。它比 Hive(和 HiveQL)更新得多。 SQL 可以追溯到 45 年前,并且在许多 IT 系统中已经无处不在。

有关我们的原生 SQL 连接器的更多信息,请访问我们的集成页面。

Hive 和 SQL 的区别
Hive 在 HDFS 中写入和查询数据。 SQL 需要多次读取和写入。
Hive 更适合分析复杂的数据集。 SQL 更适合快速分析不太复杂的数据集。
SQL 支持联机事务处理 (OLTP)。 Hive 不支持 OLTP。
Hive 查询可能具有高延迟,因为 Hive 通过 Hadoop 运行批处理。这意味着某些查询要等待一个小时(或更长时间)。更新 Hive 上的数据也可能需要很长时间。

支持和培训
HIVE
一个在线社区(Apache 软件基金会)
资源
邮件列表
语言手册


SQL
虽然没有提供官方培训,但有各种 SQL 第三方培训模块/支持社区。

价钱
HIVE
计划从每位用户每月 12 美元起。
有 14 天的免费试用期。
SQL
作为一个开源平台,SQL 是 100% 免费的。 但是,SQL 定价并未考虑您可能遇到的任何设置或维护成本。

结论
Hive 和 SQL 是处理(和驯服!)大数据的两种工具。 尽管这些工具有相似之处,但它们的差异足以保证进行比较。 我们认为 Hive 更适合分析复杂的数据集,而 SQL 更适用于不太复杂的数据集,并且在执行这些任务时速度更快。 另外,它是开源和免费的。 最终,适合您的工具取决于您如何分析组织中的大数据。

作者 east
Hive 3月 31,2022

Presto vs Hive:综合比较

Presto 和 Hive 之间的 5 个最大区别是:

1、Hive 允许用户插入自定义代码,而 Preso 不允许。
2、Presto 旨在符合 ANSI SQL,而 Hive 使用 HiveQL。
3、Presto 可以处理有限数量的数据,因此在生成大型报告时最好使用 Hive。
4、 Hive 通常可以容忍失败,但 Presto 不能。
5、 Hive 使用 map-reduce 架构并将数据写入磁盘,而 Presto 使用 HDFS 架构而不使用 map-reduce。

Presto 最初是一个 Facebook 项目,让工程师可以针对公司庞大的 (300PB) 数据仓库运行交互式分析查询。 Facebook 发布了 Presto 作为 Apache Software 下的开源工具。 在创建 Presto 之前,Facebook 以类似的方式使用 Hive。 在放弃它转而支持 Presto 之后,Hive 也成为了一个开源的 Apache 工具数据仓库工具。 如今,使用大数据的公司通常对 Presto 和 Hive 有强烈的偏好。 仔细比较表明,这些选项有一些相似之处和不同之处,但都没有管理和转换大数据所需的综合功能。

Presto 与 Hive:ANSI SQL 和 HiveQL
许多数据工程师在第一次尝试 Presto 时注意到的第一件事就是他们可以使用现有的 SQL 知识。 Presto 依靠标准 SQL 来执行查询、检索数据和修改数据库中的数据。只要您了解 SQL,就可以立即开始使用 Presto。许多人认为这是一种优势。

Apache Hive 使用类似于 SQL 的语言,但它有足够的差异,初学者需要重新学习一些查询。 HiveQL 代表 Hive 查询语言,它有一些奇怪的东西可能会让新用户感到困惑。但是,任何熟悉 SQL 的人都应该发现他们可以相对快速地掌握 HiveQL。

Apache 为 HiveQL 维护了一个全面的语言手册,因此您可以在忘记命令时随时查找它们。尽管如此,查找信息会分散注意力并降低效率。

Presto vs Hive:自定义代码
由于 Presto 在标准 SQL 上运行,因此您已经拥有所需的所有命令。一些工程师认为这是一个优势,因为他们可以快速执行数据检索和修改。

然而,无法插入自定义代码可能会给高级大数据用户带来问题。在这种情况下,Hive 提供了优于 Presto 的优势。假设您非常了解该语言,您可以在查询中插入自定义代码。您可能不需要经常这样做,但在需要时它会派上用场。

在花时间在 HiveQL 中编写自定义代码之前,请访问 Hive 插件页面并搜索类似的代码。有人可能已经编写了您的项目所需的代码。如果您找不到您需要的特定代码,您可能会找到一个只需要稍作改动即可执行您的独特命令的插件。

Presto 与 Hive:数据限制
很少有人会否认 Presto 在生成频繁报告时运行良好。不幸的是,Presto 任务可以存储的数据量是最大的。一旦你碰到那堵墙,Presto 的逻辑就会崩溃。如果您生成每小时或每天的报告,您几乎可以肯定依靠 Presto 来完成这项工作。请记住,Facebook 使用 Presto,而且该公司会生成大量数据。不过,你可以达到一个极限。

Hive 似乎没有数据限制,至少不会影响实际场景。这使得 Hive 成为生成每周或每月报告的公司更好的数据查询选项。涉及的数据越多,项目所需的时间就越长。不过,Hive 不会失败。它会一直工作,直到你的命令结束。

Presto vs Hive:HDFS 和将数据写入磁盘
架构在 Presto 和 Hive 之间的差异中起着重要作用。

Hive 和 MapReduce
Hive 使用 MapReduce,这意味着它过滤和排序任务,同时在分布式服务器上管理它们。然而,在 reduce 和 map 阶段之间,Hive 必须将数据写入磁盘。写入磁盘会强制 Hive 在继续执行下一个任务之前等待一小段时间。

MapReduce 在 Hive 中运行良好,因为它可以处理多个服务器上的任务。分配任务会提高速度。尽管如此,数据必须写入磁盘,这会惹恼一些用户。

幸运的是,MapReduce 为 Hive 带来了非凡的灵活性。它可以处理大量的数据格式。 MapReduce 还可以帮助 Hive 即使在遇到数据故障时也能继续工作。它将承认失败并在可能的情况下继续前进。

Presto 和 HDFS
Presto 具有不同的架构,这使得 Give 在某些情况下有用,而在其他情况下则很麻烦。 Presto 支持 Hadoop 分布式文件系统 (HDFS),这是一种非关系源,无需在任务之间将数据写入磁盘。相反,HDFS 架构在整个分布式系统中存储数据。由于它的数据不会被锁定在一个地方,Presto 可以在不停止将数据写入磁盘的情况下运行任务。

显然,HDFS 提供了几个优点。不过,毫不奇怪,您可能会遇到架构方面的挑战。 HDFS 不能像 MapReduce 一样容忍故障。当出现问题时,Presto 往往会迷失方向并关闭。这种情况并不经常发生,但您可能会因失败而损失数小时的工作时间。你可能会发现你可以追溯你的步骤,解决问题,然后从你离开的地方继续。即使使用该解决方案,用户也会浪费宝贵的时间来追踪故障的根源并诊断问题。

Presto vs Hive:结论
许多使用大数据的专业人士更喜欢 Hive 而不是 Presto,因为他们欣赏 Hive 的稳定性和灵活性。当您专业地处理大数据时,您会发现有时您想编写自定义代码以提高项目效率。

仅仅因为有些人更喜欢 Hive,并不一定意味着你应该打折 Presto。按预期使用时效果很好。 Presto 快速处理任务。只是不要要求它一次做太多事情。如果这样做,您将面临失败的风险。

作者 east
Hbase, Hive 3月 24,2022

生产环境选型考虑:Hive全方位对比HBase

Apache Hive 和 Apache HBase 是用于大数据的令人难以置信的工具。虽然它们的功能有一些相同之处,但 Apache Hive 和 Apache HBase 都具有独特的作用,使它们更适合特定的场景。一些主要区别包括:

Apache Hive 是建立在 Hadoop 之上的数据仓库系统,而 Apache HBase 是在 HDFS 或 Alluxio 之上的 NoSQL 键/值。

Hive 为 Spark/Hadoop 数据提供 SQL 功能,HBase 实时存储和处理 Hadoop 数据。

HBase 用于实时查询或大数据,而 Hive 不适合实时查询。

Hive 最适合用于数据的分析查询,而 HBase 主要用于将非结构化 Hadoop 数据作为湖存储或处理。

归根结底,将 Apache Hive 与 Apache HBase 进行比较就像将苹果与橘子,或 Google 与 Facebook 进行比较。虽然这两个实体相似,但它们不为用户提供相同的功能。然而,尽管存在差异,Apache Hive 和 Apache HBase 都是处理大数据时使用的绝佳工具。继续阅读以了解有关 Apache Hive、Apache HBase 的更多信息,以及它们的各种功能如何在处理大数据时改善您的业务。

什么是 Apache Hive?

让我们从 Apache Hive 开始“Hive 与 Hbase”的考试。 Apache Hive 是一个构建在 Hadoop 之上的数据仓库系统。它为大型 Hadoop 非结构化数据池提供数据汇总、分析和查询。您可以查询存储在 Apache HDFS 中的数据,甚至可以查询存储在 Apache HBase 中的数据。 MapReduce、Spark 或 Tez 执行该数据。

Apache Hive 使用一种称为 HiveQL(或 HQL)的类似 SQL 的语言来查询批量 MapReduce 作业。 Hive 还支持 ACID 事务,例如 INSERT/DELETE/UPDATE/MERGE 语句。从更新 3.0 开始,Hive 通过减少表模式约束和提供对矢量化查询的访问权限为此添加了一些额外的功能。

简而言之,Apache Hive 为 Spark/Hadoop 数据提供了 SQL 特性(MapReduce 的 Java API 不太容易使用),它既是一个数据仓库系统,也是一个具有丰富集成和大量用户友好的 ETL 工具特征。与许多类似的产品(例如 Apache Pig)一样,Hive 在技术上可以处理许多不同的功能。例如,Hive 允许您使用 SQL,而不是为 MapReduce 作业编写冗长的 Java。您在堆栈中使用 Hive 的原因将因您的需求而异。

Hive 的核心功能

Hive 可以帮助精通 SQL 查询与 Hadoop 集成的各种数据存储中的数据。由于它符合 JDBC,它还与现有的基于 SQL 的工具集成。运行 Hive 查询可能需要一段时间,因为默认情况下它们会遍历表中的所有数据。尽管如此,Hive 的分区功能限制了数据量。分区允许对存储在单独文件夹中的数据运行过滤查询,并且只读取与查询匹配的数据。例如,如果文件将日期格式作为其名称的一部分,它可以用于仅处理在特定日期之间创建的文件。

以下是 Hive 的一些功能:

它使用 SQL。

出色的 Apache Spark 和 Tez 集成。

您可以使用用户定义函数 (UDF)。

它有很棒的带有 Hive 3+ 的 ACID 表。

您可以查询庞大的 Hadoop 数据集。

大量集成(例如,BI 工具、Pig、Spark、HBase 等)。

其他基于 Hive 的功能(例如 HiveMall)可以提供一些额外的独特功能。

什么是 Apache HBase?

Apache HBase 是运行在 HDFS 或 Alluxio 之上的 NoSQL 键/值存储。与 Hive 不同,HBase 操作在其数据库而不是 MapReduce 作业上实时运行。所以,你有随机访问能力——这是 HDFS 所缺少的。由于 HDFS 不是为处理具有随机读/写操作的实时分析而构建的,因此 HBase 为 HDFS 带来了大量功能。您可以将其设置为通过 Hadoop 处理的实时数据的数据存储。您可以将它与 MapReduce 集成。更好的是,您可以将它与 Hive 和 MapReduce 集成以获得 SQL 功能。

HBase 包含表,并且表被拆分为列族。列族(在架构中声明)将一组特定的列组合在一起(列不需要架构定义)。例如,“message”列族可以包括以下列:“to”、“from”、“date”、“subject”和“body”。 HBase 中的每个键/值对都定义为一个单元格,每个键由 row-key、c​​olumn family、column 和 time-stamp 组成。 HBase 中的一行是由行键标识的一组键/值映射。 HBase 享有 Hadoop 的基础设施并横向扩展。

简而言之,HBase 可以存储或处理具有近乎实时读/写需求的 Hadoop 数据。这包括结构化和非结构化数据,尽管 HBase 擅长后者。 HBase 具有低延迟,可通过 shell 命令、Java API、Thrift 或 REST 访问。 HBase 通常是 Hadoop 集群中的存储层,Adobe 等大型品牌利用 HBase 来满足其所有 Hadoop 存储需求。

HBase的核心特性

HBase 通过将数据存储为模仿 Google 的 Bigtable 的键/值来工作。它支持四种主要操作:添加或更新行、扫描以检索一系列单元格、返回指定行的单元格以及删除以从表中删除行、列或列版本。版本控制是可用的,因此它可以获取数据的先前值(历史记录不时删除以通过 HBase 压缩清理空间)。尽管 HBase 包含表,但仅表和列族需要模式,列不需要模式,并且它包括增量/计数器功能。

以下是 HBase 的一些功能:

它支持键值

它是一个支持随机读/写操作的 NoSQL 数据库

中型对象 (MOB) 支持

HBase 支持协处理器。这对于计算海量数据非常有用,并且操作类似于 MapReduce 作业,并具有一些额外的好处。

允许您利用 Apache Phoenix

您可以执行扫描操作

Hive 和 HBase 的局限性是什么?

每个工具都有自己的优缺点。因此,Hive 和 HBase 总是存在某些限制。阅读下面的这些限制。

Hive限制

首先,Hive 具有非常基本的 ACID 功能。他们到达了 Hive 0.14,但没有 MYSQL 等产品的成熟度。也就是说,仍然有 ACID 支持,并且每个补丁都会变得更好。

Hive 查询通常也具有高延迟。由于它在 Hadoop 上运行批处理,因此可能需要几分钟甚至几小时才能获得查询结果。此外,更新数据可能既复杂又耗时。

Hive 在小数据查询(尤其是大容量数据)方面并不是最好的,大多数用户倾向于依靠传统的 RDBMS 来处理这些数据集。

HBase 限制

HBase 查询采用自定义语言,需要经过培训才能学习。类似 SQL 的功能可以通过 Apache Phoenix 实现,尽管它是以维护模式为代价的。此外,HBase 并不完全符合 ACID,尽管它确实支持某些属性。最后但同样重要的是——为了运行 HBase,你需要 ZooKeeper——一个用于分布式协调的服务器,例如配置、维护和命名。

HBase 可以通过协同处理来处理小数据,但它仍然不如 RDBMS 有用。

实践中的 Hive 和 HBase

正如 Hive 和 HBase 在某些场景中有其局限性一样,它们也有它们蓬勃发展的特定场景。在下面的实践中阅读 Hive 和 HBase。

Hive使用场景

Hive 应该用于对一段时间内收集的数据进行分析查询——例如,计算趋势或网站日志。

我们通常会看到两个 Hive 用例:

HDFS 的 SQL 查询引擎 – Hive 可以成为 SQL 查询的重要来源。您可以利用 Hive 处理 Hadoop 数据湖并将它们连接到您的 BI 工具(如 Tableau)以实现可见性。

具有 HBase、Pig、Spark 或 Tez 的表存储层。大量 HDFS 工具使用 Hive 作为表存储层。从技术上讲,这可能是其最大的全球用例。

Hive 使用的真实例子

目前有超过 4,330 家公司品牌使用 Hive。这比使用 HBase 少,但仍然有很多品牌——尤其是因为大多数公司仍在运行 SQL 堆栈。

Scribd 将 Hive 典型的数据科学用例与 Hadoop 结合使用。这包括机器学习、数据挖掘和 BI 工具的临时查询。确实,Scribd 使用 Hive 作为其整体 Hadoop 堆栈的一部分——这是它最适合的地方。您可以将 Hive 和 HBase 放在同一个集群上进行存储、处理和即席查询。

MedHelp 将 Hive 用于其 Find a Doctor 功能。他们每天在 Hadoop 堆栈上处理数百万个查询,而 Hive 像专业人士一样处理它。

Last.fm 还使用 Hive 进行临时查询。再次,这就是 Hive 的亮点。如果您需要在 Hadoop 上进行临时查询,请使用 Hive。

HubSpot、hi5、eHarmony 和 CNET 也使用 Hive 进行查询。

HBase 使用场景

HBase 非常适合实时查询大数据(例如 Facebook 曾经将其用于消息传递)。 Hive 不应该用于实时查询,因为结果需要一段时间。

HBase 主要用于将非结构化 Hadoop 数据作为湖存储和处理。您也可以使用 HBase 作为所有 Hadoop 数据的仓库,但我们主要看到它用于写入繁重的操作。

HBase 使用的真实使用场景

几乎所有这些案例都将使用 HBase 作为 Hadoop 的存储和处理工具——这是它自然适合的地方。

Adobe 自推出以来一直在运行 HBase。他们的第一个节点早在 2008 年就启动了,他们目前将 HBase 用于他们的 30 个 HDFS 节点。他们将其用于内部结构化数据和非结构化外部数据。

Flurry 使用 HBase 运行 50 个 HDFS 节点,它使用 HBase 处理数百亿行。

HubSpot 主要使用 HBase 进行客户数据存储。作为 HDFS 堆栈的一部分,他们还使用 Hive 对该 HBase 数据运行查询。

Twitter 也在他们的 Hadoop 堆栈中使用 HBase。它用于用户搜索的内部数据。

Streamy 从 SQL 切换到带有 HBase 的 Hadoop 堆栈。他们声称能够比以往更快地处理。

Sematext(为 HBase 创建 SMP)使用 HBase 和 MapReduce 堆栈。同样,这两者可以很好地协同工作(通常通过 Hive 加以利用),因为它们完美地互补了彼此的优缺点。 超过 10,000 家企业使用 HBase。而且大部分都很大。在当前的技术生态系统中,大品牌倾向于更频繁地利用 Hadoop,因此 HBase 往往处于一些大堆栈中(例如,TCS、Marin Software、Taboola、KEYW Corp 等)

作者 east
Hive, 数据仓库 2月 19,2022

Hive构建数据仓库常用的函数

concat()函数。

concat()函数用于连接字符串,在连接字符串时,只要其中一个字符串是NULL,结果就返回NULL。

concat_ws()函数。

concat_ws()函数同样用于连接字符串,在连接字符串时,只要有一个字符串不是NULL,结果就不会返回NULL。concat_ws()函数需要指定分隔符。

str_to_map()函数。

● 语法描述。str_to_map(VARCHAR text,VARCHAR listDelimiter,VARCHARkeyValueDelimiter)。

● 功能描述。使用listDelimiter将text分隔成key-value对,然后使用keyValueDelimiter分隔每个keyvalue对,并组装成MAP返回。默认listDelimiter为“,”,keyValueDelimiter为“=”。

nvl()函数

基本语法:nvl(表达式1,表达式2)。如果表达式1为空值,则nvl()函数返回表达式2的值,否则返回表达式1的值。nvl()函数的作用是把一个空值(null)转换成一个实际的值。其表达式的数据类型可以是数字型、字符型和日期型。需要注意的是,表达式1和表达式2的数据类型必须相同。

日期处理函数

1)date_format()函数(根据格式整理日期)

hive> select date_format('2020-03-18',''yyyy-MM');
hive> 2020-03

2)date_add()函数(加减日期)

hive> select date_add('2020-03-11',1);
hive> 2020-03-12

3)next_day()函数

(1)获取当前日期的下一个星期一。

hive> select next_day('2020-03-13','MO');
hive> 2020-03-16

(2)获取当前周的星期一。

hive> select date_add(next_day('2020-03-13','MO'),-7);
hive> 2020-03-11

4)last_day()函数(获取当月最后一天的日期)

作者 east
Hive 2月 19,2022

Tez运行报TezSeeion has already shutdown错误

运行Tez出现下面错误:

Caused by: org.apache.tez.dag.api.SessionNotRunning: TezSeeion has already shutdown.Application application_15xxxx  failed 2 times due to AM Container for appattempt_xxx exited with exitCode: -103 For more detailed output,check application tracking page:http://hadoop1:8088/cluster/app/application_15xxxThen,click on links to logs of each attempt.

产生原因:

这是由于Container使用过多内存而被NodeManager杀死进程

解决方法:

修改Hadoop的配置文件yarn-site.xml,增加如下配置,关掉虚拟内存检查,修改后,分发配置文件,并重启集群。

<property>
   <name>yarn.nodemanager.vmem-check-enabled</name>
   <value>false</value>
</property>
作者 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删除.