大数据(九) - Hive

Hive是一个基于Hadoop的数据仓库工具,提供类SQL查询语言HQL,适用于离线数据处理。Hive包括用户接口、元数据存储、驱动器等组件,通过MapReduce进行计算和HDFS存储数据。虽然Hive简化了大数据查询,但其效率较低、HQL表达能力有限且不支持迭代算法。此外,Hive支持分区和桶的概念,以及一些特定的SQL操作,如JOIN和ORDER BY,但不支持UPDATE和非等值JOIN。Hive还允许用户自定义函数来扩展其功能,并有与HBase、Stinger、Shark和Impala等系统的交互和对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

有了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,而是使用与商用并行关系数据库类似的分布式查询引擎;

性能比较






### 大数据平台中 Hive 的运维测评与最佳实践 #### 1. Hive 运维的核心关注点 Hive 是一种基于 Hadoop 的分布式数据分析工具,其运维过程中需要重点关注以下几个方面[^1]: - **性能优化**:通过调整查询语句、分区设计以及压缩算法等方式提升查询效率。 - **资源管理**:合理分配 YARN 或 Spark 集群中的计算资源,防止因资源争抢而导致的任务失败。 - **元数据管理**:定期清理无用的表和分区,减少 Metastore 数据库的压力。 #### 2. 性能调优的最佳实践 为了提高 Hive 查询的执行速度,可以采取以下措施[^1]: - 使用合适的文件格式(如 ORC 或 Parquet),这些列式存储格式能够显著降低 I/O 开销。 - 启用谓词下推功能,在读取数据之前就过滤掉不必要的记录。 - 设置合理的并行度参数 `hive.exec.parallel` 和 `mapreduce.job.reduces` 来平衡负载分布。 #### 3. 资源调度策略 在大规模生产环境中,良好的资源调度机制至关重要。推荐采用 Fair Scheduler 或 Capacity Scheduler 对不同优先级的工作流进行隔离处理[^2]: - 定义清晰的服务级别协议(SLA),确保高优先级任务获得足够的计算能力支持。 - 动态扩展节点数量以应对突发流量高峰情况下的需求激增现象。 #### 4. 元数据治理方案 随着时间积累,数据库内的对象数目会快速增长从而影响整体表现效果因此有必要实施有效的元数据管控手段包括但不限于如下几点建议: - 自动化检测长期未被访问过的表格或者分片并且提示管理员考虑删除操作. - 利用 ACID 特性实现事务级别的更新控制使得修改过程更加安全可靠. ```sql -- 示例 SQL: 创建带有分区的外部表 CREATE EXTERNAL TABLE IF NOT EXISTS sales_data ( order_id STRING, product_name STRING, quantity INT, price FLOAT ) PARTITIONED BY (year INT, month INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/sales'; ``` #### 5. 日志监控体系构建 建立健全的日志收集分析框架可以帮助快速定位问题根源所在同时也有助于预防潜在风险的发生概率增加系统稳定性水平达到预期目标值范围内保持正常运转状态不变形不损坏等功能特性得以充分体现出来.[^1] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值