[BD] Hive

简介

  • 基于HDFS上的数据仓库

            

  • 基于HDFS上的数据分析引擎
    • 2.x 前:SQL -----> Hive  ----> MapReduce
    • 2.x 后:推荐执行引擎为 Spark
  • 支持SQL子集

体系架构

  • 执行方式:CLI、JDBC、HWI(推荐HUE)
  • Hive元信息:表名、列名、列的类型、分区、桶,存储在MySQL中
  • 读取MySQL得到Hive元信息
  • 数据在HDFS中

安装配置

    嵌入模式
    • 不需要MySQL,使用Hive自带的Derby数据库存储元信息(Derby较小,嵌入到Hive中)
    • 只支持一个连接,用于开发和测试
  • 本地模式
    • 需要MySQL,Hive和MySQL在一起
    • 连接驱动:mysql-connector-java-5.1.43-bin
  • 远程模式
    • 需要MySQL,Hive和MySQL不在一起
    • 在 hive-site.xml 中写入mysql地址
    • mysql中TBLS存储Hive表信息,COLUMNS_2保存列的信息

数据模型

  • 内部表:类似MySQL中的表

    • 导入数据:load(剪切)  
    • 静默模式:hive -S(不打印日志)
  • 分区表:建立分区,提高效率
    • 一个分区对应一个HDFS文件

 1 create table emp_part
 2 (empno int,
 3 ename string,
 4 job   string,
 5 mgr   int,
 6 hiredate string,
 7 sal   int,
 8 comm  int
 9 )partitioned by (deptno int)
10 row format delimited fields terminated by ',';
View Code
    • select * from emp_part where deptno=10;
    • 打印执行计划:explain select * from emp_part where deptno=10;
  • 外部表:只定义表结构,数据保存在HDFS的某目录下
  • 桶表:类似Hash分区,对要插入的数据进行hash运算再插入,查询效率提高,插入效率降低
  • 视图:
    • 是一个虚表,查询操作和普通表一样,但不存储数据,数据来自底层依赖的基表
    • 作用:简化复杂的查询(不提高效率)

执行Hive查询

  • 执行HQL,HQL是SQL的子集
  • 转换为MapReduce程序执行
  • 使用 sqoop 导入 mysql 的数据,或将Hive的数据导出到mysql

使用JDBC查询

扫描二维码关注公众号,回复: 11241953 查看本文章

Hive自定义函数

  • UDF:User Define Function,封装业务逻辑,本质是java程序

猜你喜欢

转载自www.cnblogs.com/cxc1357/p/12865929.html
BD
今日推荐