Docker容器嵌入式开发:在Ubuntu上配置Hive

发布于:2024-04-16 ⋅ 阅读:(27) ⋅ 点赞:(0)

一、Hive介绍

Apache Hive是一个建立在Hadoop之上的数据仓库软件,它提供了对大规模数据的存储、查询和分析功能。以下是关于Hive的完整介绍:

背景:
Hive最初由Facebook开发,并于2008年开源。它是为了简化在Hadoop上执行SQL查询的过程,特别是对于那些熟悉SQL的数据分析师和工程师。
Hive建立在Hadoop生态系统之上,利用Hadoop的分布式存储(HDFS)和计算框架(MapReduce或Apache Tez)来处理和分析大规模数据。

特点:
SQL接口:Hive提供了类似于SQL的查询语言,称为HiveQL,使得用户可以使用熟悉的SQL语法来处理和查询数据。
存储格式:Hive支持多种数据存储格式,包括文本、序列化、Avro、Parquet等,可以根据需求选择最合适的存储格式。
优化器:Hive具有查询优化器,能够自动转换查询计划以提高性能,并且可以手动编写优化的查询。
扩展性:Hive是高度可扩展的,可以处理PB级别的数据,并且可以在需要时添加更多的节点来增加集群的容量。
元数据管理:Hive维护了关于数据的元数据信息,包括表的结构、分区信息等,这些信息存储在数据库中,可以轻松管理和查询。

组件:
Hive Metastore:Hive Metastore是Hive的元数据存储服务,负责管理表、分区、列等元数据信息,并提供给Hive查询引擎使用。
HiveQL:HiveQL是Hive的查询语言,类似于SQL,允许用户执行各种数据查询、过滤、聚合等操作。
Hive CLI:Hive Command Line Interface(CLI)是Hive的交互式命令行界面,允许用户在终端中直接执行HiveQL查询。
Beeline:Beeline是Hive的另一个CLI工具,它使用JDBC连接到Hive,并提供更多的配置选项和连接管理功能。

用途:
数据仓库:Hive可以用作数据仓库,用于存储和管理结构化和半结构化数据,并支持灵活的数据查询和分析。
数据处理:Hive可以用于数据预处理、ETL(Extract-Transform-Load)操作、数据清洗和转换等任务。
数据分析:Hive可以用于执行复杂的数据分析和报告生成,帮助用户从海量数据中提取有价值的信息和见解。

二、配置方法

在Ubuntu上配置Hive,您可以按照以下步骤进行:

下载Hive:首先,从提供的链接下载Hive安装包。您可以使用wget命令从命令行下载,如下所示:

wget https://archive.apache.org/dist/hive/hive-2.3.4/apache-hive-2.3.4-bin.tar.gz

解压安装包:使用以下命令将下载的安装包解压到适当的位置,例如/opt目录:

tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /opt

配置环境变量:编辑~/.bashrc文件,并将Hive的bin目录添加到PATH环境变量中。假设您将Hive安装在/opt/apache-hive-2.3.4-bin目录下,您可以执行以下命令:

echo 'export HIVE_HOME=/opt/apache-hive-2.3.4-bin' >> ~/.bashrc
echo 'export PATH=$HIVE_HOME/bin:$PATH' >> ~/.bashrc

系统环境变量截图:
在这里插入图片描述
生效命令:source ~/.bashrc

编辑Hive配置文件:Hive的配置文件位于$HIVE_HOME/conf目录下。您可以根据需要编辑hive-site.xml等配置文件,以配置Hive的行为。
在这里插入图片描述

启动Hive Metastore:在启动Hive之前,您需要启动Hive Metastore服务。您可以使用以下命令启动Hive Metastore服务:

$HIVE_HOME/bin/hive --service metastore &

以上命令操作出现下面的报错问题:

$HIVE_HOME/bin/hive --service metastore &
[1] 97322
(tfv1) root@98031e181845:/data/myapp2024/myBigDataApplicationDevelopment/hadoop-3.1.3# 2024-04-09 18:50:20: Starting Hive Metastore Server
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apache-hive-2.3.4-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/myapp2024/myBigDataApplicationDevelopment/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor@1e35e9d0" java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor
        at org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor.run(JvmPauseMonitor.java:176)
        at java.lang.Thread.run(Thread.java:748)

(tfv1) root@98031e181845:/data/myapp2024/myBigDataApplicationDevelopment/hadoop-3.1.3# MetaException(message:Version information not found in metastore. )
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:83)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:92)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6885)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6880)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:7138)
        at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:7065)
        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)
Caused by: MetaException(message:Version information not found in metastore. )
        at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:7564)
        at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:7542)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

解决方法如下:

删除 Hive 目录下的旧版 Guava JAR 文件:rm /opt/apache-hive-2.3.4-bin/lib/guava-14.0.1.jar

将新版 Guava JAR 文件复制到 Hive 目录下:cp /data/myapp2024/myBigDataApplicationDevelopment/hadoop-3.1.3/share/hadoop/hdfs/lib/guava-27.0-jre.jar /opt/apache-hive-2.3.4-bin/lib

这些操作的目的是替换 Hive 中的旧版 Guava JAR 文件,以解决 Guava 版本冲突问题。

rm /opt/apache-hive-2.3.4-bin/lib/guava-14.0.1.jar 
cp /data/myapp2024/myBigDataApplicationDevelopment/hadoop-3.1.3/share/hadoop/hdfs/lib/guava-27.0-jre.jar /opt/apache-hive-2.3.4-bin/lib

启动Hive CLI或Beeline:启动Hive CLI或Beeline以连接到Hive。您可以使用以下命令之一:

使用Hive CLI:

hive

使用Beeline:

beeline -u jdbc:hive2://localhost:10000

进行必要的配置更改:根据需要,您可能需要在Hive中进行其他配置更改,例如元数据存储类型、数据存储位置等。

在这里插入图片描述