Hive综述
- Hive:用于解决海量结构化日志的数据统计
- 基于Hadoop的数据仓库工具,将结构化的数据文件映射为一张表,并提供类SQL的查询功能
- 本质是把HiveQL转化为Mapreduce程序
- Hive不支持记录级别的更新、插入和删除操作
- Hive查询延时严重,因为要启动mapreduce任务
- 不支持事务
- 通过CLI即命令行交互
- 通过JDBC、ODBC和一个Thrift服务器进行编程访问
- Hive通过和JobTracker通信来初始化MapReduce
词频统计
CREATE TABLE docs (line STRING);
LOAD DATA INPATH 'docs' OVERWRITE INTO TABLE docs;
CREATE TABLE word_counts AS SELECT word,count(1) AS count FROM
(SELECT explode(split(line,'\s')) AS word FROM docs) w
GROUP BY word
ORDER BY word;
Hive内部
lib下是JAR文件,bin下是各种服务的执行文件,包括命令行界面CLI,conf下是配置文件。Thrift服务提供了可远程访问其他进程的功能,也提供使用JDBC和ODBC访问Hive的功能。
所有的Hive客户端都需要一个metastoreservice(元数据服务),Hive使用这个服务来存储表模式信息和其他元数据信息。
SQL Parser解析器、Physical Plan编译器、Query Optimizer优化器、Execution执行器
Hive的优缺点
优点
- 操作接口采用类SQL语法,容易上手
- 避免写MapReduce,减少学习成本
- 优势在于处理大数据,延时高
- 支持用户自定义函数(这个是重点)
缺点
- 迭代式算法无法表达
- 数据挖掘方面不擅长
- 不够智能化,调优困难
文件导入Hive
将student.txt文件导入,文件格式(id int,name string)。
LOAD DATA LOCAL INPATH 'student.txt' INTO TABLE student;
- LOAD DATA LOCAL INPATH '文件路径' INTO TABLE '表名'
- 也可以直接将文件student.txt放到对应的HDFS目录上,-put student.txt /hive/warehouse
- 如果是HDFS上文件移动,只是改动文件索引,文件本身存储没变
HiveJDVC访问
- 启动hiveserver2服务
- 连接hiveserver2
Hive数据类型
- INT,int,4byte
- DOUBLE,double,双精度
- STRING,string,字符串
- STRUCT
- MAP
- ARRAY
- row format delimited terminated by 列分隔符
- collection items terminated by 是MAP STRUCT和ARRAY的分隔符
- map keys terminated by MAP里的分隔符
- lines terminated by 行分隔符
类型转换
Hive的原子数据类型是可以进行隐式转换。
- INT可以转换成BIGINT
- FLOAT和STRING可以转换成DOUBLE
- CAST('1' AS INT)把字符串转换成整数1