大数据导论及分布式存储HadoopHDFS入门
思维导图
数据导论
数据是什么?
进入21世纪,我们的生活就迈入了"数据时代" 作为21世纪的新青年,"数据"一词经常出现。
数据无时无刻的在影响着我们的现实生活
什么是数据? 数据又如何影响现实生活?
数据:一种可以被鉴别的对客观事件进行记录的符号。 简单来说就是:对人类的行为及产生的事件的一种记录.
我们无时无刻都在产生数据:
数据的价值
大数据时代
当下时代已经是数据的时代,数据非常重要并且蕴含巨大的价值。
1. 什么是数据?
人类的行为及产生的事件的一种记录称之为数据
2. 数据有什么价值?
对数据的内容进行深入分析,可以更好的帮助了解事和物在现实世界的运行规律
比如,购物的订单记录(数据)可以帮助平台更好的了解消费者,从而促进交易。
大数据诞生
大数据的诞生
大数据的诞生和信息化以及互联网的发展是密切相关的。
大数据的诞生和信息化以及互联网的发展是密切相关的。
上世纪70年代后,逐步出现了基于TCP/IP协议的小规模的计算机互联互通。 但多数是军事、科研等用途。
上世纪90年代左后,全球互联的互联网出现。
个人、企业均可参与其中,真正逐步的实现了全球互联。
在2000年后,互联网上的商业行为剧增
现在知名的互联网公司(谷歌、AWS、腾讯、阿里等)也是在这个年代开始起步。
在互联网参与者众多的前提下,商业公司、科研单位等,所能获得的数据量也是剧增。
剧增的数据量,和羸弱的单机性能,让许多科技公司开始尝试以数量来解决问题。
在这个过程中,分布式处理技术诞生了。
1. 大数据的诞生是跟随着互联网的发展的
当全球互联网逐步建成(2000年左右),各大企业或政府单位拥有了海量的数据亟待处理。
基于这个前提逐步诞生了以分布式的形式(即多台服务器集群)完成海量数据处理的处理方式,并逐步发展成现代大数据体系。
2. Apache Hadoop对大数据体系的意义
第一款获得业界普遍认可的开源分布式解决方案
让各类企业都有可用的企业级开源分布式解决方案
一定程度上催生出了众多的大数据体系技术栈
从Hadoop开始(2008年左右)大数据开始蓬勃发展
大数据概念
大数据是指无法用传统的数据处理工具和方法,在合理的时间内进行捕获、管理和处理的大规模、复杂和多样化的数据集合。随着互联网、物联网、社交媒体等技术的发展,数据量呈指数级增长,大数据的概念应运而生。
大数据的普通认知:bigdata,无法用常规软件处理的数据集合,需要一种新的模式(分布式)去处理
大数据的核心思想:分而治之(分布式)
大数据解决的问题:
海量数据的存储
海量数据的计算
海量数据的迁移
海量数据的查询
大数据的应用场景:为生活赋能/大数据人工智能时代/数字化时代,如智慧城市、智能制造、金融风控、健康医疗、互联网广告等。
狭义上:对海量数据进行处理的软件技术体系
广义上:数字化、信息化时代的基础支撑,以数据为生活赋能
大数据特点
大数据有5个主要特征,称之为:5V特性
大数据的核心工作
从海量的高增长、多类别、低信息密度的数据中挖掘出高质量的结果
后续将学习的技术也是围绕着这三点来进行的,即:
分布式存储相关技术栈
分布式计算相关技术栈
海量数据传输相关技术栈
1. 什么是大数据
狭义上:对海量数据进行处理的软件技术体系
广义上:数字化、信息化时代的基础支撑,以数据为生活赋能
2. 大数据的5个主要特征
-
大:(数据量大)大数据的一个核心特点就是数据量巨大,通常用TB(太字节)、PB(拍字节)甚至更大单位来衡量。
-
多:(数据种类和来源多),大数据不仅包括传统的结构化数据,还包括半结构化和非结构化数据。例如,文本、图片、视频、音频等。
-
值:(低价值密度)虽然数据量庞大,但有用信息的密度较低,需要高效的数据处理技术来提取价值。
-
快:(增长速度快,处理速度快,获取速度快)数据流动速度快,需要实时或近实时处理。
-
信:结果准确,可以依赖
3. 大数据的核心工作:
存储:妥善保存海量待处理数据
计算:完成海量数据的价值挖掘
传输:协助各个环节的数据传输
大数据处理步骤
明确分析的目的和思路:把分析的目的分解成若干个不同的分析要点
数据收集:一般数据来源为数据库、第三方数据统计工具、文件数据等
数据处理:(E抽取T转换L加载)主要包含数据清洗、数据转化、数据提取、数据计算等
数据分析:提取为数据有价值的信息的过程
数据可视化:一般能用图说明问题的不用表格,能用表格说明问题的就不要用文字
撰写报告:数据分析报告作为结论总结
大数据生态
存储: Apache Hadoop HDFS、Apache HBase等
计算: Apache Hadoop MapReduce、Apache Spark、Apache Flink
传输: Apache Sqoop、Apache Flume、Apache Kafka等
大数据主体上分成如下三大核心工作体系。
数据存储
数据计算
数据传输
大数据体系内的软件种类还是非常多的。在后续的学习中我们都能够逐步的接触到它们。
1. 大数据的核心工作:
存储:妥善保存海量待处理数据
计算:完成海量数据的价值挖掘
传输:协助各个环节的数据传输
2. 大数据软件生态
存储:Apache Hadoop HDFS、Apache HBase等
计算:Apache Hadoop MapReduce、Apache Spark、Apache Flink
传输:Apache Sqoop、Apache Flume、Apache Kafka等
hadoop发展历程
Hadoop创始人: Doug Cutting Hadoop起源于Apache Lucene子项目:Nutch Nutch的设计目标是构建一个大型的全网搜索引擎。 遇到瓶颈:如何解决数十亿网页的存储和索引问题 Google三篇论文: 三驾马车 《The Google file system》:谷歌分布式文件系统GFS 《MapReduce Simplified Data Processing on Large Clusters》:谷歌分布式计算框架MapReduce 《Bigtable A Distributed Storage System for Structured Data》:谷歌结构化数据存储系统 雅虎时代: 卡大爷带着hadoop去了雅虎.利用雅虎的资源发展技术. 开源社区版本: Apache软件基金会(Apache Software Foundation,简称ASF)是专门支持开源项目的一个非盈利性组织。 URL:http://hadoop.apache.org/ 商业发行版本: CDH(Cloudera's Distribution, including Apache Hadoop) Cloudera公司出品,目前使用最多的商业版 1.x版本系列: HDFS 和 MapReduce 2.x版本系列: HDFS 和 MapReduce 和 YARN 主要基于jdk7,但是jdk7在15年左右不更新,不得不切换更新版本 3.x版本系列: HDFS 和 MapReduce 和 YARN 依赖jdk8
什么是Hadoop?
Hadoop是Apache软件基金会下的顶级开源项目,用以提供:
分布式数据存储
分布式数据计算
分布式资源调度
为一体的整体解决方案。
Apache Hadoop是典型的分布式软件框架,可以部署在1台乃至成千上万台服务器节点上协同工作。 个人或企业可以借助Hadoop构建大规模服务器集群,完成海量数据的存储和计算。
Hadoop发展
Hadoop创始人:Doug Cutting
Hadoop起源于Apache Lucene子项目:Nutch
Nutch的设计目标是构建一个大型的全网搜索引擎。
遇到瓶颈:如何解决数十亿网页的存储和索引问题
Google三篇论文
《The Google file system》:谷歌分布式文件系统GFS
《MapReduce: Simplified Data Processing on Large Clusters》:谷歌分布式计算框架MapReduce
《Bigtable: A Distributed Storage System for Structured Data》:谷歌结构化数据存储系统
Hadoop发行版本
开源社区版本
Apache软件基金会(Apache Software Foundation,简称ASF)是专门支持开源项目的一个非盈利性组织。
URL:http://hadoop.apache.org/
商业发行版本
CDH(Cloudera's Distribution, including Apache Hadoop) Cloudera公司出品,目前使用最多的商业版
HDP(Hortonworks Data Platform),Hortonworks公司出品,目前被Cloudera收购
星环,国产商业版,星环公司出品,在国内政企使用较多
1. 什么是Hadoop
Hadoop是开源的技术框架,提供分布式存储、计算、资源调度的解决方案
2. Hadoop的发展
创始人Doug Cutting
基于Nutch搜索项目发展
发展受到Google三篇著名的论文影响
3. Hadoop的版本
Apache 开源社区版 (原生版本)
Cloudera等商业公司自行封装的商业版
分布式和集群
分布式: 分布式的主要工作是分解任务,将职能拆解给多个服务器,多个服务器在一起做不同的事,配合完成同一个任务 集群: 集群主要是将同一个业务,部署在多个服务器上 ,多个人在一起做同样的事
分布式
概念
分布式是指将多台服务器集中在一起,每台服务器都实现总体中的不同业务,做不同的事情
单机模式
该模式可以形象的比喻为:一个餐厅的厨房只有一个人,这个人既要买菜、又要切菜、还要炒菜,效率很低!
分布式模式
该模式可以形象的比喻为:一个餐厅的厨房有三个人,一个人买菜、一个人切菜、一个人炒菜,效率提高了!
集群
概念
所谓集群是指一组独立的计算机系统构成的一多处理器系统,它们之间通过网络实现进程间的通信,让若干台计算机联合起来工作(服务),可以是并行的,也可以是做备份。
分布式的基础架构
数量多,在现实生活中往往带来的不是提升,而是:混乱。
同学们思考一下, 众多的服务器一起工作,是如何高效、不出问题呢?
大数据体系中,分布式的调度主要有2类架构模式:
去中心化模式
中心化模式
去中心化模式
去中心化模式,没有明确的中心。
众多服务器之间基于特定规则进行同步协调。
中心化模式
主从模式
大数据框架,大多数的基础架构上,都是符合:中心化模式的。
即:有一个中心节点(服务器)来统筹其它服务器的工作,统一指挥,统一调派,避免混乱。
这种模式,也被称之为:一主多从模式,简称主从模式(Master And Slaves)
我们学习的Hadoop框架,就是一个典型的主从模式(中心化模式)架构的技术框架。
分布式和集群区别?
分布式 :分布式的主要工作是分解任务,将职能拆解,多个人在一起做不同的事
集群:集群主要是将同一个业务,部署在多个服务器上 ,多个人在一起做同样的事
Hadoop是哪种分布式架构模式?
主从模式(中心化模式)的架构
Hadoop框架概论
Hadoop介绍
Hadoop是Apache旗下的一个用Java语言实现开源软件框架,是一个存储和计算大规模数据的软件平台。
Hadoop是Apache Lucene创始人 Doug Cutting 创建的,最早起源一个Nutch项目。
2003年Google发表了一篇GFS论文,为大规模数据存储提供了可行的解决方案。
2004年 Google发表论文MapReduce系统,为大规模数据计算提供可行的解决方案。
Nutch的开发人员以谷歌的论文为基础,完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目Hadoop。
到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。
如今,国内外的互联网巨头基本都在使用Hadoop框架作为大数据解决方案,越来越多的企业将Hadoop 技术作为进入大数据领域的必备技术。
Hadoop框架内容
狭义解释
Hadoop指Apache这款开源框架,它的核心组件有:
HDFS(分布式文件系统):解决海量数据存储
MAPREDUCE(分布式运算编程框架):解决海量数据计算
YARN(作业调度和集群资源管理的框架):解决资源任务调度
广义解释
广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。
Hadoop国内外应用
国外应用
Yahoo
Yahoo的Hadoop机器总节点数目已经超过42000个,有超过10万的核心CPU在运行Hadoop,总的集群存储容量大于350PB,每月提交的作业数目超过1000万个。
Yahoo的Hadoop应用主要包括以下几个方面:
广告系统支持
用户行为分析
Web搜索支持
反垃圾邮件系统
个性化推荐
国内应用
阿里巴巴
阿里巴巴的Hadoop集群大约有3200台服务器,大约30000物理CPU核心,总内存100TB,总的存储容量超过60PB,每天的作业数目超过150000个
Hadoop集群主要为电子商务网络平台提供底层的基础计算和存储服务,主要应用包括:
· 数据平台系统。
· 搜索支撑。
· 电子商务数据。
· 推荐引擎系统。
· 搜索排行榜。
Hadoop版本
发行版
Hadoop发行版本分为开源社区版和商业版。
开源社区版:指由Apache软件基金会维护的版本,是官方维护的版本体系,版本丰富,兼容性稍差。
商业版:指由第三方商业公司在社区版Hadoop基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本,比较著名的有cloudera的CDH等。
三大版本
1.x版本系列:hadoop的第二代开源版本,该版本基本已被淘汰
2.x版本系列:架构产生重大变化,引入了Yarn平台等许多新特性,是现在使用的主流版本。 3.x版本系列: 该版本是最新版本。
Hadoop架构
HDFS(分布式存储文件系统): 解决了海量数据的存储
NameNode(主节点):管理从节点,分配存储数据的任务 存储元数据(描述数据的数据) SecondaryNameNode(辅助主节点): 帮助主节点合并管理元数据
DataNode(从节点):存储海量数据
YARN(资源调度的组件): 解决了多任务的资源调度
ResourceManager(主节点): 接收用户计算请求任务 根据任务进行资源分配 NodeManager(从节点): 执行主节点分配的任务
MapReduce(分布式计算组件): 解决了海量数据的计算
核心思想: 分而治之
map阶段: 先拆分成多个map任务
reduce阶段: 再执行reduce任务把各个map结果合并归纳
三大组件配合:
MapReduce计算需要的数据和产生的结果需要HDFS来进行存储
MapReduce的运行需要由Yarn集群来提供资源调度。
Hadoop架构模块
Hadoop2.x架构内部模型-HDFS和Yarn
HDFS模块:
NameNode(主节点):集群当中的主节点,主要用于管理集群当中的各种数据
SecondaryNameNode(辅助主节点):主要能用于hadoop当中元数据信息的辅助管理
DataNode(从节点):集群当中的从节点,主要用于存储集群当中的各种数据
数据计算核心模块:
ResourceManager(主节点):接收用户的计算请求任务,并负责集群的资源分配
NodeManager(从节点): 负责执行主节点分配的任务
Hadoop2.x架构模型-MapReduce
Hadoop模块之间的关系
MapReduce计算需要的数据和产生的结果需要HDFS来进行存储
MapReduce的运行需要由Yarn集群来提供资源调度。
Hadoop集群搭建
集群简介
HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。
HDFS集群
NameNode、DataNode、SecondaryNameNode
YARN集群
ResourceManager、NodeManager
集群搭建方式
Standalone mode(单机模式)
单机模式, 1个机器上运行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,主要用于学习和调试。
Cluster mode(集群模式)
集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
大数据集群方案-单机模式
注意,在单机模式下,要求Windows系统运行内存至少也是8G!
大数据集群方案-集群模式
本套已经搭建好Hadoop所有的开发环境,集群模式方案如下:
注意,在集群模式下,要求Windows系统运行内存至少是16G!
Hadoop集群使用
集群介绍:
用户名: root
密码: 123456
初始使用: 把三台虚拟机快照恢复到7hive安装完成 注意: hive没有配置环境变量,可以自己配置
启动集群
启动hdfs和yarn命令: start-all.sh
停止hdfs和yarn命令: stop-all.sh
启动mr历史任务服务器: mapred --daemon start historyserver
jps: 查看java进程的一个小工具
本地配置域名映射
注意: 想要上传文件夹需要配置本地域名映射
hosts文件路径: C:\Windows\System32\drivers\etc
把以下内容复制到文件末尾,保存
192.168.88.161 node1.itcast.cn node1
192.168.88.162 node2.itcast.cn node2
192.168.88.163 node3.itcast.cn node3
配置完成后,可以直接通过node1访问
Hadoop启动和关闭-集群模式
1、启动三台虚拟机
在资料中已经提供好了三台虚拟机, 分别为node1(192.168.88.161)、node2(192.168.88.162)、node3(192.168.88.163)
2、使用CRT分别连接三台虚拟机
3、集群一键启动和关闭
一键启动大数据环境
一键关闭大数据环境
注意: 想要查看mr历史任务需要单独启动historyserver
Hadoop页面访问-集群模式
4.查看启动进程-jps java的进程
5、查看HDFS页面
启动NameNode.连接URL: http://192.168.88.161:9870
6、查看YARN页面
启动ResourceManager.连接URL:http://192.168.88.161:8088
7、查看已经finished的mapreduce运行日志
启动historyserver.连接URL:http://192.168.88.161:19888
web-ui页面查看
HDFS: http://node1:9870/
YARN: http://node1:8088/
MR: http://node1:19888
官方MapReduce示例
在Hadoop的安装包中,官方提供了MapReduce程序的示例examples,以便快速上手体验MapReduce。
该示例是使用java语言编写的,被打包成为了一个jar文件。
/export/server/hadoop-3.3.0/share/hadoop/mapreduce
评估圆周率π(PI)
MapReduce程序评估一下圆周率的值,执行中可以去YARN页面上观察程序的执行的情况。 hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi x y
第一个参数pi:表示MapReduce程序执行圆周率计算;
第二个参数x:用于指定map阶段运行的任务次数,并发度,举例:x=10
第三个参数y:用于指定每个map任务取样的个数,举例: x=50。
单词词频统计WordCount
WordCount算是大数据统计分析领域的经典需求了,相当于编程语言的HelloWorld。统计文本数据中, 相同单词出现的总次数。用SQL的角度来理解的话,相当于根据单词进行group by分组,相同的单词 分为一组,然后每个组内进行count聚合统计。
已知word.txt文件内容如下,计算每个单词出现的次数
zhangsan lisi wangwu zhangsan
zhaoliu lisi wangwu zhaoliu
xiaohong xiaoming hanmeimei lilei
zhaoliu lilei hanmeimei lilei
第一个参数:wordcount表示执行单词统计的MapReduce程序;
第二个参数:指定输入文件的路径;
第三个参数:指定输出结果的路径(注意:该路径不能已存在);
配置本地域名解析:
# HadoopCluster
192.168.88.161 node1.itcast.cn node1
192.168.88.162 node2.itcast.cn node2
192.168.88.163 node3.itcast.cn node3#添加后保存关闭
HDFS文件系统
HDFS的概述
在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统 。
HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目. Hadoop 非常适于存储大型数据 (比如 TB 和 PB), 其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统.
分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
HDFS的特点
HDFS文件系统可存储超大文件,时效性稍差。
HDFS具有硬件故障检测和自动快速恢复功能。
HDFS为数据存储提供很强的扩展能力。
HDFS存储一般为一次写入,多次读取,只支持追加写入,不支持随机修改。
HDFS可在普通廉价的机器上运行。
HDFS的架构
HDFS采用Master/Slave架构
一个HDFS集群有两个重要的角色,分别是Namenode和Datanode。
HDFS的四个基本组件:HDFS Client、NameNode、DataNode和Secondary NameNode。
1、Client
就是客户端。
文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储
与 NameNode 交互,获取文件的位置信息。
与 DataNode 交互,读取或者写入数据。
Client 提供一些命令来管理 和访问HDFS,比如启动或者关闭HDFS。
2、NameNode
就是 master,它是一个主管、管理者。
管理 HDFS 元数据(文件路径,文件的大小,文件的名字,文件权限,文件的block切片信息….)。
配置副本策略。
处理客户端读写请求。
3、DataNode
就是Slave。
NameNode 下达命令,DataNode 执行实际的操作。
存储实际的数据块。
执行数据块的读/写操作。
定时向namenode汇报block信息。
4、Secondary NameNode
并非 NameNode 的热备。
当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。
辅助 NameNode,分担其工作量。 在紧急情况下,可辅助恢复 NameNode。
HDFS的副本机制
HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,这个数据块被称为block,除了最后一个,所有的数据块都是同样大小的。
hdfs配置文件:https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
为了容错,文件的所有block都会有副本。每个文件的数据块大小和副本系数都是可配置的。 hadoop 当中, 文件的 block 块大小默认是 128M(134217728字节)。
hadoop 当中, 文件的 block 块大小默认是 128M(134217728字节)默认是3个副本。
HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,这个数据块被称为block,除了最后一个,所有的数据块都是同样大小的。
hdfs配置文件:https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
为了容错,文件的所有block都会有副本。每个文件的数据块大小和副本系数都是可配置的。
HDFS的Shell命令
HDFS的shell命令: 操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。
HDFS的shell命令格式:
格式1: hadoop fs <args> # 既可以操作HDFS,也可以操作本地系统
或者
格式2: hdfs dfs <args> # 只能操作HDFS系统可以使用hdfs dfs -h 查看所有命令
put: 上传 本地linux系统上传到HDFS文件系统上
get: 下载 从HDFS文件系统上下载到本地
Shell命令介绍
安装好hadoop环境之后,可以执行hdfs相关的shell命令对hdfs文件系统进行操作,比如文件的创建、删除、修改文件权限等。
对HDFS的操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。
Hadoop提供了文件系统的shell命令使用格式如下:
ls命令
mkdir命令
put命令
get命令
hadoop fs -get [-f] [-p] <src> ... <localdst>
下载文件到本地文件系统指定目录,localdst必须是目录
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限。
mv命令
rm命令
cp命令
cat命令
HDFS shell命令行常用操作
合并下载HDFS文件
hadoop fs -getmerge [-nl] [-skip-empty-file] <src> <localdst>
下载多个文件合并到本地文件系统的一个文件中。
-nl选项表示在每个文件末尾添加换行符
追加数据到HDFS文件中
hadoop fs -appendToFile <localsrc> ... <dst>
将所有给定本地文件的内容追加到给定dst文件。
dst如果文件不存在,将创建该文件。
如果<localSrc>为-,则输入为从标准输入中读取。