基于Hadoop3.1.3安装Hive3.1.2

发布时间 2023-05-06 17:39:20作者: 瑾明达

Hive是什么?

\t Hive 是一个基于 Hadoop 的数据仓库工具,它提供了类似 SQL 的查询语言 HQL(Hive Query Language),使得开发人员可以使用类 SQL 语言来查询和处理存储在大规模 分布式文件系统(如 HDFS)中的数据。

Hive有哪些功能?

Hive 的主要功能包括数据存储、查询和分析等。通过将 SQL 语句转换为 MapReduce 程序,Hive 可以实现数据的批量处理和分析。此外,Hive 还支持自定义函数、数据读写、数据导入导出等功能,非常适合用于数据仓库、ETL、数据分析等领域。

Hive的元数据是什么?原理?

Hive 的原理是将 SQL 语句编译为 MapReduce 程序(或者 Tez 程序),并在 Hadoop 集群上运行这些程序来处理数据。

相比于直接使用 MapReduce 编程,Hive 提供了更加高级的抽象和语言特性,使得开发人员可以更加方便地进行数据处理和分析。

在 Hive 中,存储了大规模数据文件,这些数据文件通常存储在分布式文件系统 HDFS 或其它支持的文件系统中。

而元数据则是描述这些数据文件的数据,例如表名、存储位置、列名、分区、分桶、视图、列信息等,元数据可以存储在 Hive 的本地文件系统、SQLite 或外部数据库(如Oracle,通常是MySQL)中。

通过元数据,Hive 可以定义表结构、查询数据、优化查询计划等。

因为 Hive 的设计目标是面向大数据处理和分析,因此其元数据必须要能够管理海量数据,而且要具备高效查询和管理的能力。Hive 使用了一些优化技术,例如将元数据缓存在内存中,减少 I/O 操作次数等,来实现高效的元数据管理。

Hive与Mysql这类数据库的区别?

Hive 是一种基于 Hadoop 的数据仓库工具,而 MySQL 和 Oracle 等常见数据库是关系型数据库管理系统。与关系型数据库不同,Hive 不直接处理实时事务,而是被设计用于处理离线查询和分析大规模的非结构化和半结构化数据,例如网站日志、社交网络数据、音频/视频文件等。

在使用上,Hive 使用类 SQL 语言(称为 HiveQL)来操作数据,而 MySQL 和 Oracle 则使用 SQL 语言。此外,Hive 同样支持分布式计算和并行处理,能够处理规模更大、复杂度更高的数据,并且可以利用 Hadoop 生态圈中的其他工具来进行数据处理和分析。

综上所述,Hive 主要适用于大规模非结构化或半结构化数据的离线查询和分析,而 MySQL 和 Oracle 主要用户存储和管理结构化数据,并支持实时事务处理。

安装hive 后输入hive报错:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
	at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
	at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
	at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:518)
	at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:536)
	at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:430)
	at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5141)
	at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5099)
	at org.apache.hadoop.hive.common.LogUtils.initHiveLog4jCommon(LogUtils.java:97)
	at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:81)
	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:699)
	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:318)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:232)

参考:https://blog.csdn.net/GQB1226/article/details/102555820
将hadoop中的高版本的guava包替换掉hive中的低版本的包

cp hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar hive-3.1.2/lib/

创建示例表

CREATE TABLE employee (
  id INT,
  name STRING,
  gender STRING,
  age INT,
  department STRING,
  salary FLOAT,
  address STRING)
COMMENT 'Store employee information'
PARTITIONED BY (year INT, month INT)
CLUSTERED BY (department) INTO 3 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS ORC
TBLPROPERTIES ('creator'='jmd', 'create_time'='2023-04-28')