当前位置: 首页 > news >正文

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)

    分层的优点:
复杂问题简单化:将任务分解成多个步骤完成,每一层只处理单一的步骤,比较简单,方便定位。
减少重复开发:规范数据分层,通过中间层数据,减少最大的重复计算,增加一次计算结果的复用性。
隔离原始数据:避免数据异常或者数据敏感,使真实数据与统计数据解耦。

http://www.dtcms.com/a/343839.html

相关文章:

  • 直播预约 | CATIA MODSIM SmartCAE带练营第3期:让每轮设计迭代都快人一步!
  • 【C语言16天强化训练】从基础入门到进阶:Day 6
  • 前端查漏补缺
  • 图表组件SciChart WPF再升级:v8.9带来油气井图、新交互与可视化增强
  • PDF文档安全升级:三招实现文本转曲线(防篡改+高清输出)
  • WPF控件随窗体大宽度高度改变而改变
  • Spring Boot 集成 Swagger UI 详细教程
  • 【学习】CSMM认证与CMMI认证的对比分析
  • logback-spring.xml 文件
  • jenkins实现分布式构建并自动发布到远程服务器上 jenkins实现自动打包编译发布远程服务器
  • 逆向代码笔记
  • 51单片机-驱动步进电机模块教程
  • 移动应用青少年模式开发成本解析:原生、Flutter与Uniapp方案对比-优雅草卓伊凡
  • Redis 数据类型:List 列表的深度解析与应用
  • Apache Ozone 2.0.0集群部署
  • 潇洒郎: Python实现检测鼠标移动和音视频播放行为——打造省电脚本
  • 反催收APP开发思路:用Flutter打造证据链管理工具
  • JVM 调优全流程案例:从频繁 Full GC 到百万 QPS 的实战蜕变
  • 无线数传模块实现实时信号传输,保障煤堆设备生产进度稳定
  • 【LeetCode每日一题】238. 除自身以外数组的乘积
  • 从零开始学习JavaWeb-15
  • 一、anaconda安装与测试运用
  • AlexNet读取数据集 与VGG-11网络
  • 字节Seed-OSS开源,不卷参数卷脑子
  • 防火墙双机热备
  • 【CV】OpenCV①——图形处理简介
  • C#_面向对象设计的艺术
  • [特殊字符] 高可用高并发微服务架构设计:Nginx 与 API Gateway 的协同实践
  • Oracle DB 10g 升级至 11.2.0.4报错-ORA-00132
  • 论文阅读:Do As I Can, Not As I Say: Grounding Language in Robotic Affordances