0%

本文为学习笔记,对应视频教程来自尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优

image-20220806123843410

切片与 MapTask 并行度决定机制

问题引出

  1. 对于一个大文件,Hadoop会将其拆成若干个MapTask进行并发处理。但是具体拆成多少个任务是通过什么决定的呢?
  2. HDFS中存储的block块是严格安装字节数进行拆分的,那么MapReduce时是如何保证读取文件的逻辑完整性呢?

名词解释

数据块:Block 是 HDFS 物理上把数据分成一块一块。数据块是 HDFS 存储数据单位。

数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是 MapReduce 程序计算输入数据的单位,一个切片会对应启动一个 MapTask。

阅读全文 »

本文为学习笔记,对应视频教程来自尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)P55-P58

HDFS写数据流程

image-20220803222555238

  1. 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件,NameNode 检查目标文件是否已存在,父目录是否存在。
  2. NameNode 返回是否可以上传。
  3. 客户端请求第一个 Block 上传到哪几个 DataNode 服务器上。
  4. NameNode 返回 3 个 DataNode 节点,分别为 dn1、dn2、dn3。
  5. 客户端通过 FSDataOutputStream 模块请求 dn1 上传数据,dn1 收到请求会继续调用dn2,然后 dn2 调用 dn3,将这个通信管道建立完成。
  6. dn1、dn2、dn3 逐级应答客户端。
  7. 客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存),以 Packet 为单位,dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答。
  8. 当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务器。(重复执行 3-7 步)。
阅读全文 »

本文为学习笔记,对应视频教程来自尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)P59

NameNode介绍

官方文档的介绍

HDFS has a master/slave architecture. An HDFS cluster consists of a single NameNode, a master server that manages the file system namespace and regulates access to files by clients. In addition, there are a number of DataNodes, usually one per node in the cluster, which manage storage attached to the nodes that they run on. HDFS exposes a file system namespace and allows user data to be stored in files. Internally, a file is split into one or more blocks and these blocks are stored in a set of DataNodes. The NameNode executes file system namespace operations like opening, closing, and renaming files and directories. It also determines the mapping of blocks to DataNodes. The DataNodes are responsible for serving read and write requests from the file system’s clients. The DataNodes also perform block creation, deletion, and replication upon instruction from the NameNode.

HDFS 具有主/从架构。一个 HDFS 集群包含一个 NameNode,这是一个管理文件系统命名空间和控制客户端对文件的访问的主服务器。此外,还有许多 DataNode,通常集群中每个节点一个,用于管理它们运行的节点的存储。HDFS 公开了一个文件系统命名空间,并允许将用户数据存储在文件中。在内部,一个文件被分成一个或多个块,这些块存储在一组 DataNode 中。NameNode 执行文件系统命名空间操作,例如打开、关闭和重命名文件和目录。它还确定块到 DataNode 的映射。DataNode 负责处理来自文件系统客户端的读取和写入请求。DataNodes 还负责块创建、删除、根据NameNode的指示进行复制。

HDFS Architecture

阅读全文 »

本文为学习笔记,对应视频教程来自【尚硅谷】电商数仓V5.0

数据仓库环境准备

数据仓库运行环境

Hive环境搭建
Hive引擎简介

Hive引擎包括:默认MR、tez、spark

Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。

Spark on Hive : Hive只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用RDD执行。

Hive on Spark配置

官网下载的Hive3.1.2和Spark3.0.0默认是不兼容的。因为Hive3.1.2支持的Spark版本是2.4.5,所以需要我们重新编译Hive3.1.2版本。

编译步骤:官网下载Hive3.1.2源码,修改pom文件中引用的Spark版本为3.0.0,如果编译通过,直接打包获取jar包。如果报错,就根据提示,修改相关方法,直到不报错,打包获取jar包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 1.在Hive所在节点部署Spark
[eitan@hadoop102 ~]$ tar -zxf /opt/software/spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/
[eitan@hadoop102 ~]$ mv /opt/module/spark-3.0.0-bin-hadoop3.2/ /opt/module/spark

# 2.配置SPARK_HOME环境变量
[eitan@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
# SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin

# 3.在hive中创建spark配置文件
[eitan@hadoop102 ~]$ vim /opt/module/hive/conf/spark-defaults.conf
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop102:8020/spark-history
spark.executor.memory 1g
spark.driver.memory 1g

[eitan@hadoop102 ~]$ hadoop fs -mkdir /spark-history

# 4.向HDFS上传Spark纯净版jar包
[eitan@hadoop102 ~]$ tar -zxf /opt/software/spark-3.0.0-bin-without-hadoop.tgz
[eitan@hadoop102 ~]$ hadoop fs -mkdir /spark-jars
[eitan@hadoop102 ~]$ hadoop fs -put ./spark-3.0.0-bin-without-hadoop/jars/* /spark-jars

# 5.修改hive-site.xml文件
[eitan@hadoop102 ~]$ vim /opt/module/hive/conf/hive-site.xml
<!-- Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
<name>spark.yarn.jars</name>
<value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>

<!-- Hive执行引擎 -->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>

# 6.Hive on Spark测试
hive (default)> create table student(id int, name string);
hive (default)> insert into table student values(1,'abc');
--------------------------------------------------------------------------------------
STAGES ATTEMPT STATUS TOTAL COMPLETED RUNNING PENDING FAILED
--------------------------------------------------------------------------------------
Stage-0 ........ 0 FINISHED 1 1 0 0 0
Stage-1 ........ 0 FINISHED 1 1 0 0 0
--------------------------------------------------------------------------------------
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 21.24 s
--------------------------------------------------------------------------------------

hive (default)> insert into table student values(2,'def');
--------------------------------------------------------------------------------------
STAGES ATTEMPT STATUS TOTAL COMPLETED RUNNING PENDING FAILED
--------------------------------------------------------------------------------------
Stage-2 ........ 0 FINISHED 1 1 0 0 0
Stage-3 ........ 0 FINISHED 1 1 0 0 0
--------------------------------------------------------------------------------------
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 12.07 s
--------------------------------------------------------------------------------------
阅读全文 »

本文为学习笔记,对应视频教程来自【尚硅谷】电商数仓V5.0

数据仓库概述

数据仓库概念

数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获得宝贵的信息进而改进决策。同时,随着时间的推移,数据仓库中积累的大量历史数据对于数据科学家和业务分析师也是十分宝贵的。

数据仓库核心架构

image-20220606200020291

阅读全文 »

本文为学习笔记,对应视频教程来自【尚硅谷】电商数仓V5.0

电商业务数据

模拟生成业务数据

MySQL安装

参考Hadoop(三):Hive

业务数据生成
通过脚本建表
生成业务数据
1
2
3
4
5
6
7
8
9
10
# 1.在hadoop102的/opt/module/目录下创建db_log文件夹
[eitan@hadoop102 ~]$ mkdir /opt/module/db_log

# 2.把gmall2020-mock-db-2021-11-14.jar和application.properties上传到hadoop102的/opt/module/db_log路径上

# 3.根据需求修改application.properties相关配置
[eitan@hadoop102 ~]$ vim /opt/module/db_log/application.properties

# 4.在该目录下执行,如下命令,生成2020-06-14日期数据
[eitan@hadoop102 db_log]$ java -jar gmall2020-mock-db-2021-11-14.jar
阅读全文 »

本文为学习笔记,对应视频教程来自尚硅谷大数据Spark教程从入门到精通

SparkStreaming 概述

Spark Streaming 是什么

Spark Streaming 用于流式数据的处理,是准实时(秒,分钟),微批次的数据处理框架。Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语,如:map、reduce、join、window 等进行运算。而结果也能保存在很多地方,如 HDFS,数据库等。

image-20220530002409739

和 Spark 基于 RDD 的概念很相似,Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作 DStream。DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此得名“离散化”)。所以简单来讲,DStream 就是对 RDD 在实时数据处理场景的一种封装。

阅读全文 »

本文为学习笔记,对应视频教程来自尚硅谷大数据Spark教程从入门到精通

SparkSQL 概述

SparkSQL 是什么

Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。

SparkSQL 特点

  1. 无缝的整合了 SQL 查询和 Spark 编程
  2. 统一的数据访问
  3. 兼容 Hive
  4. 标准数据连接

DataFrame 是什么

在 Spark 中,DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame 与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame 所表示的二维表数据集的每一列都带有名称和类型。这使得 Spark SQL 得以洞察更多的结构信息,从而对藏于 DataFrame 背后的数据源以及作用于 DataFrame 之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观 RDD,由于无从得知所存数据元素的具体内部结构,Spark Core 只能在 stage 层面进行简单、通用的流水线优化。

DataFrame 是为数据提供了 Schema 的视图。可以把它当做数据库中的一张表来对待DataFrame 也是懒执行的,但性能上比 RDD 要高,主要原因:优化的执行计划,即查询计划通过 Spark catalyst optimiser 进行优化。

image-20220528122337869

阅读全文 »