第一章 大数据概述
大数据的定义
大数据是指无法在一定时间内用常规软件工具对其 内容进行抓取、管理和处理的数据集合,比如:与人类社会活动有关的网络数据。
三次信息浪潮
信息技术为大数据提供的技术支撑
数据产生方式的变革
大数据的概念(4V+xV)
volume:数据量大
variety:类型繁多
veLocity:速度快,时效高
valueless:价值密度低
variability:可变性
veracity:真实性
数量与类型
- 结构化数据 structured data
- 半结构化数据 semi-structured data
- 非结构化数据 unstructured data
速度与价值
-
1秒定律:这一点也是和传统的数据挖掘技术有着本质的不同
-
价值密度低,商业价值高
以视频为例,连续不间断监控过程中,可能有用的数据仅仅有一两秒,但是具有很高的商业价值
大数据的影响
科学研究
先后经历四种范式:
实验——理论 ——计算——数据
思维方式
- 全样而非抽样
- 效率而非精确
- 相关而非因果
社会发展
大数据决策逐渐成为一种新的决策方式,大数据应用有力促进了信息技术与各行业的深度融合,大数据开发大大推动了新技术和新应用的不断涌现。
就业市场
大数据的兴起使得数据科学家成为热门职业。
人才培养
大数据的兴起,将在很大程度上改变中国高校信息技术相关专业的现有教学和科研体制。
大数据的应用
互联网+
-
互联网企业之所以取得令人瞩目的成绩,其核心的本质就是包括用户网络操作的大数据,进行记录和分析,形成用户 “行为指纹” ,从而洞悉用户的潜在的、真实的需求,形成预判。
-
用户行为分析,是大数据技术的典型应用之一。
电商
推荐系统
推荐系统类型:
大数据关键技术
技术层面 | 功能 |
---|---|
数据采集 | 利用ETL工具将分布的、异构数据源中的数据如关系数据、平面数据文件等,抽取到临时中间层后进行清洗、转换、集成, 最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础;或者也可以把实时采集的数据作为流计算系统的 输入,进行实时处理分析 |
数据存储、管理 | 利用分布式文件系统、数据仓库、关系数据库、Nosql数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理 |
数据处理、分析 | 利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析;对分析结果进行可视化呈现,帮助人们更好地理解数据、分析数据 |
数据隐私、安全 | 在从大数据中挖掘潜在的巨大商业价值和学术价值的同时,构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全 |
两大核心技术
分布式存储:HDFS/GFS、BigTable/HBase、Nosql、Newsql
分布式处理:MapReduce
大数据计算模式
模式 | 解决问题 | 代表产品 |
---|---|---|
批处理计算 | 针对大规模数据的批量处理 | MapReduce、Spark等 |
流计算 | 针对流数据的实时计算 | Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等 |
图计算 | 针对大规模图结构数据的处理 | pregel、GraphX、Giraph、Powergraph、Hama、Goldenorb等 |
查询分析计算 | 大规模数据的存储管理和查询分析 | Dremel、Hive、Cassandra、Impala等 |
大数据、云计算与物联网
第二章 Linux使用与Hadoop介绍
Linux基础
-
Linux泛指一类操作系统,具体的版本有: Ubuntu、CentOS、Debian、Red Hat、OpenSUSE、UOS(统信)、Deepin(深度)、优麒麟(Ubuntu Kylin)等
系统目录结构
基本操作
目录文件:
-
pwd ,查看当前路径
-
mkdir mydir 在当前目录下创建子目录mydir
压缩包:
查看文件:
文本编辑器
vi/vim:
Linux与Windows的换行符:
- Linux/unix:\n
- Windows:\r\n
文件格式互转:
Hadoop概述
Hadoop简介
- Hadoop是Apache软件基金会旗下的一个开源分布 式计算平台,为用户提供了系统底层细节透明的分布式基础架构;
- Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中;
- Hadoop的核心是分布式文件系统HDFS(Hadoop distributed File System)和MapReduce;
- Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力;
Hadoop定义
Apache开源软件基金会开发的运行于大规模普通服务器上的大数据存储、计算、分析的分布式存储系统和分布式运算框架。
Hadoop项目结构
Hadoop集群的安装与使用
概述
- 计算机集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。
- 集群系统中的单个计算机通常称为节点,通常通过局域网连接。
- 集群技术的特点:
运行模式
- 单机模式(Standalone,独立或本地模式:安装简单,运行时只启动单个进程,仅调试用途;
- 伪分布模式(Pseudo-distributed):在单节点上同时启动 namenode、datanode、secondarynamenode、resourcemanager 、nodemanager 等5个进程,模拟分布式 运行的各个节点;
- 完全分布式模式(Fully-distributed):正常 的Hadoop集群,由多个各司其职的节点构成。
第三章 HDFS技术
分布式文件系统
-
分布式文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连;
-
- ext3、ext4
- NTFS
为什么需要分布式文件系统
HDFS简介
基础思想
HDFS为了做到可靠性(reliability)创建多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(compute nodes),MapReduce就可以在它们所在的节点上处理这些数据了。
设计目标
-
基于廉价的普通硬件,可以容忍硬件出错;
- 系统中的某一台或几台服务器出现故障时,系统仍可用且数据完整。
-
大数据集(大文件);
-
简单的一致性模型;
-
顺序的数据流访问;
- HDFS适合用于处理批量数据,而不适合用于随机定位访问。
-
侧重高吞吐量的数据访问,可容忍数据访问的高延迟;
-
为把“计算”移动到“数据”提供基础和便利。
优劣势
适合做什么:
- 存储并管理PB级数据;
- 处理非结构化数据;注重数据处理的吞吐量(latency不敏感);
- 应用模式为:write-once-read-many存取模式。
不适合做什么:
相关概念
block, Meta data, name node, data node, secondary name node, client.
block 块
传统块存储介质中,块是读写的最小数据单位 (扇区)。windows上文件系统块,被称为簇。
与传统文件系统不同的是,如果实际数据没有达到块大小,则并不实际占用整个块磁盘空间。
HDFS采用抽象的块概念的好处:
Meta data 元数据
HDFS对元数据和实际数据采取分别存储的方法:元数据存储在 Name Node 服务器上;实际数据储存在集群的 Data Node 中。
name node 命名节点
-
一个HDFS集群只有一台活跃的 Name Node ;
-
Name Node 上存放了HDFS的元数据;
-
- 1G内存大致可存放 1,000,000 块对应的元数据信息,按缺省每块64M计算,大致对应64T实际数据;
- 集群关闭时,元数据持久化到磁盘中,启动集群时,需要 将元数据装载到内存中。
secondary name node 次命名节点
第二名称节点是 HDFS 架构中的一个组成部 分,协助 Name Node 完成 FsImage 和edits文件合并工作,使得内存中的 FsImage 保持“最新” 。Secondary Name Node 一般是单独运行在一台机器上。
data node 数据节点
- 块的实际数据存放在 Data Node 上;
- 每个块会在本地文件系统产生两个文件,一个是实际的数据文件,另一个是块的附加信息文件,其中包括块数据的长度、校验和,以及时间戳;
- Data Node 通过心跳包(Heartbeat)与 Name Node 通讯;
- 客户端读取/写入数据的时候直接与 Data Node 通信;
- 集群运行中可以安全加入和退出一些机器。
HDFS原理
体系结构
- 主从结构;
- 通信协议:TCP/IP;
- Name node 单点故障
Name Node 的作用
- Name Node 是一个中心服务器,单一节点,负责管理文件系统的命名空间 namespace,以及客户端对文件的访问;
- 文件操作,Name Node 负责文件元数据的操作,Data Node 负责处理文件内容的读写请求,数据流不经过 Name Node ,只会询问它跟哪一个 Data Node 联系;
- 副本在 Data Node 上的存放信息由 Name Node 来控制,根据全局情况做出块放置决定,读取文件时 Name Node 尽量让用户先读取最近的副本,降低带块消耗和读取时延;
- Name Node 全权管理数据块的复制,它周期性地从集群中的每一个 Data Node 接收心跳信号(Heart beat)和块状态报告(Block report)。接收到心跳信号意味着该 Data Node 节点工作正常。块状态报告包含了一个该 Data Node 上所有数据块的列表;
- Data Node 启动后向 Name Node 注册,通过后,周期性向Name Node 上报所有块信息;
- 心跳是每3秒一次,心跳返回结果带有 Name Node 给该 Data Node 的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个 Data Node 的心跳,则认为该节点不可用,并copy其上的block到其他 Data Node 。
数据结构
Name Node 负责管理分布式文件系统的 Namespace 命名空间,保存了两个核心数据结构:FsImage 和 EditLog 。
Name Node 的启动和运行
启动时
- 通过 FsImage 读取元数据,载入内存;
- 执行 EditLog 中的记录,在内存中生成最新的元数据;
- 清空 EditLog ,保存最新的元数据到 FsImage ;
- 收集 Data Node 汇报的块的位置信息。
在名称节点启动的时候,它会将 FsImage 文件中的内容加载到内存中,之后再执行 EditLog 文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的 FsImage 文件和一个空的 EditLog 文件。
名称节点起来之后,HDFS 中的更新操作会重新写到 EditLog 文件中,因为 FsImage 文件一般都很大(GB级别的很常见),如果所有的更新操作都往 FsImage 文件中添加,这样会导致系统运行的十分缓慢,但是,如果往 EditLog 文件里面写就不会这样,因为EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,EditLog 文件都需要同步更新。
EditLog 文件过大引发的问题:
只有在 Name Node 重启时,edit logs才会合并到 FsImage 文件中,从而得到一个文件系统的最新快照。
在名称节点运行期间,HDFS的所有更新操作都是直接写到 EditLog 中,久而久之, EditLog 文件将会变得很大。
虽然这对名称节点运行时候是没有什么明显影响的,但是,当名称节点重启的时候,名称节点需要先将 FsImage 里面的所有内容映像到内存中,然后再一条一条地执行 EditLog 中的记录,当 EditLog 文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响了用户的使用。
运行时
- 对文件创建和写操作,记录到 EditLog ;
- 更新内存中的元数据;
- 收集 Data Node 汇报的块的创建和复制信息。
数据的冗余存储
- 每个块在集群上会存储多个副本(replication);
- 某个块的所有备份都是同一个ID;
- 根据机架配置自动分配备份位置(Rack Awareness);
- 优点:加快数据传输速度;容易检查错误;保证数据的可靠性。
副本存放策略
第一个副本:放置在上传文件的 Data Node;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点;
第二个副本:放置在于第一个副本不同的机架的节点上;
第三个副本:与第一个副本相同机架的其他节点;
更多副本:随机节点。
数据错误与恢复
-
名称节点出错
名称节点保存了所有的元数据信息,最核心的两大数据结构是 FsImage 和 EditLog 。当名称节点出错时,就可以根据备份Secondary Name Node 中的 FsImage 和 EditLog 数据进行恢复。
-
数据节点出错
-
数据出错
数据操作过程
创建文件
- client
- Name Node
写文件
读文件
- 客户端与 Name Node 通讯获取文件的块位置信息,其中包括了块的所有冗余备份的位置信息: Data Node 的列表;
- 客户端获取文件位置信息后直接同有文件块的 Data Node 通讯,读取文件;
- 如果第一个 Data Node 无法连接,客户端将自动联系下一个 Data Node;
- 如果块数据的校验值出错,则客户端需要向 Name Node 报告,并自动联系下一个 Data Node 。
追加写
- 客户端与 Name Node 通讯,获得文件的写保护锁及文件最后一个块的位置( Data Node 列表);
- 客户端挑选一个 Data Nod e作为主写入节点,并对其余节点上的该数据块加锁;
- 开始写入数据,1. 与普通写入流程类似,依次更新各个 Data Node 上的数据;2. 更新时间戳和校验和;
- 最后一个块写满,并且所有备份块都完成写入后,向 Name Node 申请下一个数据块。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。