Hadoop-Hive简介

本文详细介绍了Hive的出现原因、查询语句、数据仓库概念以及Hive的安装配置、元数据管理和HQL语法。Hive是基于Hadoop的数据仓库工具,通过HQL支持SQL查询,适用于数据仓库的静态分析。文中还涵盖了Hive的外部表、分区表的使用,以及Hive的内置函数和UDF开发。此外,文章通过案例展示了如何结合Flume、Hadoop和Sqoop处理数据。
摘要由CSDN通过智能技术生成

一、前言

1.特别的计算模型:MapReduce

  • 其可以将任务分割成多个处理单元,然后分散到一群家用或者服务器级别的硬件机器上,从而降低成本,并提供水平可伸缩性。
  • 这个计算模型下面组件被称为Hadoop分散式文件系统(HDFS)
  • 这个系统是可拔插的

2.Hive出现的原因

  • 用户希望从现有的数据库基础框架转移到Hadoop上
  • 而这个框架是基于传统关系型数据库和接口查询语句(SQL)的,为了解决这个问题,出现了Hive

3.Hive出现了查询语句:

  • Hive查询语句(HiveQL或HQL)
  • 查询存储在Hadoop中的数

4.SQL知识分布广泛的一个原因:

  • 它有效地、合理地、且直观地组织和使用数据模型。

5.Hive应用:

  • Hive可以将大多数查询转换为MapReduce任务(job),进而在介绍一个令人熟悉的SQL抽象的同时,拓展了Hadoop的可扩展性。
  • Hive最适合数据仓库的应用程序,使用该应用程序进行相关的静态分析,不需要快速响应给出结果,而且数据本身 频繁变化。

6.Hive不是一个完整的数据库:

  • Hive不支持记录级别的更新、插入或删除
  • 用户可以通过查询生成新表或者将查询结果导入到文件中
  • Hive查询延时比较严重

7.Hive不支持(OLTP)联机事务处理

  • Hive不支持OLTP(联机事务处理)所需要的关键功能,更接近于一个OLAP(联机分析技术)工具。但是并没有满足OLAP中的”联机“部分,至少目前没有满足。由于延时严重。

8.Hive最适合数据仓库的应用程序

  • 可以维护海量数据,而且可以对数据进行挖掘,然后形成意见和报告

二、介绍

1.Hive是什么?

1).MapReduce开发:

  • 开发调试麻烦,只能使用Java开发,需要对hadoop的底层及api比较了解才能开发出复杂的代码

2).HQL:

  1. Hive是基于Hadoop的一个数据仓库。
  2. 可以将结构化的数据文件映射成为一张数据库表,并提供完整的SQL查询功能。
  3. 可以将SQL语句转化为MapReduce任务进行。
  4. 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
  5. Hive是建立在 Hadoop 上的数据仓库基础架构。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
  6. Hive 定义了简单的类 SQL 查询语言,称为 HiveQL,它允许熟悉 SQL 的用户查询数据。
  7. 同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
  8. Hive不支持在线事务处理,也不支持行级的插入和更新和删除。

3).数据仓库简介

  • 数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。
  • 它是单个数据存储,出于分析性报告和决策支持目的而创建。
  • 需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

2.Hive的安装配置

  1. 首先需要hadoop的支持,启动好hadoop

  2. 下载:从apache官网下载新版本hive,要注意和hadoop版本的匹配。

  3. 支持:
    需要对应版本jdk的支持
    需要安装并运行hadoop

  4. 安装:
    将下载好的hive安装包上传到linux中。
    解压:tar -zxvf apache-hive-1.2.0-bin.tar.gz

  5. 启动:
    进入hive/bin目录,直接运行hive命令,即可进入hive提示符。
    hive不需要任何配置就可以运行,因为它可以通过HADOOP_HOME环境变量获知hadoop的配置信息。


  6. 在使用hadoop2.5.x环境下,启动hive发现报错:java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected


    造成这个错误的原因是因为jline.Terminal这个类有错误。


    复制hive/lib/jline-2.12.jar替换hadoop/share/hadoop/yarn/lib中的jline-0.9.x.jar,重启hadoop和hive即可。

    直接将hadoop升级到更高版本,如2.7.x中已经解决此问题。


3.HIVE入门

$show databases;

执行后发现默认有一个库default

$show tables;

发现没有任何表,证明不use其他库时,默认就是default库。

$create database tedu;

发现在hdfs中多出了/user/hive/warehouse/tedu.db目录
结论1: hive中的数据库对应hdfs中/user/hive/warehouse目录下以.db结尾的目录。

$use tedu;
$create table student (id int,name string);
$show tables;
$desc student;
$show create table student;

发现正确创建出来了表。
发现在hdfs中多出了/user/hive/warehouse/tedu.db/sutdent目录
结论2: hive中的表对应hdfs/user/hive/warehouse/[db目录]中的一个目录

$load data local inpath '../mydata/student.txt' into table student;

发现/user/hive/warehouse/tedu.db/sutdent下多出了文件

$select * from student;

发现查出的数据不正确,原因是建表时没有指定分隔符。默认的分隔符是空格。

$create table student2 (id int,name string) row format delimited fields terminated by '\t';
$load data local inpath '../mydata/student.txt' into table student2;
$select * from student2;

发现正确查询出了数据。
结论3: hive中的数据对应当前hive表对应的hdfs目录中的文件。

$select count(*) from student;

发现执行了mapreduce作业,最终现实了结果
结论4: hive会将命令转换为mapreduce执行。

$use default;
$create table teacher(id int,name string);

发现在hive对应的目录下多出了 tedu.db 文件夹,其中包含user文件夹。
结论5: hive默认的default数据库直接对应/user/hive/warehouse目录,在default库中创建的表直接会在该目录下创建对应目录。


4.HIVE配置mysql metastore

1). hive中除了保存真正的数据以外还要额外保存用来描述库、表、数据的数据,称为hive的元数据。这些元数据又存放在何处呢?

  • 如果不修改配置hive默认使用内置的derby数据库存储元数据。
  • derby是apache开发的基于java的文件型数据库。
  • 可以检查之前执行命令的目录,会发现其中产生了一个metastore.db的文件,这就是derby产生的用来保存元数据的数据库文件。

2) derby数据库

  • derby数据库仅仅用来进行测试,真正使用时会有很多限制。
  • 最明显的问题是不能支持并发。
  • 经测试可以发现,在同一目录下使用无法同时开启hive,不同目录下可以同时开启hive但是会各自产生metastore.db文件造成数据无法共同访问。
  • 所以真正生产环境中我们是不会使用默认的derby数据库保存hive的元数据的。

hive目前支持derby和mysql来存储元数据。

3)配置hive使用mysql保存元数据信息:

删除hdfs中的/user/hive

hadoop fs -rmr /user/hive   

复制hive/conf/hive-default.xml.template为hive-site.xml

cp hive-default.xml.template hive-site.xml 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值