美文网首页
Hive-数据分析系统

Hive-数据分析系统

作者: 一个喜欢烧砖的人 | 来源:发表于2018-09-22 12:27 被阅读110次

    背景

    为了降低大数据领域使用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-数据分析系统

          本文链接:https://www.haomeiwen.com/subject/nyltnftx.html