Hive

Hive是建立在Hadoop上的数据仓库工具,简化了对大规模数据的查询和分析,通过类SQL语法(QL)进行操作。它解决了MapReduce编程复杂性和HDFS文件的管理问题,提供元数据服务和扩展性。Hive包括客户端组件如CLI、Thrift客户端和WEBGUI,以及服务端组件如Driver和Metastore。Hive将SQL转化为MapReduce任务,实现了数据的统计和处理。搭建Hive涉及配置环境变量、元数据库信息以及处理依赖冲突。

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

前言

Hive 是建立在 Hadoop 基础上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 QL ,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive 是 SQL解析引擎,它将SQL语句转译成Map/Reduce Job然后在Hadoop执行。Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在Map/Reduce Job里使用这些数据。

为什么要使用Hive(优点)
1.解决了MapReduce编程的复杂性。我们在早期学习MapReduce 的时候,都知道它需要创建Mapper,Reduce和Job。写起逻辑来不是太容易的,学习成本是比较高的。底层封装了MapReduce和HDFS…

2.Hdfs上的文件缺少Schema。例如:缺少 字段名,数据类型等,不方面数据进行有效管理。

2.1 什么是Schema

在数据库中,Schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式。模式中包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。数据库模式可以用一个可视化的图来表示,它显示了数据库对象及其相互之间的关系。(翻译自:http://database.guide/what-is-a-database-schema/**)

  1. 解决海量结构化数据的统计问题

4.如果是我们做项目使用MapReduce的话项目周期比较短的话,无法满足项目对时间的要求

5.操作类接口采用mysql的话可以帮助我们快速开发

6.从扩展性来说:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

Hive系统结构

借图说话,我们可以看出Hive的组成部分大致可以分为两种,一种是客户端组件而另一种是服务端组件。而我们的客户端组件是有哪些组成的?而我们的服务端的又是那些部分组成的呢?
 
 客户端组件:
 
  1.Cli:Command Line Interface 命令行接口
 
  2.Thrift客户端:Thrift是一款由Fackbook开发的可伸缩、跨语言的服务开发框架,该框架已经开源并且加入的Apache项目。Thrift主要功能是:通过自定义的Interface Definition Language(IDL),可以创建基于RPC的客户端和服务端的服务代码。数据和服务代码的生成是通过Thrift内置的代码生成器来实现的。Thrift 的跨语言性体现在,它可以生成C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml , Delphi等语言的代码,且它们之间可以进行透明的通信。说白了,增加扩展性让我们的Hive更加的完善。
3.WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface),使用前要启动hwi服务。
 
服务端组件:

Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。
  Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性,这个方面的知识,我会在后面的metastore小节里做详细的讲解。
  Thrift服务端:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。

数据想象

1.元数据和源数据的理解,首先我们可以进行场景的想象,我相信大家在儿时上学的时候都会背着一个大书包去快乐的上学去。
2.里面装满了很多文具盒,课本,练习手册....我们可以把我们身上背的书包可以理解是元数据,专业术语解释:元数据就是描述数据的数据,我们把它理解为数据的容器。
3.而我们的文具和书籍就可以理解为源数据,源数据就是数据。
4.对于数据库而言,元数据相当于我们表中的字段,而字段的内容就是数据......

Hive的Driver的原理

Hive当中的Driver负责的功能是解析Sql和优化sql,负责把任务提交给MapReduce处理然后交给Hadoop集群。

SQL转化为MapReduce任务的,整个编译过程分为下面几个阶段:

1.首先定义sql语法规则,完成sql的编译。它会找出sql语句的关键字,比如说是我的sql是
select id from stu; 那么它会寻找出处select关键字.
2.优化:将select进行优化,转化为树。相当于放入hive树林之中。
3.编译:将select进行编译,会对sql进行逻辑的编写。根据不同的业务逻辑进行sql的编写。
4.执行阶段:将逻辑计划实现,然后交给MapReduce进行执行。

Hive的搭建
1.准备Hive的安装包
我在这里准备的是1.2.1版本的jar包,对于版本我想几个注意的地方:我们在公司开发项目前,都会对版本进行一个调查,去官网准备。尤其是在做大数据开发的时候Hive的版本和Hadoop集群的不匹配的话,也会导致发生错误。所以在开发的时候,一定要注意这些版本的控制与梳理。

2.解压文件

tar -zxvf hive-1.2.1.tar.gz
1
3.安装mysql

安装mysql数据库
推荐yum 在线安装(运行脚本安装)
1
2
4.修改配置文件

(a)配置HIVE_HOME环境变量
vi conf/hive-env.sh
配置其中的$hadoop_home

(b)配置元数据库信息
vi hive-site.xml
添加如下内容:

	<configuration>
	<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
	<description>JDBC connect string for a JDBC metastore</description>
	</property>

	<property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.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>
	</configuration>

5.mysql权限管理

安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p

设置密码
set password=password('root');

#(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

FLUSH PRIVILEGES;


通过mysql -uroot -proot

6.Jline版本冲突

. Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的
6.1、 cp hive/lib/jline-2.12.jar /opt/software/hadoop-2.6.4/share/hadoop/yarn/lib/
6.2、装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值