目录
· 概况
· 手工安装
· 引言
· 创建HDFS目录
· 创建元数据库
· 配置文件
· 测试
· 原理
· 架构
· API
· 命令
· 数据类型
· 文件存储格式
· 数据格式
· 数据库
· 数据表
· 装载数据
· 插入数据
· 导出数据
· 查询数据
· 函数
· 性能调优
· join调优
· 合并小文件
· multi-group-by insert和multiple insert
· 并行执行
· Top N调优
概况
1. 设计目标:让精通SQL而Java技能较弱的数据分析师能利用Hadoop数据分析。
2. 使用率:实际开发中,80%操作使用Hive完成,20%使用MapReduce。
3. 与MapReduce相比,Hive特点:稳定、代码精简、易于维护。
4. HiveQL:未严格实现SQL-92标准。
5. 本质:将HiveQL转化为一个或多个MapReduce作业并在集群上运行,但并不是所有HiveQL都会转为MapReduce作业。
手工安装
引言
1. 假设已成功安装JDK、Hadoop集群及MySQL。
2. 本次手工安装在Hadoop的Master节点上。
3. 创建HDFS目录并分配权限。
创建HDFS目录
hadoop fs -mkdir /tmp hadoop fs -mkdir /user/hive/warehouse hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse
创建元数据库
2. 创建MySQL元数据库。
create database hive character set latin1;
3. 创建用户。
grant all on hive.* to 'hive'@'localhost' identified by 'hive'; grant all on hive.* to 'hive'@'%' identified by 'hive'; flush privileges;
配置文件
4. 创建MySQL元数据库。
tar zxvf apache-hive-1.2.2-bin.tar.gz -C /opt/app cp mysql-connector-java-5.1.42.jar /opt/app/apache-hive-1.2.2-bin/lib cd /opt/app/apache-hive-1.2.2-bin vi conf/hive-site.xml
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value><![CDATA[jdbc:mysql://centos1:3306/hive?characterEncoding=latin1]]></value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> </configuration>
测试
5. 配置环境变量。
vi /home/hadoop/.bash_profile
export HIVE_HOME=/opt/app/apache-hive-1.2.2-bin export PATH=$PATH:$HIVE_HOME/bin export HADOOP_USER_CLASSPATH_FIRST=true
source /home/hadoop/.bash_profile env | grep HIVE_HOME
6. 启动与测试。
hive
hive> show tables;
原理
架构
1. 访问接口:CLI(命令行)、HWI(Hive网络界面)、Thrift Server提供的JDBC和ODBC。
2. Driver职责:通过访问接口提交的命令,由Driver模块解释和编译,对计算优化,生成执行计划执行,执行计划由若干MapReduce作业组成。
3. Metastore:Hive元数据存储,通常是关系型数据库(例如MySQL、PostgreSQL、Oracle)。
4. 部署:Hive通过与YARN通信来执行MapReduce作业,所以Hive无需部署在YARN集群。
与关系型数据库对比
|
Hive |
RDBMS |
查询语言 |
HiveQL |
SQL |
数据存储位置 |
HDFS |
Raw Device或本地文件系统 |
数据格式 |
用户定义 |
系统决定 |
数据更新 |
不支持 |
支持 |
索引 |
无 |
有 |
执行 |
MapReduce |
Executor |
执行延迟 |
高 |
低 |
伸缩性 |
高 |
低 |
数据规模 |
大 |
小 |
事务 |
无 |
一般有 |
API
WordCount
create table wordcount_in ( line string ); load data local inpath '/opt/app/apache-hive-1.2.2-bin/LICENSE' overwrite into table wordcount_in; create table wordcount_out as select word, count(1) as count from ( select explode(split(line, ' ')) as word from wordcount_in ) words group by word order by word; select * from wordcount_out;
命令
1. hive命令
a) 官方文档
b) 示例
hive -e 'select * from wordcount_out' hive -f hive-script.sql
2. beeline命令
a) 官方文档
数据类型
1. 基本数据类型
数据类型 |
长度 |
示例 |
tinyint |
1字节,有符号整数 |
11 |
smallint |
2字节,有符号整数 |
11 |
int |
4字节,有符号整数 |
11 |
bigint |
8字节,有符号整数 |
11 |
float |
4字节,单精度浮点数 |
11.0 |
double |
8字节,双精度浮点数 |
11.0 |
boolean |
布尔值 |
TRUE |
string |
字符串 |
'hadoop' |
2. 复杂数据类型
数据类型 |
长度 |
示例 |
struct |
结构体,可通过“列名.属性名”访问,如struct(first_name string, last_name string) |
struct('Harry', 'Potter') |
map |
键值对集合,可通过“列名.键”访问 |
map('first_name', 'Harry', 'last_name', 'Potter') |
array |
数组,即相同数据类型的变量集合,可通过“列名[索引]”访问(索引从0开始) |
array('Harry', 'Potter') |
3. 更多数据类型参考官方文档。
文件存储格式
1. textfile
a) 原理:平面文本文件,默认格式。
b) 特点:未压缩,磁盘开销大,数据解析开销大。
2. sequencefile
a) 原理:二进制格式。
b) 特点:使用方便、可分割、可压缩,数据按行切分。
3. rcfile
a) 原理:行列存储结合的存储方式。
b) 特点:数据按行分块,保证同一行数据在一个块上,避免读取一行需要读取多个块。
4. parquet
a) 原理:面向分析性业务的列式存储格式。
b) 特点:对Impala有显著性能提升。
数据格式
1. 默认使用少用字符作为分隔符
分隔符 |
描述 |
|
换行符,默认行分隔符 |
^A(Ctrl+A) |
在文本中以八进制编码 |