在上篇《 hive(01)、基于hadoop集群的数据仓库Hive搭建实践 》一文中咱们搭建了分布式的数据仓库Hive服务,本文主要是在上文的基础上结合Hadoop分布式文件系统,将结构化的数据文件映射为一张数据库表,将sql语句转换为MapReduce任务进行运行的具体实践。Hive帮助无开发经验的数据分析人员,有能力处理大数据还能够构建标准化的MapReduce开发过程,所以咱们学习大数据就有必要学习下Hive了。sql
1.hadoop集群环境shell
2.完整的Hive服务环境(链接了远程元数据库服务)数据库
注:hadoop集群或者hive服务没有搭建,请从参考前面的文章缓存
1.启动hadoop集群分布式
启动hadoop三台机器,而后在主节点机器上启动hadoop集群:start-all.shoop
2.启动Hiveserver服务学习
在hive机器上启动hiveserver服务:hive --service hiveserver2 或者hive --service hiveserver2 &测试
3.启动Hive Metastore服务大数据
在hive机器上启动Hive Metastore服务:hive --service metastore或者hive --service metastore & ui
看到以下信息,说明启动完成:
4.验证启动
在终端输入jps -ml查看:
能够看到hadoop集群个hive服务启动都正常
1.启动hive客户端
在hive机器上启动hiveserver服务:hive 或者hive shell
2.基本操做
<1>.建立表
在hive控制台输入脚本:
CREATE TABLE TB_USER(id int,name string,phone string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
<2>.正则匹配查找表
在hive控制台输入:show tables '*user*';
<3>.查看表结构
在hive终端输入:desc 表名
<4>.增删表字段
咱们给tb_user表先增长一个email字段: ALTER TABLE tb_user ADD COLUMNS (email string);
<5>.表重命名
咱们将tb_user从新命名成tb_user_back表:ALTER TABLE tb_user RENAME TO tb_user_back;
<6>.删除表
首先建立一个tb_user表,而后删除tb_user_back表:DROP TABLE tb_user_back;
<7>.插入数据
Hive插入数据有如下几种方式:
1>.从本地文件系统中导入数据到Hive表;
首先咱们从本地文件系统中导入数据到Hive的tb_user表中:
咱们在hive机器的home目录下建立user.txt文件,内容以下
而后在hive终端执行:
LOAD DATA LOCAL INPATH '/home/user.txt' OVERWRITE INTO TABLE tb_user;
在HDFS中查看刚刚导入的数据:
2>.从HDFS上导入数据到Hive表;
建立表tb_user_hdfs,而后从hdfs上导入user.txt的数据
在HDFS中查看刚刚导入的数据:
3>.从别的表中查询出相应的数据并导入到Hive表中;
建立表tb_user_end_tab,而后从tb_user表查询导入数据
CREATE TABLE TB_USER_END_TAB(id int,name string,phone string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
INSERT OVERWRITE TABLE tb_user_end_tab SELECT * FROM tb_user;
4>.在建立表的时候经过从别的表中查询出相应的记录并插入到所建立的表中;
新建 tb_user_new_tab表并从tb_user表中导入数据
CREATE TABLE tb_user_new_tab AS SELECT * FROM tb_user;
CREATE TABLE tb_user_new_tab LIKE tb_user;这是只克隆表结构不导数据
<8>.导出数据
1>.经过Hive导出到本地文件系统
INSERT OVERWRITE LOCAL DIRECTORY '/home/user' SELECT * FROM tb_user;
查看导出的数据:
2>.从hdfs中导出数据
参见《hadoop(02)、使用JAVA API对HDFS进行基本操做》中hdfs下载文件的操做
3.查询操做
<1>.普通的条件、排序查询
FROM (SELECT * FROM tb_user) A SELECT A.* WHERE A.ID>0 LIMIT 2;
FROM (SELECT * FROM tb_user) A SELECT A.* WHERE A.ID>0 LIMIT 3;
FROM (SELECT * FROM tb_user) A SELECT A.* WHERE A.ID>0 ORDER BY A.ID DESC LIMIT 2;
<2>.链接查询
为了测试咱们给tb_user表加入多几条数据:
SELECT A.* FROM tb_user_hdfs A JOIN tb_user B ON A.ID=B.ID;
SELECT A.* FROM tb_user_hdfs A JOIN tb_user B ON A.ID=B.ID WHERE A.NAME='xiaoming';
<3>.聚合查询
SELECT COUNT(DISTINCT ID) FROM tb_user;
<4>.分组查询
SELECT ID,PHONE FROM tb_user GROUP BY ID,PHONE;
SELECT ID,PHONE FROM tb_user GROUP BY ID,PHONE HAVING ID>2;
4.视图操做
hive也有对视图的操做,下面咱们进行视图的建立和删除
quit,exit: 退出hive终端
reset: 重置配置为默认值
set <key>=<value> : 修改特定变量的值
set : 输出用户覆盖的hive配置变量
set -v : 输出全部Hadoop和Hive的配置变量
add FILE[S] *, add JAR[S] *, add ARCHIVE[S] * : 添加 一个或多个 file, jar, archives到分布式缓存
list FILE[S], list JAR[S], list ARCHIVE[S] : 输出已经添加到分布式缓存的资源
list FILE[S] *, list JAR[S] *,list ARCHIVE[S] * : 检查给定的资源是否添加到分布式缓存
delete FILE[S] *,delete JAR[S] *,delete ARCHIVE[S] * : 从分布式缓存删除指定的资源
! <command> : 从Hive shell执行一个shell命令
dfs <dfs command> : 从Hive shell执行一个dfs命令
<query string> : 执行一个Hive 查询,而后输出结果到标准输出
source FILE <filepath>: 在CLI里执行一个hive脚本文件
本文中是对hive的一些基本操做和经常使用的操做的实践,在实际开发中是应用比较多的,在实践中好多地方尝试了好几遍,遇到了不少问题,经过查询网上的资料都解决了 ,在此记录帮助和我同样在学习hive的同窗,同时文中有不足的地方也请你们经过留言提出来,共同窗习。