Hive了解一下

本文详细介绍了Hive的产生背景、作用、发展历程,解析了Hive的体系架构和部署方式,并通过实际操作演示了Hive环境的搭建和基本使用,包括创建表、加载数据以及执行SQL统计词频。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文分为5部分:

  1. Hive产生背景&Hive是什么?
  2. 为什么使用Hive&Hive发展历程
  3. Hive体系架构及部署架构
  4. Hive环境搭建
  5. Hive基本使用

1. Hive产生背景&Hive是什么?

MapReduce编程的不便性:
前面的博文我们介绍了Map Reduce的使用。我们首先要申明一个Map和一个Reduce才能处理作业。代码量大,复杂。而且需要部署jar执行。流程繁琐。
HDFS的文件缺少Schema
关系型数据库里面创建表要指定表名,指定列的名称,列的类型。这些可以理解为Schema。HDFS上是没有Schema的,这样HDFS就无法使用SQL的方式来对分布式系统上的文件进行查询。
Hive是什么?

  • 由Facebook开源,最初用于解决海量结构化的日志数据统计问题
  • 构建在Hadoop之上的数据仓库
  • Hive定义了一种类SQL的语言:HQL
  • 通常用于处理离线数据处理(采用MapReduce)
  • 底层支持多种不同的执行引擎(Mapreduce,Tez,Spark)
    • Hive on Mapreduce
    • Hive on Tez
    • Hive on Spark
  • 支持多种不同的压缩格式,存储格式以及自定义函数

  • 看一下官网的介绍:

APACHE HIVE TM
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.

Hive数据仓库可以通过SQL方便地读,写,和管理分布式式存储系统上的大数据集。用户可以使用命令行工具或者JDBC驱动来连接Hive

2.为什么使用Hive&Hive发展历程

  1. 简单、容易上手(提供了类SQL的查询语言)
  2. 为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储)
  3. 统一的元数据管理(可与Preso/Impala/SparkSQL等共享数据)

Hive发展历程
2007.08诞生于Facebook
2013.05-Hive 0.11.0
2013.10-Hive 0.12.0
2014.04-Hive 0.13.0
2014.11-HIve 0.14.0
2015.01-Hive 1.0.0
Hive在Hadoop生态系统中的位置:
这里写图片描述

3. Hive体系架构及部署架构

这里写图片描述

最上面的shell,和JDBC相当于连接Hive的两个客户端。然后下面是Driver驱动。SQL Parser负责将SQL语句解析成数据库执行计划等等。再往下是MapReduce,所有的SQL都是翻译成Map,Recude作业来执行的。最下面就是HDFS存储系统。
左边的Metastore 负责元数据管理。它是基于关系型数据库MySQL的。

下面看一下Hive的部署架构:
这里写图片描述
测试环境HIve可以存放在MySQL ,也可以放在DerBy上。

这里写图片描述

4 Hive环境搭建

1.Hive下载:http://archive.cloudera.com/cdh5/cdh/5/
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
2.解压:tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/opt/
3.配置
系统环境变量 /etc/profile

export HIVE_HOME=/opt/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH

4.安装MySQL
5.配置hive-site.xml
进入/opt/hive-1.1.0-cdh5.7.0/conf/

<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/sparksql?createDatabaseIfNotExist=true</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>

6.配置hive-env.sh 中的HADOOP_HOME内容。
7.拷贝MySQL驱动到/opt/hive-1.1.0-cdh5.7.0/lib下。我这里是mysql-connector-java-5.1.27.jar。
8.启动hive:$HIVE_HOME/bin/hive
这里写图片描述

可以看出hive已经启动成功。我们看下MySQL是否按照hive-site.xml生成sqparksql数据库。
这里写图片描述

这里写图片描述

我们看到sparksql中已经有表产生,这些都是由hive自动产生的,来管理相应的元数据。

5.Hive基本使用

创建表:
用hive创建表格式:

`CREATE  TABLE table_name 
  [(col_name data_type [COMMENT col_comment])]`

我们按照这个格式创建一个表:

create table hive_wordcount(context string);

这里写图片描述

创建成功。下面我们看下MySQL中这个表的内容:
这里写图片描述

可以看到在hive中创建表以后,MySQL中也对应有相应的表生成。
下面我们加载数据到hive表

LOAD DATA LOCAL INPATH 'filepath' INTO TABLE tablename 
load data local inpath '/data/hello.txt' into table hive_wordcount;

执行结果:
这里写图片描述

接下来我们使用sql语句来统计下词频

select word, count(1) from hive_wordcount lateral view explode(split(context,' ')) wc as word group by word;

//lateral view explode(): 是把每行记录按照指定分隔符进行拆解

运行上述代码,hive ql提交执行以后会生成mr作业,并在yarn上运行。
我这里的环境不知道为啥只要往yarn上提交作业,resourcemanager,nodemanager就会停止运行,jps上就没有进程了。这边这个只做个例子,就不展示结果了。

hive就先介绍到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值