Hadoop学习笔记

Hadoop学习笔记

目录:

1.什么是Hadoop?

2.Hadoop的运行模式 (3种)

3.Hadoop运行环境搭建

4.Hadoop - HDFS分布式文件系统


Hadoop学习笔记_第1张图片

一、什么是Hadoop?

维基百科-Hadoop定义: https://zh.wikipedia.org/wiki/Apache_Hadoop "维基百科,自由的百科全书"

Apache Hadoop是一款支持数据密集型分布式应用程序并以Apache 2.0许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop是根据谷歌公司发表的MapReduce和Google文件系统的论文自行实现而成。所有的Hadoop模块都有一个基本假设,即硬件故障是常见情况,应该由框架自动处理。

Hadoop框架透明地为应用提供可靠性和数据移动。它实现了名为MapReduce的编程范式:应用程序被分割成许多小部分,而每个部分都能在集群中的任意节点上运行或重新运行。此外,Hadoop还提供了分布式文件系统,用以存储所有计算节点的数据,这为整个集群带来了非常高的带宽。MapReduce和分布式文件系统的设计,使得整个框架能够自动处理节点故障。它使应用程序与成千上万的独立计算的电脑和PB级的数据连接起来。现在普遍认为整个Apache Hadoop“平台”包括Hadoop内核、MapReduce、Hadoop分布式文件系统(HDFS)以及一些相关项目,有Apache Hive和Apache HBase等等。


1.简单概述什么是Hadoop

1.Hadoop 是一个分布式系统基础架构

2.主要用来解决海量数据存储和海量数据的分析计算问题

3.Hadoop生态系统

Hadoop学习笔记_第2张图片


2.Hadoop 四大优势

1.高可靠性:能够自动维护多份数据的副本,即使某个节点出现故障,不会导致数据丢失,服务保持正常运行。

2.高扩展性:通过在可用的计算机集群间分配任务和数据,这些集群可方便的扩展到数以千计的节点。

3.高效性:在MapReduce的思想下可以完成高效并发处理任务和数据来提高效率。

4.高容错性:能够把失败的任务自动重新部署。


3.Hadoop的组成-1.x/2.x版本差异

Hadoop学习笔记_第3张图片

在1.0中 MapReduce负责集群资源管理数据处理(计算)

在2.0中 MapReduce负责数据处理(计算)

集群资源管理的工作由Yarn完成


二、Hadoop运行模式

1.StandAlone 独立模式

独立模式:默认模式 所有程序都在单个JVM中执行,使用本地文件系统而非分布式文件系统。

2.Pseudo-distributed 伪分布式模式

伪分布式模式:也成为单节点集群 所有deamon 都在一个节点上运行 使用分布式文件系统。

3.Fully-Distributed 完全分布模式

Hadoop的 deamon运行在 多台集群上 所有主机设置SSH免密免密登录 生成公钥


三、Hadoop运行环境搭建

这里使用的是伪分布式的环境搭建 系统使用Centos7

1.三台网络配置正确的虚拟机 可以与主机互相ping通

2.三台虚拟机关闭防火墙

systemctl stop firewalld.service  #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl status firewalld.service #查看firewall状态 是否dead

3.三台虚拟机关闭selinux

setenforce 0 #临时停止
vi /etc/sysconfig/selinux #修改配置文件-永久关闭

配置文件中SELINUX=disabled

4.三台虚拟机更改主机名 ,设置主机名映射

hostnamectl set-hostname node01	#修改主机名 node01为自定义主机名
vi /etc/hosts	#添加IP和主机名映射

5.生成公钥私钥实现三台虚拟机之间免密登录

ssh-keygen -t rsa	#生成
ssh-copy-id node01	#三台执行拷贝拷贝
scp /root/.ssh/authorized_keys node02:/root/.ssh	#第一台执行分发
scp /root/.ssh/authorized_keys node03:/root/.ssh

6.时钟同步

yum install ntp -y  #安装ntp服务

systemctl enable ntpd #开机启动服务

systemctl start ntpd #启动服务

timedatectl set-timezone Asia/Shanghai #更改时区

timedatectl set-ntp yes #启用ntp同步

ntpq -p #同步时间

7.安装JDK 并配置环境变量

全部执行完后基本集群环境配置完成,下一步操作为安装Zookeeper 以及 Hadoop


四、HDFS

1.产出背景

随着数据量越来越大,在单一计算机中难以存储大量的数据,需要将数据分散存储到多台计算机中,但是分散存储不便于统一进行管理,分布式文件管理系统 用来解决统一管理多台计算机上的文件。

2.官方引言

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。这个项目的地址是https://hadoop.apache.org/core/。

3.组成架构

HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
Hadoop学习笔记_第4张图片

Namenode和Datanode被设计成可以在普通的商用机器上运行。这些机器一般运行着GNU/Linux操作系统(OS)。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。由于采用了可移植性极强的Java语言,使得HDFS可以部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。

集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode。

4.特性

1.副本存放:

Hadoop学习笔记_第5张图片

HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。目前实现的副本存放策略只是在这个方向上的第一步。实现这个策略的短期目标是验证它在生产环境下的有效性,观察它的行为,为实现更先进的策略打下测试和研究的基础。

大型HDFS实例一般运行在跨越多个机架的计算机组成的集群上,不同机架上的两台机器之间的通讯需要经过交换机。在大多数情况下,同一个机架内的两台机器间的带宽会比不同机架的两台机器间的带宽大。

通过一个机架感知的过程,Namenode可以确定每个Datanode所属的机架id。一个简单但没有优化的策略就是将副本存放在不同的机架上。这样可以有效防止当整个机架失效时数据的丢失,并且允许读数据的时候充分利用多个机架的带宽。这种策略设置可以将副本均匀分布在集群中,有利于当组件失效情况下的负载均衡。但是,因为这种策略的一个写操作需要传输数据块到多个机架,这增加了写的代价。

在大多数情况下,副本系数是3,HDFS的存放策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,这就提高了写操作的效率。机架的错误远远比节点的错误少,所以这个策略不会影响到数据的可靠性和可用性。于此同时,因为数据块只放在两个(不是三个)不同的机架上,所以此策略减少了读取数据时需要的网络传输总带宽。在这种策略下,副本并不是均匀分布在不同的机架上。三分之一的副本在一个节点上,三分之二的副本在一个机架上,其他副本均匀分布在剩下的机架中,这一策略在不损害数据可靠性和读取性能的情况下改进了写的性能。

2.健壮性

HDFS的主要目标就是即使在出错的情况下也要保证数据存储的可靠性。常见的三种出错情况是:Namenode出错, Datanode出错和网络割裂(network partitions)。

每个Datanode节点周期性地向Namenode发送心跳信号。网络割裂可能导致一部分Datanode跟Namenode失去联系。Namenode通过心跳信号的缺失来检测这一情况,并将这些近期不再发送心跳信号Datanode标记为宕机,不会再将新的IO请求发给它们。任何存储在宕机Datanode上的数据将不再有效。Datanode的宕机可能会引起一些数据块的副本系数低于指定值,Namenode不断地检测这些需要复制的数据块,一旦发现就启动复制操作。在下列情况下,可能需要重新复制:某个Datanode节点失效,某个副本遭到损坏,Datanode上的硬盘错误,或者文件的副本系数增大。

3.数据完整性

从某个Datanode获取的数据块有可能是损坏的,损坏可能是由Datanode的存储设备错误、网络错误或者软件bug造成的。HDFS客户端软件实现了对HDFS文件内容的校验和(checksum)检查。当客户端创建一个新的HDFS文件,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它会检验从Datanode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该数据块的副本。

4.不适合低延时数据访问

例如毫秒级数据

5.不适合对大量小文件存储

5.HDFS数据流

Hadoop学习笔记_第6张图片

流水线复制

当客户端向HDFS文件写入数据的时候,一开始是写到本地临时文件中。假设该文件的副本系数设置为3,当本地临时文件累积到一个数据块的大小时,客户端会从Namenode获取一个Datanode列表用于存放副本。然后客户端开始向第一个Datanode传输数据,第一个Datanode一小部分一小部分(4 KB)地接收数据,将每一部分写入本地仓库,并同时传输该部分到列表中第二个Datanode节点。第二个Datanode也是这样,一小部分一小部分地接收数据,写入本地仓库,并同时传给第三个Datanode。最后,第三个Datanode接收数据并存储在本地。因此,Datanode能流水线式地从前一个节点接收数据,并在同时转发给下一个节点,数据以流水线的方式从前一个Datanode复制到下一个。

你可能感兴趣的:(Hadoop学习笔记)