hadoop数据仓库实战知识点

avatar
作者
筋斗云
阅读量:0

 1.hive入门:

  1. Hive 简介

    • Hive 是一个建立在 Hadoop 之上的数据仓库工具
    • 提供 SQL 查询功能,将 SQL 语句转换为 MapReduce 任务在 Hadoop 上执行
    • 支持常见的数据类型和 SQL 语法,方便数据分析和处理
  2. Hive 架构

    • 客户端: Hive CLI、JDBC/ODBC
    • 元数据存储: 通常使用 MySQL 或 PostgreSQL
    • 执行引擎: MapReduce、Spark、Tez 等
    • 数据存储: HDFS、云存储等
  3. Hive 数据模型

    • 数据库(Database)
    • 表(Table)
      • 内部表(Managed Table)
      • 外部表(External Table)
    • 分区(Partition)
    • 桶(Bucket)
  4. Hive 数据类型

    • 基本数据类型: STRING、INT、BIGINT、FLOAT、DOUBLE 等
    • 复杂数据类型: ARRAY、MAP、STRUCT
  5. Hive 常用 SQL 语句

    • DDL: CREATE/DROP/ALTER DATABASE/TABLE
    • DML: INSERT/LOAD DATA
      -查询语句: SELECT/WHERE/GROUP BY/ORDER BY 等
  6. Hive 优化

    • 分区优化
    • 桶优化
    • 压缩优化
    • 索引优化
  7. Hive 与 Spark SQL 对比

    • Spark SQL 是基于内存的执行引擎,性能更优
    • Hive 基于磁盘,适合处理大数据量

 2.hive数据库及表操作:

  1. 数据库操作

    • 创建数据库: CREATE DATABASE [IF NOT EXISTS] database_name;
    • 切换数据库: USE database_name;
    • 查看数据库: SHOW DATABASES;
    • 删除数据库: DROP DATABASE [IF EXISTS] database_name [CASCADE];
  2. 表操作

    • 创建表:
      • 内部表: CREATE TABLE [IF NOT EXISTS] table_name (col_name data_type, ...) [COMMENT 'table_comment'] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION 'hdfs_path'];
      • 外部表: CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name (col_name data_type, ...) [COMMENT 'table_comment'] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] LOCATION 'hdfs_path';
    • 查看表: SHOW TABLES [IN database_name] [LIKE 'pattern'];
    • 描述表: DESCRIBE [EXTENDED|FORMATTED] table_name;
    • 修改表:
      • 重命名表: ALTER TABLE table_name RENAME TO new_table_name;
      • 增加/修改/删除列: ALTER TABLE table_name ADD|CHANGE|REPLACE COLUMNS (col_name data_type [COMMENT 'col_comment'], ...);
      • 增加/删除分区: ALTER TABLE table_name ADD|DROP PARTITION (partcol_name=partcol_value, ...);
      • 修改表:
        • 增加/删除分区: ALTER TABLE table_name ADD|DROP PARTITION (partcol_name=partcol_value, ...);
        • 增加/修改/删除列: ALTER TABLE table_name ADD|CHANGE|REPLACE COLUMNS (col_name data_type [COMMENT 'col_comment'], ...);
        • 重命名表: ALTER TABLE table_name RENAME TO new_table_name;
        • 删除表: DROP TABLE [IF EXISTS] table_name;
        • DROP TABLE [IF EXISTS] table_name;

 3.hive元数据:

  1. 元数据存储

    • Hive 的元数据存储在关系型数据库中,如 MySQL、PostgreSQL 等。
    • 元数据包括数据库、表、分区、列、函数等信息。
    • 元数据存储在 Hive Metastore 中,可以通过 Thrift 服务访问。
  2. 元数据配置

    • Hive 的元数据配置在 hive-site.xml 中进行设置。
    • 主要配置项包括:
      • javax.jdo.option.ConnectionURL: 元数据数据库的 JDBC 连接 URL
      • javax.jdo.option.ConnectionDriverName: 元数据数据库的 JDBC 驱动类名
      • javax.jdo.option.ConnectionUserName: 元数据数据库的用户名
      • javax.jdo.option.ConnectionPassword: 元数据数据库的密码
    • 可以使用内嵌的 Derby 数据库作为元数据存储,但生产环境通常使用外部数据库。
  3. 元数据管理

    • 查看元数据: SHOW DATABASES;SHOW TABLES;DESCRIBE table_name; 等
    • 管理元数据: CREATE DATABASE/TABLEALTER TABLEDROP TABLE 等
    • 备份和恢复元数据:
      • 备份: 导出 Hive Metastore 数据库
      • 恢复: 导入备份的 Metastore 数据库
  4. 元数据缓存

    • Hive 会缓存一些常用的元数据信息,以提高查询性能。
    • 缓存的元数据包括表信息、分区信息等。
    • 可以通过配置 hive.metastore.cache.pinobjtypes 来控制缓存的对象类型。
  5. 元数据安全

    • 元数据库应该设置合适的访问权限,防止未授权的访问。
    • 定期备份元数据,以防止数据丢失。
    • 监控元数据库的健康状况,及时发现和解决问题。

4.hive高级操作: 

  1. 分区表

    • 分区表可以提高查询性能,按照某些列对数据进行分区存储。
    • 创建分区表: CREATE TABLE table_name PARTITIONED BY (col1 INT, col2 STRING);
    • 添加分区: ALTER TABLE table_name ADD PARTITION (col1=1, col2='abc');
    • 删除分区: ALTER TABLE table_name DROP PARTITION (col1=1, col2='abc');
    • 优化分区表: 合并小文件、优化分区裁剪等。
  2. 外部表

    • 外部表指向已经存在的数据源,不受 Hive 管理。
    • 创建外部表: CREATE EXTERNAL TABLE table_name LOCATION '/path/to/data';
    • 外部表适用于数据源不受 Hive 控制的情况。
    • 删除外部表时,只会删除元数据,不会删除实际数据。
  3. 分桶表

    • 分桶表根据某些列的 hash 值将数据划分到不同的桶中存储。
    • 创建分桶表: CREATE TABLE table_name CLUSTERED BY (col1) INTO 16 BUCKETS;
    • 分桶表可以提高连接查询的性能。
    • 分桶表适用于数据量大、查询复杂的场景。
  4. 视图

    • 视图是一个虚拟的表,存储的是查询语句,而不是实际数据。
    • 创建视图: CREATE VIEW view_name AS SELECT * FROM table_name;
    • 视图可以简化查询、隐藏复杂的逻辑、提高安全性。
    • 视图是只读的,不支持 INSERT/UPDATE/DELETE 操作。
  5. 函数

    • Hive 支持自定义函数(UDF/UDAF/UDTF)扩展功能。
    • 创建函数: CREATE FUNCTION function_name AS 'class.name' USING JAR '/path/to/jar';
    • 内置函数: COUNT()SUM()AVG() 等聚合函数,SUBSTRING()CONCAT() 等字符串函数等。
    • 自定义函数可以实现复杂的数据处理逻辑。
  6. 调度和监控

    • Hive 可以与调度系统(如 Oozie)集成,实现定时任务调度。
    • 可以使用 Hive 的日志和 Hadoop 的监控工具(如 Ganglia)监控 Hive 的运行状况。
    • 监控指标包括查询执行时间、资源使用情况、错误信息等。

5.hive函与streamimg:

  1. 内置函数

    • Hive 提供了丰富的内置函数,包括:
      • 数学函数: ABS()ROUND()SQRT() 等
      • 字符串函数: CONCAT()SUBSTR()TRIM() 等
      • 日期函数: YEAR()MONTH()DATEDIFF() 等
      • 聚合函数: COUNT()SUM()AVG() 等
    • 可以使用 DESCRIBE FUNCTION function_name; 查看函数的用法和说明。
  2. 自定义函数(UDF)

    • 用户可以编写自己的 UDF 来扩展 Hive 的功能。
    • 创建 UDF: 继承 org.apache.hadoop.hive.ql.exec.UDF 类,实现 evaluate() 方法。
    • 注册 UDF: CREATE FUNCTION function_name AS 'class.name' USING JAR '/path/to/jar';
    • 使用 UDF: SELECT function_name(col1, col2) FROM table_name;
  3. 自定义聚合函数(UDAF)

    • UDAF 用于实现复杂的聚合逻辑,如求中位数、计算标准差等。
    • 创建 UDAF: 继承 org.apache.hadoop.hive.ql.exec.UDAF 类,实现 init()iterate()terminatePartial()merge()terminate() 方法。
    • 注册 UDAF: CREATE AGGREGATE FUNCTION function_name AS 'class.name' USING JAR '/path/to/jar';
    • 使用 UDAF: SELECT function_name(col1) FROM table_name;
  4. 自定义表生成函数(UDTF)

    • UDTF 用于将一行输入转换为多行输出,如 explode() 函数。
    • 创建 UDTF: 继承 org.apache.hadoop.hive.ql.exec.UDTF 类,实现 initialize()process()close() 方法。
    • 注册 UDTF: CREATE FUNCTION function_name AS 'class.name' USING JAR '/path/to/jar';
    • 使用 UDTF: SELECT function_name(col1) FROM table_name LATERAL VIEW function_name(col1) tmp AS output_col;
  5. Streaming

    • Hive Streaming 允许用户使用外部程序(如 Python、Java)处理数据。
    • 使用 Streaming 时,Hive 会启动外部进程,通过标准输入/输出与之通信。
    • 优点:
      • 可以使用任意语言编写 Mapper 和 Reducer 逻辑
      • 可以处理复杂的数据转换和清洗任务
    • 缺点:
      • 性能可能会比原生 Hive 查询低
      • 需要额外维护外部程序

6.hive视图与索引: 

  1. 视图

    • 视图是一个虚拟的表,存储的是查询语句,而不是实际数据。
    • 创建视图: CREATE VIEW view_name AS SELECT * FROM table_name;
    • 视图的优点:
      • 简化查询: 将复杂的查询逻辑封装在视图中,方便重复使用。
      • 隐藏复杂逻辑: 通过视图可以隐藏表结构的复杂性。
      • 提高安全性: 通过视图可以控制用户对数据的访问权限。
    • 视图的局限性:
      • 视图是只读的,不支持 INSERT/UPDATE/DELETE 操作。
      • 视图查询性能可能会比直接查询表差,因为需要执行视图定义的查询。
  2. 物化视图

    • 物化视图是一种特殊的视图,它将查询结果缓存到磁盘上。
    • 创建物化视图: CREATE MATERIALIZED VIEW mv_name AS SELECT * FROM table_name;
    • 物化视图的优点:
      • 查询性能更好,因为数据已经预先计算好并存储在磁盘上。
      • 可以定期刷新,保持数据的实时性。
    • 物化视图的缺点:
      • 需要额外的存储空间来存储物化视图数据。
      • 需要定期维护物化视图,保持数据的一致性。
  3. 索引

    • Hive 支持两种索引类型:
      • 基于文件的索引: 为表中的某些列创建索引文件,加快查询速度。
      • 基于 bitmap 的索引: 为表中的某些列创建 bitmap 索引,适用于基数较低的列。
    • 创建索引: CREATE INDEX index_name ON TABLE table_name (col1, col2) AS 'index.handler.class' WITH DEFERRED REBUILD;
    • 使用索引: Hive 在查询时会自动使用索引,无需手动指定。
    • 索引的优点:
      • 可以加快查询速度,特别是针对某些列的过滤查询。
      • 可以减少扫描的数据量,从而提高查询效率。
    • 索引的缺点:
      • 需要额外的存储空间来存储索引文件。
      • 索引文件需要定期维护,会增加数据更新的开销。

7.hive调优:

  1. 数据输入优化:

    • 使用合适的文件格式,如 Parquet、ORC 等压缩格式
    • 合理设置分区,提高查询效率
    • 使用分桶技术,提高数据处理性能
  2. SQL 语句优化:

    • 尽量使用 WHERE 条件过滤,减少扫描数据量
    • 合理使用 JOIN 操作,选择合适的 JOIN 策略
    • 使用 LIMIT 语句限制返回结果数量
    • 对于复杂的 SQL,可以使用 Hive 的优化器规则进行优化
  3. 资源配置优化:

    • 合理设置 Hive 的 JVM 参数,如堆内存大小、垃圾回收策略等
    • 配置合适的 MapReduce 任务资源,如 Mapper/Reducer 数量、内存等
    • 使用 Tez 引擎替代 MapReduce,提高查询性能
  4. 并发优化:

    • 合理设置 Hive 的并发度,如 Mapper/Reducer 数量
    • 使用 Hive 的动态分区功能,提高并发性能
    • 合理配置 HDFS 的块大小和复制因子,提高并行处理能力
  5. 其他优化技巧:

    • 使用 Hive 的缓存机制,如元数据缓存、查询结果缓存等
    • 使用 Hive 的索引功能,提高查询性能
    • 定期维护 Hive 的统计信息,提高查询优化器的决策质量

 8.hive与hbase集成:

  1. 数据存储集成:

    • Hive 可以直接读取 HBase 表中的数据,通过 HBaseStorageHandler 实现
    • 可以将 Hive 表映射到 HBase 表,实现数据的双向访问
  2. 查询优化集成:

    • Hive 可以利用 HBase 的索引机制,提高查询性能
    • 可以在 Hive 中使用 HBase 的过滤器功能,减少扫描数据量
  3. 事务处理集成:

    • Hive 不支持事务,但可以利用 HBase 的事务特性来实现更新、删除等操作
    • 可以使用 Hive 的 ACID 表特性与 HBase 的事务特性相结合
  4. 数据处理集成:

    • Hive 可以利用 HBase 的 coprocessor 机制,实现复杂的数据处理逻辑
    • 可以在 Hive 中使用 HBase 的 MapReduce 功能,进行分布式数据处理
  5. 元数据管理集成:

    • Hive 的元数据可以存储在 HBase 中,实现元数据的高可用和扩展性
    • 可以利用 HBase 的分布式特性,提高元数据的访问性能
  6. 安全性集成:

    • Hive 可以利用 HBase 的安全机制,如基于 Kerberos 的认证和授权
    • 可以在 Hive 中使用 HBase 的 ACL 机制,实现细粒度的数据访问控制

9.数据迁移框架sqoop:

  1. Sqoop 概述

    • Sqoop 是一个用于在 Hadoop 和关系型数据库之间传输数据的工具
    • 支持从关系型数据库向 HDFS、Hive、HBase 等大数据组件的数据导入和导出
  2. Sqoop 架构

    • Sqoop 客户端:负责接收用户的导入/导出命令,并生成相应的 MapReduce 作业
    • Sqoop 服务端:负责执行 MapReduce 作业,完成数据的导入/导出
  3. Sqoop 支持的数据库

    • 主流的关系型数据库,如 MySQL、Oracle、PostgreSQL、SQL Server 等
    • 支持自定义 JDBC 驱动,扩展支持更多数据库
  4. Sqoop 导入数据

    • 全表导入:将整个表导入到 HDFS、Hive 或 HBase
    • 增量导入:仅导入自上次导入后新增的数据
    • 自定义 SQL 导入:通过自定义 SQL 语句导入数据
  5. Sqoop 导出数据

    • 将 HDFS、Hive 或 HBase 中的数据导出到关系型数据库
    • 支持并行导出,提高导出效率
  6. Sqoop 高级功能

    • 支持数据压缩,提高数据传输效率
    • 支持自定义 MapReduce 作业,实现更复杂的数据处理逻辑
    • 支持 Kerberos 认证,确保数据传输的安全性
  7. Sqoop 最佳实践

    • 合理设置 Sqoop 的并发度,提高数据传输效率
    • 针对不同的数据库和数据量,选择合适的导入/导出策略
    • 结合其他大数据组件,如 Hive、HBase 等,实现更复杂的数据处理需求

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!