大数据
大数据代表的一种理念、一种解决问题的思维、一系列技术的集合。
理念用全量代替样本 兼容不精确 更加关注相关规律 思维 数据 信息 知识 洞察 一系列技术
通过一系列大数据技术对海量数据进行分析,实现对运营层决策的支持,挖掘出数据背后的价值
概述大数据
大数据
big data
指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新 处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
大量数据资源为解决以前不可能解决的问题带来了可能性。
主要用于挖掘用户需求、优化产品配比、分析市场、减少运营成本、风险预警等
主要的三大发展方向:平台搭建
/
优化
/
运维
/
监控、大数据开发
/
设计
/
架构、数据分析
/
挖掘。
Java
是大数据开发的主流语言【scala
】、
python
是侧重业务数据分析和数据挖掘的语言
4V
特性
数据量大
种类和来源多样化
数据增长速度快
低价值密度
大数据技术
主要包括
5
方面:数据存储、数据采集、数据预处理、数据计算和数据可视化。
常见的计算模式:
离线批处理:时间跨度一般在几分钟到数小时之间,使用历史数据、大批量处理,要求吞吐率
实时交互式处理:数据进行多维度分析查询,用于实时报表分析、实时大屏等,用户交互使用,要
求反应时间为数十秒到数分钟之间
实时流式处理:要求数百毫秒到数秒之间的实时数据流图计算主要用于关联关系的相关分析人工智能专家系统、机器学习、计算机视觉、自然语言处理等。经常使用机器学习训练机器,使机器建立实现特定功能的模型,最后机器就可以根据该模型对数据进行预测
大数据开发技术
1
、第一代
Hadoop
的
MapReduce
,针对复杂操作不得不拆分算法,将应用编程多个
job
执行,每次执行完成都有落盘操作
2
、第二代
DAG
框架出现,例如
Tez
和
Oozie
,可以直接使用上次计算结果,不需要重复的硬盘读写,但是操作人就是批处理
3
、第三代是以内存计算为代表的
Spark
计算框架,特点是
Job
内部的
DAG
有向无环图的使用,以及强调实时计算
4
、第四代是以
Flink
为代表的批流一体的计算框架
Spark
是基于微批处理模拟实时流的效果,延时比较高,无法优化到秒以下的数量级;但是
Flink
支持实时流处理,可以实现毫秒到秒的处理,比较切合数据的生成方式,技术上有更好的扩展性
Hadoop
Hadoop
解决的问题是海量数据分析、处理和深入挖掘以及长期保存海量数据,其中的
HDFS
为海量数据提供存储,而MapReduce
则为海量数据提供了计算服务,
YARN
解决了资源管理调度
什么是
hadoop
Apache Haoop
是一个由
Apache
发布的
Doug Cutting
主导开发的运行在大型集群的普通
PC
硬件上针对大数据集的分布式存储与并行分布式计算的开源软件系统基础架构。Hadoop
是运行在大量廉价硬件设备集群上的可靠的、可扩展的分布式系统基础架构,使得用户在不了解分布式底层细节的情况下,开发分布式程序、充分利用集群的分布式能力进行计算和存储。广义上说hadoop
通常指的是
hadoop
生态圈适用于海量数据的分布式存储和海量数据的分布式并行离线计算,是目前存储和分析海量数据的首选。
三大核心组件
HDFS
海量数据的分布式存储
MapReduce
海量数据并行化分布式计算
YARN
解决了分布式资源管理调度问题
三大发行版本
目前
hadoop
有三大主要发行版本,主要有
Apache hadoop
、
Cloudera
、
Hortonworks
Apache
最原始最基础的版本,比较适合基础学习或者技术实例较强的大公司
Cloudera
发行版简称
CDH
,是目前使用较多的,中小型公司使用较多,简单方便,自带的可视化
管理。不开源,并且和社区版的
hadoop
有所出入
Hortonworks
发行版简称为
HDP
,采用的是原生的
hadoop
,集成了监控方案,但是增删节点比较
麻Cloudera和
Hortonworks
在
2018
年合并,推出了私有云
CDP
四大特定
高可靠,依赖于多副本机制实现的
高可扩展性,
HDFS
支持线性扩展
高效性。
Map/Reduce
分布式无限制的并行计算
高容错性。重启应用会自动检查和自动重新部署
缺点:版本管理混乱,部署升级复杂,兼容性差,安全性低
不适合低延迟数据访问
不适合小文件存取
不适合并发写入、文件的随机修改
Hadoop
基本使用步骤
1
、搭建
hadoop
集群
2
、
hadoop
搭建完成后,可以通过
web
页面查看集群的使用情况。可以通过
hadoop shell
命令将文件上传到hdfs
集群中
3
、通过集成开发环境导入
hadoop
相关的
jar
包,编写
map-reduce
程序,最后将程序打包为
jar
,放到集群中执行,最终获取执行结果
Hadoop
应用场景
Hadoop
提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。
一般用于
海量数据须及时分析、处理和深入挖掘
长期保存海量数据。
安装
安装采用的是
Linux
操作系统
RHEL
是红帽子出品,需要付费,但是性能稳定可靠;
CentOS
主要优点是与
RHEL100%
的二进制兼容,Centos8是
2021
年停止维护,
Centos7
将维护到
2024
年年中,新版本是
Centos Stream
滚动版,缺乏稳定性。
1
、关闭
DHCP
动态主机配置协议,采用静态
IP
地址。
/etc/sysconfig/network-scripts/ifcfg-ens
2
、修改主机名称
hostnamectl set-hostname node01
配置
DNS
解析,实现通过主机名称访问特定节点
/etc/hosts
3
、配置
SSH
协议,
SSH
安全壳协议可以在应用层的基础之上提供安全通信的一个协议,主要原理是利用非对称机密体系,对所有传输的数据进行加密,保证数据在传输过程中不被恶意破坏、泄露或篡改。
配置
SSH
免密登录:
ssh
-
keygen
-
t RSA
命令用于在当前机上生成
SSH
通信所需要的公钥和私钥
在命令执行的过程中不输入任何内容,一路回车
公钥文件
/root/.ssh/id_rsa.pub
,私钥
/root/.ssh/id_rsa
将本地主机的公钥复制到远程主机的
authorized_keys
文件上
ssh
-
copy
-
id root@node02
4
、关闭
SELinux
安全增强型
Linux
简称
SELinux
,它是一个
Linux
内核模块,也是
Linux
的一个安全子系统。
SELinux
主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
SELinux
的三种工作模式:
enforcing
:强制模式。违反
SELinux
规则的行为将被阻止并记录到日志中
permissive
:宽容模式。违反
SELinux
规则的行为只会记录到日志中。一般为调试用。
disabled
:关闭
SELinux
。
SELinux
工作模式可以在
/etc/selinux/config
中设定
安装
hadoop
Hadoop3.3
支持
JDK8
和
JDK11
,之前版本只支持
JDK8
Hadoop
的安装方式有
3
种:
windows
单机用于开发,伪分布式用于测试和分布式用于生产环境
windows
单机安装,单机单节点多线程,基本无需配置即可运行,不需要任何守护进程,存储采用
本地文件系统,一般用于代码开发测试,避免需要上传到
Linux
系统测试的繁琐步骤【
hadoop jar
aaa.jar
主类名称 参数】
hadoop
可以在当节点上以伪分布式的方式运行,以分离的
Java
进程来运行,模拟多台物理设备的
情况。可以在一台机器上运行多个
hadoop
守护进程,例如
NameNode/DataNode
和
JobTracker/TaskTracker
,采用分布式文件系统
HDFS
存储数据,模拟一个小集群的运行,主要用
于测试
完全分布式,这种模式式完全多台物理设备或者云服务器,最少需要两台或者更多的计算机集群,
主要用于生产阶段
伪分布式安装
解压文件到对应的安装目录下即可
1
、将安装路径添加到环境变量中
修改
Path
环境变量
Centos7
下的安装
1
、利用
xshell
上传文件
2
、解压文件
tar
-
zxvf hadoop
-
3.3.4.tar.gz
3
、将解压的文件夹移动到
/usr/local
目录下
4
、修改
/etc/profile
文件,添加环境便令
HADOOP_HOME
指向具体的安装路径,修改
PATH
添加
hadoop/bin
和
hadoop/sbin
两个路径
伪分布式配置,
Linux
和
windows
下基本一致
etc/hadoop/core-site.xml
配置访问
hadoop
集群的公共信息
etc/hadoop/hdfs-site.xml
配置
hdfs
分布式文件系统的属性
etc/hadoop/mapred-site.xml
用于配置
MapReduce
计算中的资源管理
etc/hadoop/yarn-site.xml
用于配置
YARN
资源管理器
<configuration>
<property>
<!--
用于设置
namenode
的
RPC
交互端口
-->
<name>
fs.defaultFS
</name>
<value>
hdfs://localhost:9000
</value>
</property>
<property>
<!--
用于设置文件系统依赖的配置元数据的临时存放位置
-->
<name>
hadoop.tmp.dir
</name>
<value>
/D:/software/hadoop-3.3.4/temp
</value>
</property>
</configuration>
<configuration>
<property>
<!--
用于设置存储在
HDFS
文件系统中的文件副本数
-->
<name>
dfs.replication
</name>
<value>
1
</value>
</property>
<property>
<!--
关闭权限检查,在生产环境中一定需要开启,也就是值为
true -->
<name>
dfs.permiessions
</name>
<value>
false
</value>
</property>
</configuration>
<configuration>
<property>
<!--
用于设置使用
YARN
运行
MapReduce
应用程序
-->
<name>
mapreduce.framework.name
</name>
<value>
yarn
</value>
</property>
</configuration>
<configuration>
<property>
<!--
配置
NodeManager
上运行的附属服务配置,只有配置成
mapreduce_shuffle
才可以运行
MapReduce
程序
-->
<name>
yarn.nodemanager.aux-services
</name>
<value>
mapreduce_shuffle
</value>
</property>
</configuration>
针对
windows
操作系统的特殊处理。因为
hadoop
默认的运行环境需要使用
linux
操作系统,所以针对windows需要添加一些额外的程序,例如动态链接库
hadoop.dll
和可执行程序
winutils
格式化集群的
NameNode
名空间节点
hdfs namenode
-
format
启动
hadoop
服务:启动所有服务
start-all.cmd
,关闭所有服务
stop-all.cmd
启动
hdfs
命令为
start-dfs.cmd
,关闭
hdfs
服务
stop-dfs.cmd
启动
YARN
命令为
start-yarn.cmd
,关闭资源管理器服务
stop-yarn.cmd
windows
中的可执行脚本程序的后缀为
.cmd
,
linux
中的可执行脚本程序的后缀为
.sh
如果启动后执行
jps
命令可以看到
4
个进程,则表示启动成功。
jps
是
java
提供的一个用于显示当前所有java进程
pid
的命令,适合用于查看当前
java
进行的一些简单情况
还可以使用
web
管理页进行查看
http://localhost:9870
,这实际上就是
HDFS
的可视化管理界面,在这个界面中可以对整个HDFS
集群进行监控以及文件的上传和下载操作
还可以使用
YARN
的资源管理器可视化窗口
localhost:8088
针对
Linux
中的用户配置
1
、对于
start-dfs.sh
和
stop-dfs.sh
文件,添加下列参数
2
、对于
start-yarn.sh
和
stop-yarn.sh
文件
Hadoop
生态圈
HDFS
分布式文件系统,具有处理超大数据、流式处理、可以运行在廉价商用服务器上
HBase
是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式
NoSQL
数据库,一般采用HDFS作为底层数据存储系统
MapReduce
式用于处理海量数据的并行计算编程模型,允许用户在不了解分布式系统底层细节的
情况下开发并行应用,并将其运行于廉价的计算机集群上,完成海量数据的处理
Hive
是一个基于
Hadoop
的数据仓库工具,用于用于对
Hadoop
文件中的数据集进行数据整理、特
殊查询和分析存储,可以通过类
SQL
的
HiveQL
可以快速实现简单的
MapReduce
任务,十分适合数
据仓库的统计分析
Pig
是一种数据流语言和运行环境,适合于使用
Hadoop
和
MapReduce
平台来查询大型半结构化数
据集,简化了
Hadoop
常见的工作任务
Mahout
提供一些可扩展的机器学习领域经典算法的实现,旨在方便快捷地创建智能应用,可以有
效地扩展到云中
Zookeeper
是一个开源的高效和可靠的协同工作系统,提供分布式锁之类的基本服务,用于构建分
布式应用,减轻分布式应用,减轻分布式应用所承担的协调任务
Flume
是高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。
Flume
支持在日志系
统中定制各类数据发送方,用于收集数据
Sqoop
主要用于在
hadoop
和关系数据库之间交换数据,可以改进数据的互操作性。
sqoop
是专门
为大数据集设计的,支持增量更新,可以将新记录添加到最近一次导出的数据源上,或者指定上次
修改的时间戳
HDFS_DATANODE_USER
=
root
HADOOP_SECURE_DN_USER
=
hdfs
HDFS_NAMENODE_USER
=
root
HDFS_SECONDARYNAMENODE_USER
=
root
YARN_RESOURCEMANAGER_USER
=
root
HADOOP_SECURE_DN_USER
=
yarn
YARN_NODEMANAGER_USER
=
root
Ambari
是一种基于
web
的工具,支持
hadoop
集群的安装、部署、配置和管理。已经支持大多数
hadoop
组件,包括
HDFS
、
MapReduce
、
Hive
、
Pig
、
HBase
、
Zookeeper
、
sqoop
等
服务器配置【不是主流配置】
实际生产服务器配置:联想
x3750
,价格
3.5W
,内存
32G
【最大
1.5T
】,机架式,硬盘
SSD
接口,
CPU
为
2.6G X 2
个
X 12
线程,千兆网卡
大数据存储与管理
HDFS
数据量在一个
OS
管理范围中不能存放就分配到多个
OS
各自管理的磁盘中,从而引入
DFS
,
DFS
有很多。
HDFS
是一种允许文件通过网络在多台主机上分享存储文件,使应用或者用户看起来和访问本地磁盘一致。
HDFS
提供了在廉价服务器集群中进行大规模分布式文件存储的能力
HBase
是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构
化的松散数据
NoSQL
数据库可以支持超大规模数据存储,主要用来存储非结构化和半结构化的松散数据,具有强大的横向扩展能力,可以有效地弥补关系型数据库的不足
什么是
HDFS
HDFS
分布式文件系统以物理上的分布式存放,逻辑上一个目录树的形式为上层应用提供海量数据存储服 务,实现高可靠性、高容错性和可扩展性特点,能够自动检测和应对硬件故障,是分布式计算中数据管理的技术,是基于流式数据访问和处理超大文件的需求而开发的
HDFS
集群中以
Master-Slave
模式运行,主要有两类节点:一个
Namenode
节点即
master
和多个
Datanode
节点。
Namenode
管理文件系统的
Namespace
,维护着文件系统树以及文件树中所有的文件和文件夹的元数据。
应用场景
HDFS
提供高吞吐应用程序的数据访问功能,适合带有大型数据集的应用。例如数据密集型并行计算和计算密集型并行计算。HDFS
适用于一次写入多次查询的情况,修改只能先删除再重新上传,不支持并发写,不适合小文件操作
HDFS
不适合大量小文件的存储。由于
NameNode
是将文件系统的元数据存放在内存中,存储文件
的数量受限于内存大小(一个文件
/
目录
/
文件块一般占有
150
字节的元数据内存空间。)
HDFS
优点
高容错:多副本保存
适合批量处理,移动计算而不是移动数据,数据位置暴露给框架
适合大数据处理,是指
MB
到
TB
级别的数据文件
可构建在廉价计算机上,通过副本提高可靠性,提供了容错和恢复机制
流式地访问数据,提供一次写入多次读取的服务,没有修改操作
HDFS
缺点
不适合低延迟数据访问(毫秒级),寻址时间长,适合读取大文件。对于低延迟可以选择
HBase
不适合小文件存储,占用
NameNode
大量内存,寻找事件超过读取时间。针对大量小文件可以采
用
SequenceFile
方式对小文件进行合并或者使用
NameNode Federation
方式改善
一个文件只能有一个写入者,一般是不允许修改文件
不支持用户磁盘配额管理,粗粒度的访问权限控制
HDFS
数据模型
HDFS
集群中包括
NameNode
、
DataNode
和
Secondary NameNode
,主要适用于大数据场景的数据存储,提供了高可靠性【通过多副本存储实现】、高扩展性【支持添加机器进行线性扩展】和高吞吐率
【多数据节点并发读】的数据存储服务。
Hadoop
支持传统的层次型文件组织结构,采用的是
Master/Slaver
架构,一个
HDFS
集群是由一个
NameNode
和一定数目的
DataNode
组成的【一般比例为
1NN
、
1SNN
和
8DN
】
HDFS
守护进程
NameNode
是一个中心服务器,负责接收客户端的读写服务请求,维护文件系统命
名空间的元数据【文件如何分割以及数据块存放在哪个具体
DN
节点上】和操作日志以及接受客户
端对文件的访问,元数据存储在内存中,不会和磁盘发生交互
具体存放的数据会以数据块为单位存放在
DataNode
上,集群中的
DataNode
负责管理它所在节点
上的存储。一次写入多次读取,数据块尽量散布以达到冗余目的
元数据由
fsimage
镜像文件保存,保存了所有文件的地址、描述和创建时间等信息,
NameNode
启动时会将fsimage
中的信息载入内存以供客户端访问,操作日志则由
edits
文件保存,任何对文件系统的修改都会被写入edits
文件并被记录下来。当
edits
文件大小增长到阈值时
HDFS
会将
fsimage
文件和
edits
文件进行合并,生成新的fsimage
快照,同时重置
edits
日志。
NameNode
执行文件系统的命名空间操作,也负责数据块到具体
DataNode
节点的映射;
DataNode
负责处理文件系统客户端的读写请求,存储数据内容和Block
的元数据信息文件,可以在
NameNode
的统 一调度下进行数据块的创建、复制和删除。注意:没有修改操作。
Secondary NameNode
是周期性将
NameNode
的镜像文件和日志文件合并,以免日志文件过大,每隔 3600秒更新一次。
HDFS
默认情况下副本系数为
3
,副本存放策略为:将一个副本放在本地机架的节点上,一个副本放在同
一个机架的另外一个节点上,最后一个副本放在不同机架的节点上。
HDFS
典型的数据块大小为
128M
(
HDFS2.7
将默认
64M
升级到了
128M
),大数据块是针对大规模的流
式数据访问优化,它意味着更多的文件顺序读写和更小的数据块管理开销。大量小文件会导致
NameNode
存储变大,内存压力剧增。 【面试】
HDFS
将数据文件的切分、容错、负载均衡等功能透明化