BigData大数据应用开发学习笔记(03)离线处理--数据仓库Hive

BigData大数据应用开发学习笔记(03)离线处理--数据仓库Hive

一.离线批处理特点

处理时间要求不高、数据量巨大、数据格式多样、占用计算存储资源多

MR作业,Spark作业,HSQL作业实现

数据源:流式数据、文件数据、数据库

数据采集:实时采集(Flume、第三方采集),批量采集(Flume、Sqoop、第三方ETL)

离线批处理引擎:HDFS,Yarn,MapReduce,Hive,Spark,Spark SQL

业务应用:数据集市,数据仓库(交互式分析),专题库

离线批处理常用组件:

HDFS: 分布式文件系统,为各种批处理引擎提供数据存储,可以存储各种文件格式数据。

YARN: 资源调度引擎,为各种批处理引擎提供资源调度能力。

MapReduce: 大数据批处理引擎,用于处理海量数据,但是处理速度较慢。

Hive: 大数据SQL批处理引擎,用于处理SQL类批处理作业,但是处理速度较慢。

Spark: 基于内存的数据处理引擎,适合海量数据,处理速度高效。

Spark SQL: Spark处理结构化数据的一个模块。

二.数据仓库Hive

1.Hive说明

Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据。

Hive特性:

灵活方便的ETL(Extract/Transform/Load)

支持MapReduce、Tez、Spark多种计算引擎

可直接访问HDFS文件以及HBASE

易用易编程

2.Hive的数据存储

数据库、内部表、桶、分区、外部表、倾斜数据、正常数据

Hive内部表和外部表的区别

CREATE/LOAD 内部表数据移到仓库目录,外部表数据位置不移动

DROP 内部表元数据和数据会被一起删除,外部表只删除元数据

命令:

desc formatted tablename; -- 查询表的类型

alter table tablename set tblproperties('EXTERNAL'='TRUE'); -- 修改内部表为外部表

alter table tablename set tblproperties('EXTERNAL'='FALSE'); -- 修改外部表为内部表

3.Hive内置函数

show functions; -- 查看系统函数

desc function upper; -- 查看函数的用法

desc function extended upper; -- 详细显示函数的用法

常用函数:

数学函数:round(),abs(),rand(),...

日期函数:to_date(),current_date(),...

字符串函数:trim(),length(),substr(),...

4.Hive自定义函数UDF

UDF(User-Defined-Function):用于接收单个数据行,并产生一个数据行作为输出。

UDAF(User-Defined Aggregation Function):用于接收多个数据行,并产生一个数据行作为输出。

UDTF(User-Defined Table-Generating Functions):用于接收单个数据行,并产生多个数据行作为输出。

UDF开发步骤:

继承org.apache.hadoop.hive.ql.exec.UDF

实现一个evaluate()方法,编写要实现的逻辑

打包并上传到HDFS

Hive创建临时函数

调用该函数

5.Hive调优:

数据倾斜:

数据倾斜指计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。

容易造成数据倾斜的原因归纳为几点:

group by

distinct count (distinct xxx)

join

调优参数:

set hive.map.aggr=true; -- 在Map中会做部分聚集操作,效率更高但需要更多内存

set hive.groupby.skewindata=true; -- 生成的查询计划会有两个MRjob,可实现数据倾斜时负载均衡

map side join:

set hive.auto.convert.join=true; -- 当连接一个较小和较大表时,把较小的表直接放到内存中,然后再对较大的表进行Map操作。

并行执行:

每个查询会被Hive转化为多个阶段,当有些阶段关联性不大时,可以并行执行,减少整个任务的执行时间。

set hive.exec.parallel=true; -- 开启并行

set hive.exec.parallel.thread.number=8; -- 设置同一个SQL允许并行任务的最大线程数

6.HQL开发(Hive SQL)

(1).创建表

CREATE EXTERNAL TABLE IF NOT EXISTS tablename (

id INT Comment '编号',

name STRING Comment '姓名',

salary DOUBLE Comment '薪水金额',

deductions MAP<STRING, DOUBLE> Comment '缴税税种'

)

-- "DELIMITED FIELDS TERMINATED BY"指定列与列之间的分隔符为',',"MAP KEYS TERMINATED BY"指定MAP中健值的分隔符为'&'

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' MAP KEYS TERMINATED BY '&'

-- 指定表的存储格式为TEXTFILE

STORED AS TEXTFILE;

(2).数据加载

从本地加载数据到表

LOAD DATA LOCAL INPATH '/opt/hive_examples_data/employee_info.txt' OVERWRITE INTO TABLE employee_info;

从HDFS加载数据到表

LOAD DATA INPATH '/usr/hive_examples_data/employee_contract.txt' OVERWRITE INTO TABLE employee_contract;

(3).查询

一般查询:

SELECT a.name,

b.tel_phone,

b.email

FROM employees_info a

JOIN employees_contact b ON a.id = b.id

WHERE usd_flag='D';

将查询结果写到表中的某个分区中

INSERT OVERWRITE TABLE employees_info_extended PARTITION (entrytime = '2019')

SELECT a.id,

a.name,

b.tel_phone

FROM employees_info a

JOIN employees_contract b ON a.id = b.id

WHERE a.entrytime = '2019';

查询:

SELECT COUNT(*) FROM employees_contract;

SELECT a.name, b.tel_phone

FROM employees info a

JOIN employees contact b ON a.id = b.id

WHERE b.email like '%cn';

7.Hive数据仓库

数据集市(Data Mart)与数据仓库。

数据仓库分层:

ODS:原始数据层(Operational Data Store)

DWD:结构和粒度与原始表保持一致,简单清洗(Data Warehouse Detail)

DWS:以DWD为基础,进行轻度汇总(Data Warehouse Service)

ADS:为各种统计报表提供数据(Application Data Store)

分层的优点:

复杂问题简单化:将任务分解成多个步骤完成,每一层只处理单一的步骤,比较简单,方便定位。

减少重复开发:规范数据分层,通过中间层数据,减少最大的重复计算,增加一次计算结果的复用性。

隔离原始数据:避免数据异常或者数据敏感,使真实数据与统计数据解耦。

相关推荐
西猫雷婶35 分钟前
STAR-CCM+|K-epsilon湍流模型溯源
大数据·云计算
2501_924889552 小时前
商超高峰客流统计误差↓75%!陌讯多模态融合算法在智慧零售的实战解析
大数据·人工智能·算法·计算机视觉·零售
曼岛_3 小时前
[系统架构设计师]大数据架构设计理论与实践(十九)
大数据·系统架构·系统架构设计师
计算机编程小咖4 小时前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
.Shu.4 小时前
git实战(7)git常用命令速查表
大数据·git
haidizym5 小时前
质谱数据分析环节体系整理
大数据·人工智能·数据分析·ai4s
2501_924890526 小时前
商超场景徘徊识别误报率↓79%!陌讯多模态时序融合算法落地优化
java·大数据·人工智能·深度学习·算法·目标检测·计算机视觉
2401_8914092610 小时前
商品与股指类ETF期权买卖五档Tick分钟级历史行情数据分析
大数据·#基准指标动态·#level2毫秒级tick流·#美股数据获取方案·#期货期权合约行情
武子康11 小时前
大数据-76 Kafka 从发送到消费:Kafka 消息丢失/重复问题深入剖析与最佳实践
大数据·后端·kafka