【笔记】大数据技术之Hive仓库(八)

Hive

简介

  1. 架构在底层Hadoop架构之上
  2. 依赖分布式并行计算模型MapReduce
  3. HiveQL借鉴了SQL语言
  4. 特性
    • 采用批处理方式处理海量数据
    • 提供了一系列对数据进行提取、转换、加载等工具
  • 和传统数据库的区别
    在这里插入图片描述

API

  • CLI:一种命令行工具

  • HWI:Hive Web Interface

  • JDBC&ODBC:开放数据库连接接口很多应用开发都支持

  • Thrift Servr:实现RPC调用

  • Metastore

  1. 是一个独立的关系型数据库
  2. 通过MaySQL数据库来存储Hivec元数据
  • Hive HA
  • Hive High Availability
  • 解决不稳定性

工作原理

SQL->MapReduce

  • join
    在这里插入图片描述

  • group by
    在这里插入图片描述

  • 具体过程

    • 输入
    • 将SQL转换为抽象语法树
      • Hive驱动模块中的编译器
    • 抽象语法树转换成查询块
    • 重写逻辑查询计划,进行优化合并多于操作
    • 逻辑计划转换成物理计划
    • 选择最佳的优化
    • 输出
  • Hive本身是不会生成MapReduce程序的

  • 需要通过一个表示"Job执行计划"的XML文件驱动执行内需、原生的Mapper和Reducer模块

  • JobTracker通信初始化MapReduce任务,不必直接部署JoTracker所在

Impala

  • 针对Hive建立在Hadoop并且延迟高的情况
  • 简介
    • Cloudera开发的新型查询系统
    • 运行需要依赖Hive的元数据
    • 参照Dremel系统
    • 采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS&HBase进行交互查询
    • 采用相同的SQL语法ODBC驱动程序接口

架构

  • Impalad:相关查询任务
    • 架构
      • Query Planner
      • Query Coordinator
      • Query Exec Engine
    • 负责协调客户端提交的查询的执行
    • 与HDFS的数据节点运行在同一节点
    • 给其他Impalad分配任务以及手机其他Impalad的执行结构进行汇总
    • 执行其他Impalad给其分配的任务对本地HDFS&HBase进行操作
    • State Store
      • 创建statestored进程
    • 直接存储Hive中,借助Hive存储Impala的元数据
    • 采用Hive相同的元数据、相同的SQL语法、相同的ODBC驱动程序和用户接口
    • 在一个Hadoop平台上可以统一部署Hive和Impala等分析工具,实现在一个平台上面可以同时满足批处理和实时查询

查询执行过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

与Hive比较

  1. 使用相同的存储数据池
  2. 使用相同的元数据
  3. 对SQL的解释处理比较相似都是通过词法分析生成执行计划
  4. 总结
    • 并不是为了取代Hive
    • 与hive配合使用更佳
    • 使用Hive进行数据转换处理,之后在使用Impala在Hive处理之后的结果数据集上进行快速的数据分析

编程实战

  • 创建
hive> create database if not exists hive;
hive> use hive;
hive> create table if not exists usr(id bigint, name string, age int)
hive> location '/~';
hive> create view little_usr as select id,age from usr;
  • 查看
hive> show databases;
hive> show databases like 'h.*'; # 所有数据库
hive> use hive;
hive> show tables;
hive> show tables in hive like 'u.*'; # 所有表和视图
  • 装载
hive> load data local inpath '/~' overwirte into table usr; # 覆盖数据,不想覆盖去掉overwirte
# hdfs://~ 是从分布式文件系统
hive> load data inpath 'hdfs://~'
	> overwirte into table usr;

实际操作

实验室传送门

©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页