Hive-数据分析系统

背景

为了降低大数据领域使用mepreduce的使用门槛,提高分析效率,大数据引用了对sql的支持

  • mepreduce对应hive
  • spark对应spark sql

sql on hadoop

目的:

  • 基于计算引擎
  • 基于mpp架构

hive架构

hive 对外访问
  • hive对外提供了三种访问方式,包括web ui 、cli 、thrift协议
hive 后端主要由三个服务组成
  • driver(驱动器) :与传统数据库的查询引擎类似,在这里指的是mepreduce或者spark等
  • metastore:hive metastore是管理和储存元信息的,在hive中默认用的是derby,但是一般用的mysql
  • hadoop:hive依赖于hadoop 储存用的是hdfs,分析用的mepreduce,资源用的是yarn等
metastore分为三种 部署模式
  • 嵌入式模式:metestore和数据库嵌入到driver中(一般用于测试)
  • 本地模式:driver和metastore运行在本地,而数据库启动在一个共享节点上
  • 远程模式:metastore运行在单独的一个节点上,由其他所有服务共享 使用beeline,jdbc等方式访问(这是一种常用的生产环境下的部署模式)
    (hive 的metastore里面的元数据可以直接被presto,impala等sql直接访问)
hive查询引擎(dag相比于mepreduce的优点:)
  • dag避免了记住分布式文件系统交换数据带来的不必要的网络和磁盘的io
  • 将重复使用的数据放在内存中加速读取效率
  • 服用资源直到sql执行完毕

hive表操作

  • 传统型数据库是插入时校验,而hive是计算式校验(数据合法的校验)
  • hive数据表是分层的
  • hive数据表的类型(临时表(只对当前session有效,如果当前session退出,则消失)、外部表(删除数据库时,只是删除了元数据)、受管理表(与元数据的生命周期是一致的,如果删除则都删除了))
  • 分区表:
    数据表可以按照某一个或者几个字段进一步划分多个数据分区(使用语句:partitioned by col_name),不同的分区其实在不同的目录中,这样在查询时候不同的分区会直接跳过,大大减少了不必要的磁盘io
  • 分桶表:
    数据表或者数据分区可以按照某个字段进一步分成若干个桶,(不如语句:clustered by(userid) into 32 buckets ,这一语句将数据表按照userid 分成32个数据桶)

hive执行引擎

image.png

hive 分区表

  • 查询时为了减少不必要的扫描可以采用分区表
  • 为了避免产生过多的小文件,建议只对离散字段进行分区

hive实用优化

  • 分区表-提高查询(partition)
  • 列式存储(parquet和orc)
  • 表连接优化(将大表放后面)
  • 尽早的过滤数据
  • 尽量原子化操作(避免复杂的语句,建议使用临时表来过渡)
  • 如果要用到union into 替换成insert into(性能能提上50%)
  • order by 改为 sort by (全局排序改为局部排序)
  • 数据倾斜

hive的事务

你可能感兴趣的:(Hive-数据分析系统)