hive的介绍与使用
hive产生的意义
使用SQL来操作Hadoop,从而简化代码更容易操作
Hive:一个基于Hadoop之上的中间件
简单来说就是: 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能,本质是将 SQL 转换为 MapReduce 程序,主要用途是用来做离线数据分析,比直接用 MapReduce 开发效率更高。
为什么使用 Hive ?
因为MapReduce 实现复杂查询逻辑开发难度太大 ,操作接口采用类 SQL 语法,提供快速开发的能力,避免了去写 MapReduce,减少开发人员的学习成本。
但是现在hive的用途基本上是做hdfs上的表的关系映射,不做其他开发用途了,因为跑MapReduce程序效率太低,已经被其他的组件代替了。不过入门学习从hadoop,hive开始是一个正确的选择。
Hive 架构
用户接口:linux上使用shell命令进行连接
元数据存储:元数据存储的数据库一般为 mysql/derby.。Hive 将元数据(metadata )存储在数据库中。也就是将数据的对应关系存放在 mysql/derby中,从而操作数据库就能对hdfs上的数据进行查询操作.存在mysql/derby的内容成为数据元.但是操作时还是用自己的特有sql语句,称为HQL.
解释器、编译器、优化器、执行器: hive的语言简称为 HQL(与hibernate语言不一样,只是名字类似).完成 HQL 查询语句从词法分析、语法分
析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随
后有 MapReduce 调用执行。
Hive 与 Hadoop 的关系
Hive 利用 HDFS 存储数据,利用 MapReduce 查询分析数据。
Hive 与传统数据库对比
hive 用于海量数据的离线数据分析
hive 具有 sql 数据库的外表,但应用场景完全不同,hive 只适合用来做批
量数据统计分析
Hive 安装部署
Hive 安装前需要安装好 JDK 和 Hadoop。配置好环境变量。如果需要使用
mysql 来存储元数据,则需要 mysql 也安装好。
元数据 metastore,内嵌模式使用的是内嵌的 Derby 数据库来存储元数据,也不需要额外起Metastore 服务。数据库和 Metastore 服务都嵌入在主 Hive Server 进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适
用于生产环境。,所以后续存储改为mysql.
下载如图所示,本人采用CDH版本,由于选择了CDH,只要找到CDH版本对应的Hive版本即可,不用考虑兼容性.因为hive与hadoop需要版本兼容使用cdh的话下载相同版本就行了.
将hive解压到指定目录
tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C /export/servers/
修改配置
/export/servers/hive-1.1.0-cdh5.14.0/conf(修改内容都在conf文件下)
配置Hive的系统环境变量
#HIVE_HOME
export HIVE_HOME=/export/servers/hive-1.1.0-cdh5.14.0
export PATH=:HIVE_HOME/bin
修改环境变量:hive-env.sh
#修改文件名
mv hive-env.sh.template hive-env.sh
#编辑文件
vim hive-env.sh
#修改如下内容
48行:HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
51行:export HIVE_CONF_DIR=/export/servers/hive-1.1.0-cdh5.14.0/conf
启动测试
启动hive之前提前创建对应的目录,以及赋予权限
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
先启动hdfs,再启动yarn,然后启动hive
sbin/start-dfs.sh
sbin/start-yarn.s.h
/export/servers/hive-1.1.0-cdh5.14.0/bin/hive
hive测试
将随便写一份wordcount.txt文件,打一些字一行一些字就行,在hdfs中拷贝一份
hdfs dfs -cp /wordcount/input/wordcount.txt /user/root/
在hive中创建表
create table wordcount(word string);
加载数据到Hive中:实现 了hdfs文件与表的关联
load data inpath ‘/user/root/wordcount.txt’ into table wordcount;
查询测试
select * from wordcount;