Hive构建笔记

102 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

简介

hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据:可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能;可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL语言查询、汇总和分析数据。而mapreduce开发人员可以把自己写的mapper和reducer作为插件来支持hive做更复杂的数据分析。它与关系型数据库的SQL略有不同,但支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。它还提供了一系列的工具进行数据提取转化加载,用来存储、查询和分析存储在Hadoop中的大规模数据集,并支持UDF(User-Defined Function)、UDAF(User-Defined AggregateFunction)和UDTF(User-Defined Table-Generating Function),也可以实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。

hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。hive的特点包括:可伸缩(在Hadoop的集群上动态添加设备)、可扩展、容错、输入格式的松散耦合。

Hadoop

我们需要将Hive安装到有Hadoop的机器上,如果还没部署Hadoop的可以参考下Hadoop单机部署步骤详解

Hive搭建与配置

1. 下载安装Hive

下载链接:<archive.apache.org/dist/hive/>

这里选用的是hive-3.1.3版本

上传文件到指定目录

cd /data/soft

解压

# 解压
tar -zxvf apache-hive-3.1.3-bin.tar.gz
# 修改文件名
mv apache-hive-3.1.3-bin hive-3.1.3

2. 配置Hive

配置环境变量

# 编辑环境变量
vim /etc/profile
# 指定hadoop目录
export HIVE_HOME=/data/soft/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin
# 保存
:wq
# 刷新配置
source /etc/profile

image.png

配置文件

# 1、在hdfs中新建目录
hdfs dfs -mkdir /tmp
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hive
hdfs dfs -mkdir /user/hive/warehourse
# 2、授权
cd /data/soft/hadoop-3.3.4/bin/
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehourse

# 3、相关jar包引用
mysql: 将mysql驱动jar包拷贝到hive的lib目录下面(版本号没要求,这里采用的是:mysql-connector-java-8.0.28.jar)

# 4、修改hive-site.xml配置
cd /data/soft/hive-3.1.3/conf
cp hive-default.xml.template hive-site.xml
<!-- 设置数据库等配置信息 -->
<property>
        <name>hive.cli.print.header</name>
        <value>true</value>
        <description>Whether to print the names of the columns in query output.</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true</value>
    <description>
        JDBC connect string for a JDBC metastore.
        To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
        For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </description>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <!-- 8.0版本 -->
    <value>com.mysql.cj.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    <description>password to use against metastore database</description>
</property>
<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/data/soft/hive-3.1.3/tmp</value>
    <description>Local scratch space for Hive jobs</description>
</property>
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/data/soft/hive-3.1.3/tmp/resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
    <name>hive.querylog.location</name>
    <value>/data/soft/hive-3.1.3/tmp</value>
    <description>Location of Hive run time structured log file</description>
</property>
<property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/data/soft/hive-3.1.3/tmp/operation_logs</value>
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
<property>
    <name>hive.txn.xlock.iow</name>
    <value>true</value>
    <description>
        <!-- 这版本的配置文件有特殊符合,直接把这段描述删掉或者注释即可 -->
        <!-- Ensures commands with OVERWRITE (such as INSERT OVERWRITE) acquire Exclusive locks for&#8;transactional tables.  This ensures that inserts (w/o overwrite) running concurrently
      are not hidden by the INSERT OVERWRITE. -->
    </description>
</property>
<property>
        <name>hive.metastore.uris</name>
        <value>thrift://localhost:9083</value>
        <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
  <property>
    <name>hive.druid.metadata.username</name>
    <value>root</value>
    <description>Username to connect to Type of the metadata DB.</description>
  </property>
  <property>
    <name>hive.druid.metadata.password</name>
    <value>root</value>
    <description>Password to connect to Type of the metadata DB.</description>
  </property>

3. 启动metastore

格式化,启动

cd /data/soft/hive-3.1.3/bin
schematool -initSchema -dbType mysql
nohup ./hive --service metastore &

测试

hive
show databases;
# 出现该提示表示成功:Time taken: xxxx seconds, Fetched: 1 row(s)

# 如果出现 slf4j 异常提示,在/data/soft/hive-3.1.3/lib 目录中加入:slf4j-api-x.x.x.jar 和 slf4j-simple-x.x.x.jar

image.png