大数据原理--HDFS和Hadoop
Posted 糟老头修炼记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据原理--HDFS和Hadoop相关的知识,希望对你有一定的参考价值。
1.三次信息化浪潮:
信息化浪潮 |
发生时间 |
标志 |
解决问题 |
代表企业 |
第一次 |
1980年前后 |
个人计算机 |
信息处理 |
Intel、AMD、IBM、苹 果、微软、联想、戴 尔、惠普等 |
第二次 |
1995年前后 |
互联网 |
信息传输 |
雅虎、谷歌、阿里巴 巴、百度、腾讯等
|
第三次 |
2010年前后
|
物联网、云计 算和大数据
|
信息爆炸
|
将涌现出一批新的市 场标杆企业
|
2. 信息科技为大数据时代提供技术支撑
(1)存储设备容量不断增加
(2)CPU 处理能力大幅提升
(3)网络带宽不断增加
3.数据产生方式的变化:
运营式系统阶段、用户原创内容阶段、感知式系统阶段
4.大数据发展历程:
(1)第一阶段:萌芽期--上世纪90年代至本世纪初随着数据挖掘理论和数据库技术的逐步成熟,一批商业智能工具和知识管理技术开始被应用,如数据仓库、专家系统、知识管理系统等。
(2)第二阶段:成熟期--本世纪前十年Web2.0应用迅猛发展,非结构化数据大量产生,
传统处理方法难以应对,带动了大数据技术的快速突破,大数据解决方案逐渐走向成熟,形成了并行计算与分布式系统两大核心技术,谷歌的GFS和MapReduce等大数据技术受到追捧,Hadoop平台开始大行其道
(3)第三阶段:大规模应用期--2010年以后大数据应用渗透各行各业,数据驱动决策,信息社会智能化程度大幅提高
5.大数据的特征:数据量大,数据类型繁多,处理速度快,价值密度低
6.大数据的影响:
对科学研究的影响:实验--理论--计算--数据
对思维方式的影响:全样而非抽样、效率而非精确、相关而非因果
在社会发展方面,大数据决策逐渐成为一种新的决策方式,大数据应用有力促进了信息技术与各行业的深度融合,大数据开发大大推动了新技术和新应用的不断涌现
在就业市场方面,大数据的兴起使得数据科学家成为热门职业
在人才培养方面,大数据的兴起,将在很大程度上改变中国高校信息技术相关专业的现有教学和科研体制
7.大数据技术的不同层面和功能:
(1)数据采集 :利用ETL工具将分布的、异构数据源中的数据如关系数据、平面数
据文件等,抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础;或者也可以把实时采集的数据作为流计算系统的输入,进行实时处理分析
(2)数据存储和管理 :利用分布式文件系统、数据仓库、关系数据库、NoSQL数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理
(3)数据处理与分析 :利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析;对分析结果进行可视化呈现,帮助人们更好地理解数据、分析数据
(4)数据隐私和安全 :在从大数据中挖掘潜在的巨大商业价值和学术价值的同时,构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全
8.大数据的计算模式:
大数据计算模式 |
解决问题 |
产品 |
批处理计算 |
针对大规模数据的批量处理 |
MapReduce、Spark等 |
流计算 |
针对流数据的实时计算 |
Storm、S4、Flume、Streams、 Puma、DStream、Super Mario、银河流数据处理平台等 |
图计算 |
针对大规模图结构数据 的处理
|
Pregel、GraphX、Giraph、 PowerGraph、Hama、GoldenOrb |
查询分析计算 |
大规模数据的存储管理 |
Dremel、Hive、Cassandra、Impala |
9.云计算、大数据、物联网:
(1)云计算:通过网络以服务方式为用户提供廉价的IT资源。解决海量数据的分布式存储和分布式处理的为题。
云计算提供的三种云服务:
IaaS:Infrastructureas a Service。基础设施即服务。将基础设施(计算资源和存储)作为服务出租
PaaS:Platform as aService,平台即服务
SaaS:Software as aService,软件即服务
云计算关键技术:虚拟化、分布式存储、分布式计算、多租户等
云计算数据中心:
(1)云计算数据中心是一整套复杂的设施,包括刀片服务器、宽带网络连接、环境控制设备、监控设备以及各种安全装置等
(2)数据中心是云计算的重要载体,为云计算提供计算、存储、带宽等各种硬件资源,为各种平台和应用提供运行支撑环境
(3)全国各地推进数据中心建设
云计算应用:政务云,医疗云,教育云,企业云等
(2)物联网:物联网是物物相连的互联网,是互联网的延伸,它利用局部网络或互联网等通信技术把传感器、控制器、机器、人员和物等通过新的方式联在一起,形成人与物、物与物相联,实现信息化和远程管理控制
物联网中的关键技术:识别和感知技术(二维码、RFID、传感器等)、网络与
通信技术、数据挖掘与融合技术等
物联网应用:
物联网产业:
(3)云计算、大数据和物联网的联系:
<1>云计算为大数据提供了技术基础
大数据为云计算提供用武之地
<2>物联网是大数据的重要来源
大数据技术为物联网数据分析提供支撑
<3>云计算为物联网提供海量数据存储能力
物联网为云计算技术提供了广阔的应用空间
二.分布式文件系统HDFS:
1.大数据处理架构Hadoop的两大核心:HDFS和MapReduce
HDFS:海量数据的分布式存储
MapReduce:海量数据的分布式管理
2.分布式文件系统:把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计
算机集群。目前的分布式文件系统所采用的计算机集群,都是由普通硬件构成的,这就大大降低了硬件上的开销
3.分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两
类,一类叫“主节点”(Master Node)或者也被称为“名称结点”(NameNode),另
一类叫“从节点”(Slave Node)或者也被称为“数据节点”(DataNode)
名称节点:负责文件系统元数据的管理。元数据保存在内存中
数据节点:存储数据。数据内容保存在磁盘
元数据:文件是什么、每个文件被分成多少块、每个块和文件是怎么映射的、每个块存储到哪个服务器上。
名称节点(NameNode)负责管理分布式文件系统的命名空间
(Namespace),保存了两个核心的数据结构,即FsImage和EditLog
<1>FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
<2>操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作
<3>名称节点记录了每个文件中各个块所在的数据节点的位置信息
FsImage文件:
FsImage文件用来保存文件系统树以及文件树中的所有文件和文件夹的元数据
FsImage文件没有记录块存储在哪个数据节点。而是由名称节点把这些映射保留在内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的
名称节点的启动:
在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件
名称节点起来之后,HDFS中的更新操作会重新写到EditLog文件中,因为FsImage文件一般都很大(GB级别的很常见),如果所有的更新操作都往FsImage文件中添加,这样会导致系统运行的十分缓慢,但是,如果往EditLog文件里面写就不会这样,因为EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新
数据节点:
数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中
SecondaryNameNode第二名称节点:
第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是单独运行在一台机器上
SecondaryNameNode的工作情况:
(1)SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edit.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别;
(2)SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下;
(3)SecondaryNameNode将下载下来的FsImage载入到内存,然后一条一条地执行EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并;
(4)SecondaryNameNode执行完(3)操作之后,会通过post方式将新的FsImage文件发送到NameNode节点上
(5)NameNode将从SecondaryNameNode接收到的新的FsImage替换旧的FsImage文件,同时将edit.new替换EditLog文件,通过这个过程EditLog就变小了
一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上是保存在本地Linux文件系统中的
4.HDFS的特点:兼容廉价的硬件设备、 流数据读写、大数据集、简单的文件模型、强大的跨平台兼容性
HDFS的局限性:不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意修改文件
5.HDFS中“块”的概念:
HDFS默认一个块64MB,一个文件被分成多个块,以块作为存储单位
块的大小远远大于普通文件系统,可以最小化寻址开销
好处:
(1)支持大规模文件存储
(2)简化系统设计
(3)适合数据备份:每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性
6.HDFS命名空间管理:HDFS的命名空间包含目录、文件和块
HDFS使用的是传统的分级文件体系,因此,用户可以像使用普通文件系统一样,创建、删除目录和文件,在目录间转移文件,重命名文件等
7.HDFS通信协议:
(1)HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输
(2)所有的HDFS通信协议都是构建在TCP/IP协议基础之上的
(3)客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互
(4)名称节点和数据节点之间则使用数据节点协议进行交互
(5) 客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的。在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求
(6)HDFS客户端是一个库,暴露了HDFS文件系统接口,这些接口隐藏了HDFS实现中的大部分复杂性
(7)客户端可以支持打开、读取、写入等常见的操作,并且提供了类似Shell的命令行方式来访问HDFS中的数据
(8)HDFS也提供了Java API,作为应用程序访问文件系统的客户端编程接口
8. HDFS 1.0版本只设置唯一一个名称节点,它的局限性:
(1) 命名空间的限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到内存空间大小的限制。
(2) 性能的瓶颈:整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。
(3) 隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。
(4) 集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
9. 作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上
冗余备份的好处:
(1)加快数据传输速度
(2) 容易检查数据错误
(3) 保证数据可靠性
10.HDFS存取原理:
(1)数据的存放:
<1>第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘
不太满、CPU不太忙的节点
<2>第二个副本:放置在与第一个副本不同的机架的节点上
<3>第三个副本:与第一个副本相同机架的其他节点上
<4>更多副本:随机节点
(2)数据的读取:就近读取
<1>HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API
获取自己所属的机架ID
<2>当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包
含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,
当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副
本读取数据,如果没有发现,就随机选择一个副本读取数据
(3)数据的错误和恢复:
<1> 名称节点出错:据备份服务器SecondaryNameNode中的FsImage和
Editlog数据进行恢复。
<2> 数据节点出错:
每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。
当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求
由于一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子。
名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位置
<3> 数据本身出错:客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块
11.HDFS的读写过程:
读数据:
Import 包
声明环境变量Configuration
用文件系统FileSystem声明一个实例
生成Path变量:表示要打开的文件路径(给出的文件路径是URI类型:hdfs://localhost:9000/user/hadoop/test.txt)
设置文件的输入流inputStream来打开文件
设置BufferedReader读取文件
关闭文件:file.close()
FileSystem是一个通用文件系统的抽象基类,可以被分布式文件系统继承,所有可能使用
Hadoop文件系统的代码,都要使用这个类
Hadoop为FileSystem这个抽象类提供了多种具体实现
DistributedFileSystem就是FileSystem在HDFS文件系统中的具体实现
FileSystem的open()方法返回的是一个输入流FSDataInputStream对象,在HDFS文件系统中,具体的输入流就是DFSInputStream;FileSystem中的create()方法返回的是一个输出流
FSDataOutputStream对象,在HDFS文件系统中,具体的输出流就是DFSOutputStream。
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FSDataInputStream in = fs.open(newPath(uri));
FSDataOutputStream out = fs.create(newPath(uri));
读完数据之后,FSDataInputStream要关闭和数据节点的连接
读数据过程:
写数据过程:
Hadoop的启动:
cd /usr/loclal/hadoop
./bin/hdfs namenode -format
./sbin/start-dfs.sh
Hadoop中有三种Shell命令方式:
(1)hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
(2)hadoop dfs只能适用于HDFS文件系统
(3)hdfs dfs跟hadoopdfs的命令作用一样,也只能适用于HDFS文件系统
HDFS常用命令:
hadoop fs -ls <path>:显示<path>指定的文件的详细信息
hadoop fs -mkdir <path>:创建<path>指定的文件夹
hadoop fs -cat <path>:将<path>指定的文件的内容输出到标准输出(stdout)
hadoop fs -copyFromLocal <localsrc><dst>:将本地源文件<localsrc>复制到路径
<dst>指定的文件或文件夹中
配置好Hadoop之后可以在web页面用http://localhost:50070查看HDFS的内容
(50070:端口号)
三.Hadoop
Hadoop两大核心组件:HDFS和MapReduce
1. Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构
Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中
Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce
Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力
几乎所有主流厂商都围绕Hadoop提供开发工具、开源软件、商业化工具和技术服务,如谷歌、雅虎、微软、思科、淘宝等,都支持Hadoop
2.Hadoop的特性:
Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且
是以一种可靠、高效、可伸缩的方式进行处理的
特性:
高可靠性
高效性
高可扩展性
高容错性
成本低
运行在Linux平台上
支持多种编程语言
3. Hadoop应用架构:
HDFS:分布式文件系统
MapReduce :分布式并行编程模型
YARN :资源管理和调度器
Tez :运行在YARN之上的下一代Hadoop查询处理框架
Hive :Hadoop上的数据仓库
HBase :Hadoop上的非关系型的分布式数据库
Pig :一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig Latin
Sqoop: 用于在Hadoop与传统数据库之间进行数据传递
Oozie :Hadoop上的工作流管理系统
Zookeeper :提供分布式协调一致性服务
Storm :流计算框架
Flume :一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统
Ambari :Hadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控
Kafka :一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据
Spark :类似于HadoopMapReduce的通用并行框架
4.Hadoop的版本:
第一代Hadoop包含三个大版本,分别是0.20.x,0.21.x和0.22.x,其
中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则增加
了NameNode HA等新的重大特性
第二代Hadoop包含两个版本,分别是0.23.x和2.x,它们完全不同于
Hadoop 1.0,是一套全新的架构,均包含HDFS Federation和YARN两
个系统,相比于0.23.x,2.x增加了NameNode HA和Wire-compatibility
两个重大特性
不同厂商的Hadoop的不同版本的特性:
5. 选择 Hadoop版本的考虑因素:
是否开源(即是否免费)
是否有稳定版
是否经实践检验
是否有强大的社区支持
6.Linux的一些指令:
(1)shell:它接收用户命令,然后调用相应的应用程序。是指“提供使用者使用界面”的软件(命令解析器),类似于DOS下的command和后来的cmd.exe。
(2)sudo命令:sudo是ubuntu中一种权限管理机制,管理员可以授权给一些普通用户去执行一些需要root权限执行的操作。
(3)Ubuntu终端复制粘贴快捷键:
在Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,即粘贴是 ctrl+shift+v
(4)SSH:Secure Shell 的缩写,是建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠、专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH是由客户端和服务端的软件组成,服务端是一个守护进程(daemon),它在后台运行并响应来自客户端的连接请求,客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序
配置SSH 的原因:
Hadoop名称节点(NameNode)需要启动集群中所有机器的Hadoop守护进程,这个过程需要通过SSH登录来实现。Hadoop并没有提供SSH输入密码登录的形式,因此,为了能够顺利登录每台机器,需要将所有机器配置为名称节点可以无密码登录它们
7.伪分布式配置Hadoop:
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件
Hadoop 的配置文件位于/usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml
Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name和value 的方式来实现
步骤:
修改配置文件:core-site.xml,hdfs-site.xml,mapred-site.xml
初始化文件系统hadoopnamenode -format
启动所有进程start-all.sh
访问web界面,查看Hadoop信息
8. hadoop fs和hadoopdfs和hdfs df的区别:
hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
hadoop dfs只能适用于HDFS文件系统
hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统
9.Hadoop集群:
Hadoop框架中最核心的设计是为海量数据提供存储的HDFS和对数据进行计算的
MapReduce的作业主要包括:(1)从磁盘或从网络读取数据,即IO密集工作;(2)计算数据,即CPU密集工作
Hadoop集群的整体性能取决于CPU、内存、网络以及存储之间的性能平衡。因此运营团队在选择机器配置时要针对不同的工作节点选择合适硬件类型
一个基本的Hadoop集群中的节点主要有:
NameNode:负责协调集群中的数据存储
DataNode:存储被拆分的数据块
JobTracker:协调数据计算任务
TaskTracker:负责执行由JobTracker指派的任务
SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息
在集群中,大部分的机器设备是作为Datanode和TaskTracker工作的
相应的硬件规格:
Datanode/TaskTracker的硬件规格:
•4个磁盘驱动器(单盘1-2T)
•2个4核CPU,至少2-2.5GHz
•16-24GB内存
•千兆以太网
NameNode提供整个HDFS文件系统的NameSpace(命名空间)管理、块管理等所有服务,因此需要更多的RAM,与集群中的数据块数量相对应,并且需要优化RAM的内存通道带宽,采用双通道或三通道以上内存。硬件规格:
•8-12个磁盘驱动器(单盘1-2T)
•2个4核/8核CPU
•16-72GB内存
•千兆/万兆以太网
SecondaryNameNode在小型集群中可以和NameNode共用一台机器,较大的群集可以采用与NameNode相同的硬件
集群基准测试:
Hadoop自带有一些基准测试程序,被打包在测试程序JAR文件中
用TestDFSIO基准测试,来测试HDFS的IO性能
用排序测试MapReduce:Hadoop自带一个部分排序的程序,这个测试过程的整个数据集都会通过洗牌(Shuffle)传输至Reducer,可以充分测试MapReduce的性能
以上是关于大数据原理--HDFS和Hadoop的主要内容,如果未能解决你的问题,请参考以下文章
参考大数据厦门大学林子雨编著的《大数据技术原理与应用(第3版)》中第三课《HDFS编程实践(Hadoop3.1.3)》遇到的bug