Hive简介和WordCount

1. Hive简介

1. hive是什么

  1. hive是基于Hadoop的一个数据仓库工具, 可以将结构化的数据文件映射为一张数据库表
  2. hive可提供简单的sql查询功能, 可以将sql语句转换为MapReduce任务进行运行
  3. hive的数据存储在HDFS上, 同时在mysql中存储元数据(即实际存储数据的结构映射)

2. MapReduce缺点

  1. 过于底层, 依赖Java编程经验, 缺乏对于高级抽象的表现
  2. 功能不够灵活, 数据操作不清晰, 代码量大, 维护成本高
  3. 常用操作如排序, 连接等繁琐且低效
  4. 更关注如何实现而非实现什么, 在无用的细节调试上耗时过多

3. hive体系结构

  1. hive与hadoop相结合
    1. hadoop本身通过MapReduce处理存储在HDFS上的数据
    2. hive通过驱动完成对hql语句向MR代码的编译,优化和执行
    3. hive处理的数据存储在HDFS上,但通过在MySql数据库中存储的元数据映射HDFS上的实际数据
    4. hive在MySql中存储的仅为HDFS的映射, 而非真实数据的存储位置
      hive组成模块
  2. 用户接口
    最常用CLI, 通过Cli启动会生成一个Hive副本. Client是Hive的客户端,通过连接Hive Server所在节点访问Hive
  3. 元数据存储MetaStore
    元数据包括: 数据库表名,列和分区及其属性,即表的结构. 默认存储于derby(内存级数据库), 通常修改为mysql存储
  4. 解释器, 编译器, 优化器, 执行器
    完成HQL语句的编译,优化,执行(存储在HDFS上由MapReduce执行)

4. hive常用服务

服务名 功能
Cli 命令行界面
hiveserver 监听来自Thrift连接的守护进程
hwi hive的web界面
jar hadoop jar的扩展, 可执行需要hive环境的其他应用
metastore 启动元数据服务
rcfilecat 可打印出rcfilecat格式的文件

2. 实现单词统计WordCount

  1. 进入hive之后, 创建一个数据库create database mydb;
  2. 进入创建的数据库,创建一张表, 给定一个字段类型为string,这里是用于MR的,所以是Java数据类型
use mydb;
create table docs(line,string);
  1. 载入本地txt文件到表docs中, 这里本地文件放在work目录下
load data local inpath "/home/hadoop/work" overwrite into talbe docs;
  1. wordcount,通过子查询后统计词频并分组排序
create table wordcount as select word , count(1) as num from 
( select explode(split(line,'\\s')) as word from docs ) x 
group by word order by word;
  1. 测试一下新表wordcount数据,输出格式为单词 频数
select * from wordcount;

3. 通过脚本实现hql语句

  1. 在linux下编写扩展名为.hql的脚本文件wordcount.hql, 写入hql语句
use mydb;
create table wordcount as select word , count(1) as num from 
( select explode(split(line,'\\s')) as word from docs ) x 
group by word order by word;
select * from wordcount;
  1. 运行脚本文件
hive -f wordcount.hql

猜你喜欢

转载自blog.csdn.net/wxfghy/article/details/80620964