大数据入门-Hadoop基础

1 大数据背景

1-1 大数据4V特性

数据量 Volume

多样性,复杂性 Variety(结构化和非结构化数据)

基于高度分析的新价值 Value (价值密度的高低和数据总量是成反比的)

速度 Velocity

1-2 大数据带来的技术变革

技术驱动:数据量大

存储:文件存储 ===> 分布式存储

计算:单机 ===> 分布式计算

网络:百兆 ===> 万兆

DB: Mysql(RDBMS) ===> NoSql(HBase/Redis...)

商业驱动:从数据中分析出商业价值

1-3 大数据现在的模式

1) 手握大数据,没有大数据思维(电信行业,政府机关,金融机构)

2) 没有大数据,有大数据思维 (IT咨询服务行业)

3) 既有大数据,又有大数据思维 (Google,阿里,亚马逊)

单机:CPU,Memory,Disk

分布式并行计算/处理

数据采集:Flume,Sqoop

数据存储:Hadoop

数据处理,分析,挖掘:Hadoop,Spark,Flink...

数据可视化:ECharts

1-5 大数据在技术架构上带来的挑战

1)对现有的数据库管理技术的挑战

2)经典数据库技术并没有考虑数据的多类别,比如图像,声音,视频等数据

3)实时性所带来的技术性的挑战

4)网络架构,数据中心,运维的挑战

5)数据隐私

6)数据源的复杂多样

1-6 如何对大数据进行存储和分析

瓶颈:存储容量,读写速度,计算效率

1-7 大数据的典型应用

1)count/sum/avg ---> group by/join ---> 窗口分析函数 ---> 异常/欺诈检测 ---> 人工智能

2)报表 ---> 用户细分(标签,画像) ---> 指标监控 ---> 指标预警

2 初识Hadoop

2-1 Hadoop概述

Doug Cutting ---> Hadoop之父

reliable,scalable,distributed 可靠,可扩展,分布式

Hadoop是一个分布式的系统基础架构,提供分布式的存储(一个文件被拆分成很多块,并且以副本的方式存储在各个节点中)和计算,用户可以在不了解分布式底层细节的情况下进行使用。

分布式文件系统:HDFS(Hadoop Distributed File System)

实现将文件分布式存储在很多的服务器上

分布式计算框架:MapReduce实现在很多机器上进行分布式并行计算

分布式资源调度框架:YARN 实现集群资源管理以及作业的统一调度

2-2 HDFS 分布式存储框架(Hadoop Distributed File System )

源自于GFS

特点:扩展性,容错性,海量数据存储

工作机制:将文件切分成指定大小的数据块,并以多副本的方式存储在多台机器上

文件:test.log 200M

block(块):默认的块大小为 128M,则该文件被分为 1*128+1*72M 两个块

副本:HDFS默认有3副本

数据的切分,多副本,容错等操作,对于用户来说是透明的

2-3 MapReduce 分布式计算框架

源自于谷歌的MapReduce 04.12

特点:扩展性,容错性,海量数据离线处理

2-4 YARN 资源调度系统

Yet Another Resouce Neogotiator

负责整个集群资源的管理和调度

特点:扩展性,容错性,多框架资源调度

2-5 Hadoop之高可靠性(HA)

1)数据存储:数据块多副本存储

2)数据计算:重新调度作业计算

2-6 Hadoop之高扩展性

1)存储计算资源不够时,可以横向的线性扩展机器

2)一个集群中可以包含数以千计万计的节点

2-7 其他优势

1)存储在廉价机器上,降低成本

2)成熟的生态圈

2-8 狭义的Hadoop 和广义的Hadoop

狭义:HDFS + MR +YARN

广义:Hadoop生态系统,小而精的多个小系统

2-9 Hadoop生态系统特点

1)开源,生态活跃

2)包括了大数据处理的方方面面

3)成熟的生态圈

2-10 Hadoop常用的发行版以及选型

1)Apache:纯开源,不同版本,不同框架之间整合不好(jar冲突)

2)CDH: cm(Cloudera manager)通过页面一键安装各种框架,升级,cm不开源,与Apache版本有冲突

3)Hortonworks: 原装Hadoop,纯开源,支持TEZ,企业级安全不开源

4)MapR:不建议

3 HDFS

3-1 HDFS概述

The Hadoop Distributed File System

1)分布式

2)commodity hardware 廉价机器,通用的

3)fault-tolerant 高容错

4)high throughout 高吞吐量

5) large data sets 大数据集

3-2 HDFS前提和设计目标

1)Hardware Failure 硬件错误

每个机器只存储文件的部分数据,按照块存储

2)Streaming Data Access 流式数据访问

数据访问时的高吞吐量,但不考虑延迟性

3)Large Data Sets 大规模数据集

不怕数据大,就怕数据小

4)Moving Computation is Cheaper than Moving Data.

移动计算比移动数据更划算

3-3 HDFS架构 ******

1) NameNode 和 DataNode

2) master/slave的架构

3)NN : the file system namespace 对文件架构的管理

对客户端访问数据的管理

4)DN: data storage 存储数据

5)a file is split into one or more blocks.

6) blocks are stored in a set of dataNodes.

7) NN:CRUD 增删改查

8)determins the mapping of blocks to datanodes

决定块存放在具体的哪个DN上

9)通常情况下一个机器部署一个节点

3-4 使用HDFS API的方式来操作HDFS文件系统

注意:1)若以命令行方式创建文件到HDFS,则副本数以设置的为主

2)若以代码的方式,则要设置 configuration的副本值,,默认为3

3-5 副本的摆放策略

1)本rack的一个节点上 1)本rack的一个节点上

2)另外一个rack的节点上 2)本rack的另外一个节点上

3)与2相同的rack的另外一个节点上 3)不同rack的一个节点上

3-6 HDFS元数据管理

元数据:HDFS的目录结构以及每个文件的Block信息(id,副本数,位置)

存放在什么地方:dfs/name/...

Q1: 元数据都存放在内存中,若节点挂了,怎么办?

An:定期会将内存中的元数据信息序列化到硬盘上。

若在周期内,则将时间段内的所有对HDFS相关的操作指令写在editlogs中,再将两者copy到SecondNameNode中。

此时SNN将fsimage和editlogs同时加载到内存中,并生成一个新的fsimage,此时,若节点挂掉,只需要重新加载新的fsimage,即可恢复元数据结构。。。。。这种机制称为checkpoint

3-7 safemode

当刚刚启动NN时,大概30s中时间,会自动退出safemode,当处于safemode时,HDFS是不能进行写操作的

3-8 HDFS命令行操作

hadoop fs -ls /

hadoop fs -put test.txt /

hadoop fs -get /test.txt

hadoop fs -cat /test.txt

hadoop fs -mkdir /hdfs-test

hadoop fs -mv /test.txt /hdfs-test

hadoop fs -rm /test.txt

hadoop fs -rmdir /hdfs-test

hadoop fs -rm -r /test.txt

4 分布式处理框架 MapReduce

海量数据离线处理,易开发,易运行

将作业拆分成map作业和reduce作业

MapReduce编程模式之执行步骤

1)准备map处理的输入数据

2)Mapper处理

3)Shuffle

4)Reducer处理

5) 输出结果

map端的聚合操作就叫做combiner,聚合的逻辑和reduce是一样的

优点:能减少IO和网络开销,提升作业的执行性能

缺点:求平均值时会出错

即combiner要根据情况来使用

Partitioner决定Maptask输出的数据交由哪个reducerTask来处理

默认实现:分发的key的hash值与reduceTask个数取模

numReduceTasks:你的作业所指定的reducer的个数,决定了reduce作业输 出文件的个数

HashPartitioner是MapReduce默认的分区规则

5 资源调度框架YARN

5-1 YARN产生的背景

1) MR 1.x ===> MR 2.x

1.x中,master/slave: JobTracker/TaskTracker

JobTracker:单点,压力大

仅仅只能够支持MR作业

2)资源利用率和运维成本

所有的计算框架运行在一个集群中,共享一个集群的资源,按需分配

5-2 YARN概述

Yet Another Resource Negotiator

通用的资源管理系统

为上层应用提供统一的资源管理和调度

5-3 YARN的架构 *****

client,RM,NM,AM

client:向RM提交任务,杀死任务

AM:每个应用程序对应一个AM,AM会向RM申请资源,用于在NM上启动对应的Task ,数据切分

NM:干活的,向RM发送心跳信息,报告任务的执行情况,接收RM的请求来启动任 务,处理来自AM的命令

RM:集群中同一时刻对外提供服务的只有一个,负责资源相关。

处理来自客户端的请求:提交,杀死。

启动/监控AM

监控NM

Container:进程,任务的运行抽象,memory,cpu...

task是运行在container里,可以运行am,也可以运行map/reduce Task

6 用户行为日志

每一次访问的行为(访问,搜索)产生的日志

历史行为数据 <=== 历史订单数据 ==> 推荐 ==> 订单的转化量,转化率

PV(访问量) UV(独立访客数)

存在的问题:

每个MR作业都去全量读取待处理的原始日志,如果数据量很大,是不是会疯了

解决办法:ETL(数据清洗)

全量数据不方便进行计算的,最好是进行一步处理后在进行相应的统计分析

去除一些不需要的字段,将需要的字段重新拼接在一起

压缩(集群cpu负载不高时)

转移ETL后的数据至冷集群(一段时间不动的数据)中,其中热集群(当前要处理的一段时间的数据)

再将数据转移到对象存储上,比如S3

转移数据或者改变数据存储格式为列式存储(.orc格式...)

7 Hive 数据仓库

7-1 hive产生的背景

MapReduce编程不方便(编程门槛比较高)

HDFS上的文件并没有schema(表明,字段名,字段类型)的概念,则传统 RDBMS人员的并不能够直接操作文件

7-2 hive是什么

1)由facebook开源,用于解决海量结构化日志的数据统计问题

2)构建在Hadoop之上的数据仓库

3)Hive提供的SQL查询语言:HQL

4)底层支持多种不同的执行引擎 MR/TEZ/Spark(hive 2.0)

5)hive只是一个客户端而已,并不涉及到集群的概念

7-3 hive概述之为什么要使用hive

1)简单,容易上手

2)为超大数据集设计的离线计算/扩展框架

3)*****统一的元数据管理:

hive的数据是存放在HDFS上

元数据信息:(记录数据的数据)是存放在Mysql中

7-4 Hive的体系架构

client :shell,thrift/jdbc (server/client),WebUI(HUE/ Zeepelin)

metastore:元数据信息

Driver

MapReduce

HDFS,Mysql

7-5 Derby只能进行单客户端的操作,就是所谓的单session,所以使用mysql 来存储元数据信息

7-6 Hive中的DDL

Hive Data Definition Language

即:create ,delete.alter...

小技巧:1)desc database extended + 库名

查看数据库详细信息

2)set hive.cli.print.current.db=true;

会出现目前操作的数据库 hive(test_db)>

3) !clear; 清空控制台

7-7 Hive中的DML

Hive Data Manipulation Language

即:load,insert...

local:本地 若不带local,则代表从HDFS中load数据

7-8 聚合:max/min/count/avg/sum

7-9 分组:group by

规则:出现在select中的字段,如果没有出现在聚合函数里,那一定要出现在group by里

对于分组函数的过滤,要使用hiving,不能使用where

7-10 join 多表联合

7-11 外部表的使用

Managed_table 内部表

删除表时:HDFS上的数据被删除了,元数据信息也被删除了

External_table 外部表

删除表时:HDFS上的数据不会被删除,元数据信息被删除了

当重新建该表时,数据会被自动加载进表中

7-12 hive处理流程

1)对原始数据进行ETL

2)把ETL输出的数据加载到分区表里

3)各个维度统计结果的数据输出到各自维度的表里

4)将数据导出

如果一个框架不能落地到SQL层面,这个框架就不是一个非常适合的框架