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
02-14 03:36