1. Hive概述
1.什么是hive?
- 由Facebook开源用于解决海量结构化日志得数据统计;
- Hive是基于Hadoopde的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并用提供类SQL查询功能;
- 构建在Hadoop之上的数据仓库;
使用HQL作为查询接口;
使用HDFS储存;
使用MapReduce计算; - 本质是:将HQL转化为Mapreduce程序
- 灵活性和拓展性比较好:支持UDE,自定义储存格式等;
- 适合离线数据处理。
2)Hive在Hadoop生态系统内中的位置
2.Hive架构
- HIVE依赖于hadoop的HDFS和Map Reduce,数据储存在HDFS,通过Map Reduce来计算/处理数据;
- 元数据:Meta store
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表);默认储存在自带的derby数据库中,推荐使用Mysql存Metastore; - 用户接口(Client)
Cli(hive shell),JDBC/JDBC(java访问hive),webUI(浏览器访问hive) - 驱动器:Driver(包含SQl Parser 、Query Optimizer、 Physical Plan 、Execution)
1)解析器(SQl Parser):将SQL字符串转化为抽象语法书AST,这一步一般都用第三方工具库完成,比如antir; 对AST进行语法分析,比如·表是否存在、字段是否存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否出现);
2)编译器(Query Optimizer):将AST编译生成逻辑执行计划
3)优化器(Physical Plan):对逻辑计划进行优化
4)执行(Execution):把逻辑执行计划转化为可以运行的物理计划,对于Hive来说,就是MR/TEZ/Spark。
3.Hive的优点及应用场景
- 操作接口采用类SQl语法,提供快速开发的能力(简单、容易上手);
- 避免了去写MapReduce,减少开发人员学习成本;
- 统一的元数据管理,可与impala/spark等共享元数据
- 易拓展(HDFS+Mapreduce:可以拓展集群规模;支持自定义函数)
- 数据的离线处理,比如:日志分析,海量结构化数据离线分析
- Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求不高的场合;
- Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高
2. Hive安装部署
1)下载安装Hive
下载地址(选择自己需要下载的版本,此博客采用1.3)
Apache版本的Hive。
https://archive.apache.org/dist/hive/
Cloudera版本的Hive。
http://archive-primary.cloudera.com/cdh5/cdh/5/
2)解压
tar -zxf apache-hive-0.13.1-bin.tar.gz -C /opt/modules/
3)修改hive-log4j.properties配置文件
cd /opt/modules/hive-0.13.1-bin/conf
mv hive-log4j.properties.template hive-log4j.properties
vi hive-log4j.properties
hive.log.dir=/opt/modules/hive-0.13.1-bin/logs
#日志目录需要提前创建(mkdir /opt/modules/hive-0.13.1-bin/logs)
hive.log.dir=/opt/modules/hive-0.13.1-bin/logs
4)修改hive-env.sh配置文件
mv hive-env.sh.template hive-env.sh
vi hive-env.sh
export HADOOP_HOME=/opt/modules/hadoop-2.5.0
export HIVE_CONF_DIR=/opt/modules/hive-0.13.1-bin/conf
注释:HADOOP_HOME为hadoop的安装目录、HIVE_CONF_DIR为你hive的conf目录
5)首先启动HDFS,然后创建Hive的目录(HDFS的启动:进入到hadoop的安装目录下运行:sbin/start-dfs.sh)
bin/hdfs dfs -mkdir -p /user/hive/warehouse
bin/hdfs dfs -chmod g+w /user/hive/warehouse
6)启动hive
bin/hive
show databases;
#使用默认数据库
use default;
#查看表
show tables;
3. Hive与mysql集成
1)在/opt/modules/hive-0.13.1-bin/conf目录下创建hive-site.xml文件,配置mysql元数据库。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://bigdata-pro01.kfk.com/metastore?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>123456</value>
<description>password to use against metastore database</description>
</property>
<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>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
</configuration>
2)设置用户连接
1.进入mysql
mysql -uroot -p123456
2.查看用户信息
show databases;
use mysql;
show tables;
select host,user,password from user;
3.更新用户信息
update user set Host='%' where User = 'root' and Host='localhost';
4.删除除上图划红线用户其余所有用户
delete from user where user='root' and host='127.0.0.1';
delete from user where host='localhost';
delete from user where host='bigdata-pro01.kfk.com';
结果如图所示:
5.刷新信息
flush privileges;
输入exit;
退出mysql;
5.根据自己mysql的版本下载对应mysql驱动包到hive的lib目录下
mysql-connector-java-xxx.jar下载地址
不知道自己mysql版本的可以在mysql启动的时候看到
(这个5.1.73版本。。官网我实在是没有找到,最后居然在csdn中找到了,废了我一个积分)
4. Hive服务启动与测试
1)启动zookeeper、HDFS和YARN服务(没做HA的集群不用启动zookeeper,保证namenode是active转态就行)
2)查看web界面,确认服务开启
3)进入到hive安装目录,启动hive
bin/hive
4)通过hive服务创建表
CREATE TABLE stu(id INT,name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
show tables;
5)创建数据文件
vi /opt/datas/stu.txt
00001 zhangsan
00002 lisi
00003 wangwu
00004 zhaoliu
(注意用制表符隔开)
6.加载数据到hive表中
load data local inpath '/opt/datas/stu.txt' into table stu;
select count(1) from stu;
sql语句最终转化为MapReduce程序:
在yarn的web界面可以看到提交的任务
能力是一种态度
Q:1967483667