Hive架构

  • 如图中所示,Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
  • 1)用户接口:Client CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
  • 2)元数据:Metastore 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等; 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
  • 3)Hadoop 使用HDFS进行存储,使用MapReduce进行计算。
  • 4)驱动器:Driver
  • (1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
  • (2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
  • (3)优化器(Query Optimizer):对逻辑执行计划进行优化。
  • (4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。

创建表及将本地数据导入到HDFS

创建内部表

  1. --创建内部表
  2. CREATE TABLE article(sentence STRING )
  3. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n';
  4. --从本地导入数据:相当于将path数据hadoop fs -put /hive/warehouse/badou.db/
  5. LOAD DATA LOCAL INPATH '/home/badou/mr/code/The_Man_of_Property.txt'
  6. INTO TABLE article;
  7. --查询数据
  8. select * from article limit 3;

创建外部表

  1. --外部表
  2. -- hadoop fd -mkdir /data/ext
  3. -- hadoop fd -cp /data/The_Man_of_Property.txt /data/ext
  4. CREATE EXTERNAL TABLE article2 (sentence STRING)
  5. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n'
  6. STORED AS TEXTFILE
  7. LOCATION '/data/ext';

在hive/warehouse/badou.db下没有外部表文件,但是可以在表中查询到数据

Wordcount用hive写法

  1. SELECT word, count(1) as cnt
  2. from (
  3. SELECT
  4. explode(split(sentence, ' '))
  5. as word from article
  6. ) t
  7. GROUP BY word
  8. LIMIT 100;

【注】运行hive前需要先将Hadoop及MySQL启动

爆款商品有哪些/top N 出现次数最多的商品

  1. SELECT word, count(1) as cnt
  2. from (
  3. SELECT
  4. explode(split(sentence, ' '))
  5. as word from article
  6. ) t
  7. GROUP BY word
  8. ORDER BY cnt DESC
  9. LIMIT 100;

【注】ORDER BY 只会产生一个reduce任务

内部表&外部表

内部表:数据需要存储在Hive目录对应的文件夹下,即使HDFS上在其他路径下已经存在 外部表:可以直接调用HDFS上的数据

内部表 外部表
数据需要存储在Hive目录对应的文件夹下,即使HDFS上在其他路径下已经存在 可以直接调用HDFS上的数据
create tabel name create external table location 'hdfs_path' name(必须是文件夹路径)

分区表partition

  • 建表
  1. CREATE TABLE art_dt(sentence STRING)
  2. PARTITIONED BY(dt STRING)
  3. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n';
  • 从hive表中的数据插入到新表(分区表)中
  1. --从hive表中的数据插入到新表(分区表)中
  2. INSERT OVERWRITE TABLE art_dt PARTITION(dt='20180924')
  3. SELECT * FROM article LIMIT 100;
  4. INSERT OVERWRITE TABLE art_dt PARTITION(dt='20180925')
  5. SELECT * FROM article LIMIT 100;
  6. -- [root@master ~]# hadoop fs -ls /user/hive/warehouse/badou.db/art_dt
  7. -- Found 1 items
  8. -- 2018-09-24 08:45 /user/hive/warehouse/badou.db/art_dt/dt=20180924
  • 查看分区表列表
  1. --查看分区表列表
  2. SHOW PARTITIONS art_dt;
  3. SELECT * FROM art_dt WHERE dt
  4. BETWEEN '20180924' AND '20180925' LIMIT 10;
  • 业务应用场景--Partition 实际工作中如何产生,用在什么数据上?
  1. 每天都会产生用户浏览,点击,收藏,购买的记录。 按照天的方式去存储数据,按天做partition

  2. app m pc

  • logs/dt=20180924/type=app
  • logs/dt=20180924/type=m
  • logs/dt=20180924/type=pc
  1. 数据库中数据有用户的属性, 年龄, 性别, blog等 每天有新增的用户,修改信息 dt=20180924 和dt=20180924会造成大量信息冗余。这个时候应该用 OVERWRITE
  2. overwrite++ 7 每天做overwrite dt = 20180922,这天中的数据包含这天之前的所有用户信息.
    当天之前所有的全量数据。 存7个分区,冗余七份,防止丢失数据。

分桶表Bucket

  • 创建总表udata
  1. -- 创建表udata
  2. CREATE TABLE udata(
  3. user_id STRING ,
  4. item_id STRING ,
  5. rating STRING ,
  6. `timestamp` STRING
  7. )
  8. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
  9. ;
  10. --导入数据
  11. LOAD DATA LOCAL INPATH '/home/badou/data/u.data'
  12. INTO TABLE udata;
  13. --设置显示字段名(显示表头)
  14. SET hive.cli.print.header=true;
  15. select * from udata limit 50;
  • 创建分桶表
  1. -- 创建分桶表
  2. CREATE TABLE bucket_users
  3. (
  4. user_id STRING ,
  5. item_id STRING ,
  6. rating string,
  7. `timestamp` string
  8. )
  9. CLUSTERED BY(user_id)
  10. INTO 4 BUCKETS;
  • 设置bucket数量,否则不会生成4个分桶
  1. SET hive.enforce.bucketing = true;
  • 插入数据,将之前建立好的udata表中数据插入到4个分桶中,此时会产生4个reduce
  1. -- 插入数据,将之前建立好的udata表中数据插入到4个分桶中,此时会产生4reduce
  2. INSERT OVERWRITE TABLE bucket_users
  3. SELECT
  4. cast(user_id as INT) as user_id,
  5. item_id,
  6. rating,
  7. `timestamp`
  8. from udata;

[Hive]Hive架构及常规操作的更多相关文章

  1. Hive的架构(二)

    02 Hive的架构 1.Hive的架构图 2.Hive的服务(角色) 1.用户访问接口 ​ CLI(Command Line Interface):用户可以使用Hive自带的命令行接口执行Hive ...

  2. Hive的基本知识与操作

    Hive的基本知识与操作 目录 Hive的基本知识与操作 Hive的基本概念 为什么使用Hive? Hive的特点: Hive的优缺点: Hive应用场景 Hive架构 Client Metastor ...

  3. Hive技术架构

    一.Hive概念 Facebook为了解决海量日志数据的分析而开发了Hive,Hive是一种用SQL语句来读写.管理存储在分布式存储设备上的大数据集的数据仓库框架. 1. 数据是存储在HDFS上的,H ...

  4. 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)

    一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景       作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...

  5. 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

    有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...

  6. [Hive] - Hive参数含义详解

    hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息:第二种是env环境变量信息,是当前用户环境变量信息:第三种是hive参数变量信息,是由hive-site.xml文件定义的以 ...

  7. Linux 下的 netfilter 认识与常规操作

    Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...

  8. postgres 常规操作杂记

    分布式:1.扩容不方便(数据重分布)2.分布键变更很麻烦3.分布键选择(架构设计)谨慎4.跨库join性能差5.分布式事务性能差6.sql限制多,功能确实多7.应用改造成本巨大8.全局一致性时间点恢复 ...

  9. FTP服务器常规操作

    导读 FTP协议是Internet文件传输的基础,它是由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据.下面就由我给大家简单介绍一下 ...

随机推荐

  1. 洛谷:P3950 部落冲突

    原题地址:https://www.luogu.org/problemnew/show/P3950 题目简述 给定一棵树,每次给定一个操作,有如下两种: 将某条边染黑 2.询问给定的u,v两点间是否有边 ...

  2. package.json详解

    1.概念 Node.js项目遵循模块化的架构,当我们创建了一个Node.js项目,意味着创建了一个模块,这个模块的描述文件,被称为package.json 亦即:模块的描述文件 = package.j ...

  3. docker升级后启动报错400 Client Error: Bad Request ("Unknown runtime specified docker-runc")

    宝塔面板docker升级后启动容器时报错400 Client Error: Bad Request ("Unknown runtime specified docker-runc" ...

  4. BUUCTF刷题记录(Web方面)

    WarmUp 首先查看源码,发现有source.php,跟进看看,发现了一堆代码 这个原本是phpmyadmin任意文件包含漏洞,这里面只不过是换汤不换药. 有兴趣的可以看一下之前我做的分析,http ...

  5. Python 爬虫从入门到进阶之路(十)

    之前的文章我们介绍了一下 Python 中正则表达式和 re 模块来做一个案例,爬取<糗事百科>的糗事并存储到本地.本章我们来看一下另一种爬取数据的方式 XPath. 我们在前面爬取< ...

  6. python编程基础之二十七

    列表生成式:[exp for iter_var in iterable] 同样也会有字典生成式,集合生成式,没有元组生成式,元组生成式的语法被占用了 字典生成式,集合生成式,就是外面那个括号换成{}  ...

  7. 区间 GCD

    区间 GCD题目描述最近 JC 同学刚学会 gcd,于是迷上了与 gcd 有关的问题.今天他又出了一道这样的题目,想要考考你,你能顺利完成吗?给定一个长度为 n 的字符串 s[1..n],串仅包含小写 ...

  8. GUI tkinter (Menu)菜单项篇

    """添加顶层菜单:1.我们可以使用Menu类来新建一个菜单,Menu和其他的组件一样,第一个是parent,这里通常可以为窗口2.然后我们可以用add_command方 ...

  9. SVN应用

    一:从服务器上down资料 1.在电脑上安装SVN客户端 2.在电脑本地创建个文件夹作为版本库 3.进入xfssvn文件夹右击鼠标选择SVN Checkout或SVN Update 4.输入服务器中配 ...

  10. 机器学习:weka中添加自己的分类和聚类算法

    不管是实验室研究机器学习算法或是公司研发,都有需要自己改进算法的时候,下面就说说怎么在weka里增加改进的机器学习算法. 一 添加分类算法的流程 1 编写的分类器必须继承 Classifier或是Cl ...