Hadoop实战系列(三)Hive的搭建

267 阅读4分钟

前边的文章中,我们介绍了关于hdfs的安装和常规使用方法。这一小节我们将开始介绍关于Hive的使用。

Hive的介绍

Hive是基于Hadoop的数据仓库工具。可以用于存储在Hadoop集群中的HDFS文件数据集进行数据整理、特殊查询和分析处理。Hive提供了类似于关系型数据库SQL语言的HiveQL工具,通过HiveQL可以快速实现简单的MapReduce统计。

图片

尽管Hive本身不是一个关系型数据库,但它支持通过连接外部关系型数据库来获取数据。连接到外部数据库有多种原因,其中之一是为了在Hadoop集群上进行分析时能够利用已经存在的数据库中的数据。此外,有时候将数据从关系型数据库导入到Hadoop集群中可能是一项耗时的任务,而连接外部数据库可以避免这个问题。

Hive通过使用Hive的JDBC驱动程序来连接到MySQL数据库。JDBC(Java Database Connectivity)是一种Java API,用于连接和执行与数据库相关的操作。Hive的JDBC驱动程序允许用户通过HiveQL查询语言连接到MySQL数据库,并从中获取数据。

基于Mac安装Hive单机应用

前边我们介绍了如何安装hdfs-3.3.6,这里我将接着已有的hdfs环境介绍hive的安装。

首先需要到官网去下载Hive的安装包,这里是下载地址:

https://archive.apache.org/dist/hive/

注意hdfs和hive之间有一定的版本关系,所以在下载对应hive版本的时候需要先了解hdfs的版本。一般来说是:hdfs 3.x 对应hive 3.x 版本。因此我选用了hive的3.1.3版本进行使用:

https://archive.apache.org/dist/hive/hive-3.1.3/

接着我们将下载好的hive包解压,然后放到指定目录,并在 ~/.bash_profile文件中设置环境变量:

HIVE_HOME=/Users/linhao/env/hive/apache-hive-3.1.3-binexport HIVE_HOME
export PATH=$HIVE_HOME/bin:$PATH:.

记得刷新环境变量的配置文件:

source ~/.bash_profile

解压下来的hive目录中,又一个conf的目录,里面放了关于hive的配置文件。这里我们主要修改两份文件的配置内容。

  • hive-env.sh

这份文件和hdfs的hdfs-env.sh文件的作用是类似的,主要是一些上下文中会使用到的环境配置参数。这里需要在内部加入以下一行export语句,声明hdfs的安装目录。

export HADOOP_HOME=/Users/linhao/env/hadoop-3.3.6/
  • hive-site.xml

默认的hive安装包的conf目录中是没有这份文件的,需要你自己去创建出来,然后贴入以下内容。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- 数据库的用户名 -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>[你的mysql数据库连接账号]</value>
  </property>

  <!-- 数据库密码 -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>[你的mysql数据库连接密码]</value>
  </property>

  <!-- 数据库连接 url -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExsit=true&amp;characterEncoding=UTF-8&amp;verifyServerCertificate=false&amp;useSSL=false</value>
  </property>

  <!-- 数据库连接驱动 -->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>

  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>
</configuration>

这里配置这份xml的作用,是因为这里我们使用了基于mysql作为元数据的存储介质。这里的metastore数据库需要我们自己提前去创建好才可以使用。

接着,我们需要下载一款mysql的连接jar包,然后放到hive的lib目录下去使用:

cp mysql-connector-java-8.0.28.jar  $HIVE_HOME/lib

另外由于我这里提前在自己的mac电脑中安装好了mysql,因此上边的hive-site.xml里面你会看到我的jdbc地址写的是localhost。

当确认好以上步骤之后,可以对metasotre数据库进行数据初始化:

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

执行上述命令后,对应的mysql就会导入一批hive的配置表信息。

图片

最后,启动hive服务即可:

$HIVE_HOME/bin/hive --service metastore &

启动完成后,输入以下命令进行连接:

linhao@linhaodemini conf % hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/linhao/env/hive/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/linhao/env/hadoop-3.3.6/share/hadoop/common/lib/slf4j-reload4j-1.7.36.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]
Hive Session ID = 06b3895e-0fe4-48dc-a7e1-be5853d6dbdb

Logging initialized using configuration in jar:file:/Users/linhao/env/hive/apache-hive-3.1.3-bin/lib/hive-common-3.1.3.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.Hive Session ID = e7592a73-e504-4b45-ae0c-10a5eb650908

hive>

到此,你可以开始对hive的探索之旅了。

hive里面的hql语法其实和常用的mysql比较贴近,所以使用起来的学习成本相对会比较低。

hive> show databases;
OK
default
test_db
Time taken: 0.042 seconds, Fetched: 2 row(s)
hive> use test_db;
OK
Time taken: 0.032 seconds
hive> show tables;
OK
dept
Time taken: 0.043 seconds, Fetched: 1 row(s)
hive>

小结

本文主要记录如何基于已有的hdfs环境去部署一个简单的hive数仓,希望看到这里能对大家有所帮助。