Docker容器嵌入式开发:在Ubuntu上配置Hive
目录
- 一、Hive介绍
- 二、配置方法
一、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.()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.(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中进行其他配置更改,例如元数据存储类型、数据存储位置等。