zoukankan      html  css  js  c++  java
  • 大数据- Hive

    构建在Hadoop之上的数据仓库,数据计算使用MR,数据存储使用HDFS
            由于数据计算使用mapreduce。因此通经常使用于进行离线数据处理
    Hive 定义了一种类 SQL 查询语言——HQL
            类似SQL,但不全然同样
    可觉得是一个HQL-->MR的语言翻译器
    简单,easy上手

    有了Hive,还须要自己写MR程序吗
            Hive的HQL表达的能力有限
                    迭代式算法无法表达
                    有些复杂运算用HQL不易表达
            Hive效率较低
                    Hive自己主动生成MapReduce作业。通常不够智能;
                    HQL调优困难,粒度较粗
                    可控性差

    Hive各模块组成
            用户接口
                    包含 CLI,JDBC/ODBC,WebUI
            元数据存储(metastore)
                    默认存储在自带的数据库derby中,线上使用时一般换为MySQL
            驱动器(Driver)
                    解释器、编译器、优化器、运行器
            Hadoop
                    用 MapReduce 进行计算,用 HDFS 进行存储

    Hive部署架构-实验环境


    Hive部署架构-生产环境


    数据模型

    Partition 和Bucket 
    Partition
            为降低不必要的暴力数据扫描,能够对表进行分区
            为避免产生过多小文件。建议仅仅对离散字段进行分区
    Bucket
            对于值较多的字段,可将其分成若干个Bucket
            可结合Partition与Bucket使用

    select语句
            不支持having和exist in操作, 可转换为LEFT SEMI JOIN操作
            Join(仅支持等值连接),不支持非等值的连接

    Order by和Sort by 
    Order by
            启动一个reduce task
            数据全局有序
            速度可能会很慢
            Strict模式下,必须与limit连用
    Sort by
            能够有多个reduce task
            每一个Reduce Task内部数据有序。但全局无序
            通常与distribute by

    Distribute by与Cluster by
    distribute by
            相当于MapReduce中的paritioner,默认是基于hash实现的;
            与sort by连用,可发挥非常好的作用
    cluster by
            当distribute by与sort by(降序)连用,且尾随的字段 同样时,可使用cluster by简写。

    用户自己定义函数UDF:扩展HQL能力的一种方式

    HQL支持索引吗?
            HQL运行过程主要是并行地暴力扫描。

    眼下Hive仅支持单表索引,但提供了索引创建接口和调用方法,可由用户依据须要实现索引结构;

    HQL支持update操作吗?
            不支持。Hive底层是HDFS,HDFS仅支持追加操作。不支持随机写
    Skew Data处理机制?
            指定skew 列:CREATE TABLE list_bucket_single (key STRING, value STRING) SKEWED BY (key) ON (1,5,6);
            为skew task分配很多其它资源(TODO)
            将skew task分解成多个task,再合并结果(TODO)

    Hive On HBase
    使用HQL处理HBase中的数据
            比直接通过HBase API存取数据方便。
            但性能更低,相当于把在线处理转为批处理
    存在问题
            不够成熟
            不能按时间戳获取数据,默认总是取最新的数据

    Hive的类似系统
    Stinger
            下一代Hive被称为“Stinger”,其底层的计算引擎将由Tez替换MapReduce
            Tez相比于MapReduce具有众多优势:
                    提供了多种算子(比方Map、Shuffle等)供用户使用;
                    将多个作业合并成一个作业,降低磁盘读写IO;
                    充分利用内存资源。


    Shark
            Hive On Spark(http://spark.incubator.apache.org/);
            Spark是一个内存计算框架,相比于MapReduce,效率更加高效(部分測试表明,速度快100x)。
            Shark全然兼容Hive,底层计算引擎採用Spark。


    Impala
            底层计算引擎不再採用MR。而是使用与商用并行关系数据库类似的分布式查询引擎;

    性能比較





  • 相关阅读:
    Python模块笔记
    js日期
    js字符串
    js數字
    js對象構造
    js 錯誤
    js break和continue
    js條件結構和循環結構
    js運算符
    js函數
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6971954.html
Copyright © 2011-2022 走看看