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)

分层的优点:

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

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

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

相关推荐
大数据CLUB2 小时前
基于spark的澳洲光伏发电站选址预测
大数据·hadoop·分布式·数据分析·spark·数据开发
ratbag6720132 小时前
当环保遇上大数据:生态环境大数据技术专业的课程侧重哪些领域?
大数据
计算机编程小央姐4 小时前
跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
大数据·hadoop·信息可视化·spark·django·课程设计·食物
智数研析社5 小时前
9120 部 TMDb 高分电影数据集 | 7 列全维度指标 (评分 / 热度 / 剧情)+API 权威源 | 电影趋势分析 / 推荐系统 / NLP 建模用
大数据·人工智能·python·深度学习·数据分析·数据集·数据清洗
潘达斯奈基~5 小时前
《大数据之路1》笔记2:数据模型
大数据·笔记
寻星探路5 小时前
数据库造神计划第六天---增删改查(CRUD)(2)
java·大数据·数据库
翰林小院7 小时前
【大数据专栏】流式处理框架-Apache Fink
大数据·flink
孟意昶8 小时前
Spark专题-第一部分:Spark 核心概述(2)-Spark 应用核心组件剖析
大数据·spark·big data
IT学长编程9 小时前
计算机毕业设计 基于Hadoop的健康饮食推荐系统的设计与实现 Java 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
java·大数据·hadoop·毕业设计·课程设计·推荐算法·毕业论文
AAA修煤气灶刘哥9 小时前
Kafka 入门不踩坑!从概念到搭环境,后端 er 看完就能用
大数据·后端·kafka