大数据概念
海量数据,具有高增长率、数据类型多样化、一定时间内无法使用常规软件工具进行捕捉、管理和处理的数据集合。
大数据的特征 4V
- Volume:巨大的数据量
- Variety:数据类型多样化
–(1):结构化的数据
即有固定格式和有限长度的数据。
–(2):半结构化的数据
是一些XML或者HTML的格式的数据。
–(3):非结构化的数据
现在非结构化的数据越来越多,就是不定长、无固定格式的数据,例如网页、语音,视频等。- Velocity: 数据增长速度快
- Value:价值密度低
google的三篇论文
- 2003年发表的《GFS》
基于硬盘不够大、数据存储单份的安全隐患问题,提出的分布式文件系统用于存储的理论思想。
· 解决了如何存储大数据集的问题,核心的思想是硬盘横向扩展以及数据冗余
GFS的优点:
- 理论上能存储无限数据,因为硬盘可以横向扩展。
- 容错性,数据冗余多份,多份数据同时损坏的概念几乎为零。
- 存储大数据的性能比传统关系型数据库好。
- 2004年发表的《MapReduce》
基于分布式文件系统的计算分析的编程框架模型。移动计算而非移动数据,分而治之。
· 解决了如何快速分析大数据集的问题
- 2006年发表的《BigTable》
针对于传统型关系数据库不适合存储非结构化数据的缺点,提出了另一种适合存储大数据集的解决方案:
基本思想:把所有数据存入一张表,通过空间换取时间。
hadoop简介
Hadoop是Apache基金会旗下一个开源的分布式存储和分析计算平台,使用java语言开发,具有很好的跨平台性,用于在由商用(廉价)硬件构建的计算机集群上对超大型数据集进行分布式存储和分布式处理.充分使用集群的高速计算和存储.
apache hadoop 和 Cloudera hadoop(cdh)的区别
Hadoop大致可分为Apache Hadoop和第三方发行版本Hadoop。
考虑到Hadoop集群部署的高效性,集群的稳定性以及后期集中的配置管理,业界大多使用Cloudera公司的发行版CDH。
目前国内用的比较多的hadoop是cdh和hdp(HortonWorks data platform)
CDH : Cloudera’s Distribution, including Apache Hadoop
apache:
• 版本管理混乱,多个版本同时再更新
• 部署过程繁琐,通常安装集群需要编写大量的配置文件,分发到每一台节点上,容易出错,效率低下;
• 兼容性差 在Hadoop生态圈中,组件的选择、使用需要大量考虑兼容性的问题
• 对集群的监控,运维,需要安装第三方的其他软件,运维难度比较大;
cdh :由Cloudera基于稳定版本的Apache Hadoop构建
• 版本划分清晰
• 在兼容性,安全性,稳定性上比Apache Hadoop有大幅度的增强;
• 运维简单方便,对于Hadoop集群提供管理,诊断,监控等功能
• CDH提供成体系的文档,很多大公司的应用案例以及商业支持等。
关于hadoop版本迭代中对jdk的支持
| hadoop版本 | jdk版本要求 |
|---|---|
| <= 2.6 | jdk 6 |
| >=2.7.0 | jdk7 |
| >=3.0.0 | jdk8 |
hadoop的组件
hadoop2.0 —>
Hadoop Common: 支持其他hadoop组件的基础库和工具.
Hadoop Distributed File System (HDFS™): 为应用数据提供高吞吐量访问的分布式文件系统
Hadoop YARN: 作业调度和集群资源管理框架
Hadoop MapReduce:基于yarn的大数据集并行处理系统.
hadoop3.0以后多了这两个组件
Hadoop Ozone: : hadoop对象存储
Hadoop Submarine:Hadoop的机器学习引擎
hdfs安装模式
一,本地模式
模式特点
无需启动任何守护进程(daemon),所有程序都在单个JVM上执行。使用的是本地文件系统而不是hdfs.主要用于在本地测试和调试mapreduce任务的逻辑是否正确.因此,这种模式适宜用在开发阶段.hadoop不需要做任何配置,默认就是本地模式
安装流程:
①安装jdk环境 解压,更名,配置环境变量,重新加载环境变量,测试环境变量是否配置成功
②安装hadoop 解压,更名,配置环境变量,重新加载环境变量,测试环境变量是否配置成功,wordcount案例测试
二,伪分布式模式
在一台机器上安装,使用的是分布式文件系统hdfs,而不是本地文件系统。
- Hdfs涉及到的相关守护进程(namenode,datanode,secondarynamenode)都运行在一台机器上,都是独立的java进程。增加了代码调试功能,允许检查内存使用情况,HDFS输入输出
作用:模拟一个小的集群,开发测试hadoop程序是否正确执行
安装流程:
①关闭防火墙,NetWorkManager,SELinux
②网络连接模式为NAT模式,主机使用静态ip
③设置ip和主机名的映射关系
④配置主机间的免密登录
⑤安装jdk和hadoop
⑥配置jdk和hadoop环境变量
⑦配置文件修改core-site.xml中配置文件系统为hdfs,在hdfs-site.xml中配置默认副本数为1,hadoop-env.sh中设置jdk环境变量
⑧格式化namenode
⑨启动hdfs
⑩使用jps命令查看相关的守护进程是否都起来,也可以通过namenode的web页面查看活跃节点数是否为1
11 运行wordcount案例,检测配置的伪分布式是否正常运行
三,完全分布式模式
完全分布式,指的是在真实环境下,使用多台机器,共同配合,来构建一个完整的分布式文件系统。通常为生产环境
在真实环境中,hdfs中的相关守护进程也会分布在不同的机器中,比如:
-1. namenode守护进程尽可能的单独部署在一台硬件性能相对来说比较好的机器中。
-2. 其他的每台机器上都会部署一个datanode守护进程,一般的硬件环境即可。
-3. secondarynamenode守护进程最好不要和namenode在同一台机器上。
安装流程:
①关闭防火墙,NetWorkManager,SELinux
②网络连接模式为NAT模式,主机使用静态ip
③设置ip和主机名的映射关系
④配置主机间的免密登录
⑤主机间时间同步
⑥安装jdk和hadoop
⑦配置jdk和hadoop环境变量
⑧在core-site.xml中配置默认文件系统为hdfs,在hdfs-site.xml中配置namenode元数据以及datanode块数据存放目录,默认副本数,块大小,namenode守护进程的http地址,secondarynamenode守护进程的http地址;mapred-site.xml中mapreduce作业的运行框架,mapreduce作业历史服务器地址,yarn-site.xml中配置resourceManager守护进程所在的主机名以及nodeManager的附属服务;hadoop-env.sh和yarn-env.sh中设置jdk环境变量,在slaves文件中设置datanode节点的主机名/ip
hdfs,namenode,secondary namenode,datanode,resource Manager,NodeManager的配置,涉及的配置文件core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml,hadoop-env.sh,
⑨namenode格式化
⑩启动集群
11 查看所有主机的守护进程是否都起来,web页面是否正常
12 执行wordcount测试用例
hdfs的启动命令
①start-dfs.sh 启动hdfs集群守护进程的脚本
②start-yarn.sh 启动yarn守护进程的脚本
③stop-dfs.sh 停止hdfs集群守护进程的脚本
④stop-yarn.sh 停止yarn守护进程的脚本
⑤hadoop-daemon.sh 单独启/停hdfs集群当前节点某个守护进程的脚本 使用方式hadoop-daemon.sh start 守护进程名(namenode/secondarynamenode/datanode)
⑥hadoop-daemons.sh 单独启/停hdfs集群所有节点的某个守护进程,使用方式同上
⑦yarn-daemon.sh 单独启/停yarn当前节点某个守护进程的脚本 yarn-daemon.sh start/stop 使用方式 yarn-daemon.sh start/stop 守护进程名(resourcemanager/nodemanager)
⑧yarn-daemons.sh 单独启/停yarn所有节点的某个守护进程 使用方式同上
HDFS上的块大小为什么会远远大于传统文件? (Hdfs block数据块大小的设置规则)
block不能设置过大或过小
如果设置的过大,一方面磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据的时候,会变得很慢.另一方面,mapreduce框架会为每个块创建一个map任务,如果文件过大,运行速度也会很慢;
如果设置的过小,一方面存放大量小文件(每个块的元数据会占用150个字节)会占用namenode中大量的内存来存储元数据,而namenode的内存是有限的;另一方面,块过小,寻址时间就会增加,就会降低吞吐量
至于块大小设置为多大合适
hdfs中平均寻址时间为10ms,通常认为寻址时间占数据传输时间的1%时,性价比最高
目前机械硬盘文件顺序读写的速度为100MB/s,最佳block大小计算为:100MB/s * 1 s = 100MB,但是由于计算机是以二进制的方式进行存储的,因此容量是2的n次方,离100MB最近的就是128MB.生产环境中还是得根据使用的磁盘的读写速度适当修改block size.
hadoop关于block size的默认值
2.7.3之前默认块大小为64MB,2.7.3及之后版本默认块大小为128MB
如何提高HDFS的存储能力
①namenode的内存够用的情况下扩展datanode
②namenode的内存不够用的情况下,提供块大小
hadoop优点:
- 高容错性(硬件故障是常态):数据自动保存多个副本,副本丢失后,会自动恢复
- 适合大数据集:GB、TB、甚至PB级数据、千万规模以上的文件数量,1000以上节点规模。
- 数据访问方式为: 一次性写入,多次读取;表示一旦写入hdfs的文件就不能对其进行修改.但可以多次读取.目前,hdfs中任何时候都只能有一个写入操作,保证数据一致性,安全性
- 构建成本低:可以构建在廉价机器上。
- 多种软硬件平台中的可移植性
- 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
- 高可靠性:Hadoop的存储和处理数据的能力值得人们信赖.
hadoop缺点:
- 不适合做低延迟数据访问:
HDFS的设计目标有一点是:处理大型数据集,高吞吐率。这一点势必要以高延迟为代价的。因此HDFS不适合处理用户要求的毫秒级的低延迟应用请求- 不适合小文件存取:
一个是大量小文件需要消耗大量的寻址时间,违反了HDFS的尽可能减少寻址时间比例的设计目标。第二个是内存有限,一个block元数据大内存消耗大约为150个字节,存储一亿个block和存储一亿个小文件都会消耗20G内存。因此相对来说,大文件更省内存- 不适合并发写入,文件随机修改:
HDFS上的文件只能拥有一个写者,仅仅支持append操作。不支持多用户对同一个文件的写操作,以及在文件任意位置进行修改
HDFS简介
HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于廉价的商用硬件集群上,是管理网络中跨多台计算机存储的文件系统。
HDFS的框架
HDFS 采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。一个HDFS集群是由一个NameNode和一定数目的DataNode组成的。
HDFS client提供了一个类似POSIX(Potable Operating System interface,可移植操作系统接口)的文件系统接口供用户调用,通过与namenode和datanode的交互访问hdfs中的文件
namenode:
①namenode管理文件系统的命名空间.它维护着文件系统树及整棵树内所有的文件和目录.这些信息以命名空间镜像文件(fsimage)和编辑日志文件(edits文件)的形式永久保存在本地磁盘中.
②namenode根据datanode发送的文件数据块信息在内存中维护文件,文件块与datanode的映射关系
③实施副本冗余策略,默认三个副本,包括文件块本身
④处理客户端的访问请求,比如客户端想读取一个文件的时候,namenode会告诉datanode这些文件的块在哪些datanode上
⑤心跳机制:namenode会周期型的接收心跳和块的状态报告信息,若没收到心跳信息,namenode认为datanode已经宕机,会将datanode上副本数不足的块进行复制到其他的datanode节点上.
datanode:
①以数据块的形式存储hdfs文件
②响应客户端的请求,执行数据块的读写操作
③周期型的向namenode发送心跳信息,以及所存储的数据块列表信息
SecondaryNamennode
主要是辅助namenode进行fsimage镜像文件和editlog的合并,减小editlog文件大小,以便缩短下次Namenode的重启时间,能尽快退出安全模式。
检查点机制(checkpoint)
满足下列条件之一就会触发检查点机制
①时间到了,hdfs默认间隔一小时创建一个检查点 具体时间由dfs.namenode.checkpoint.period决定,默认3600
②对hdfs执行的操作次数到了,目前的edit文件中事务数(txid)达到100万条,即使时间未到,也会创建检查点,每个60秒检查一次 具体值由dfs.namenode.checkpoint.txns决定,默认1000000,检查时间由dfs.namenode.checkpoint.check.period决定,默认60秒
③edit文件大小>64MB也会触发检查点 由fs.checkpoint.size参数决定,默认64MB,不过博主在配置文件中并没有找到这个参数,但是在java的源码中由提到这个属性
检查点的具体步骤(也就是secondary namenode的工作内容)
(1)Secondary NameNode定期询问NameNode是否需要checkpoint。并返回是否需要checkpoint的结果
(2)Secondary NameNode请求执行checkpoint。
(3)NameNode滚动正在写的edits日志(rolledit)生成 edits_inprogress_(seen_txid数值)文件,这样新的请求操作就会被记录在edits_inprogress文件中。
(4)Secondary NameNode通过http请求获取namenode中滚动前的编辑日志和镜像文件。
(5)Secondary NameNode加载编辑日志和镜像文件到内存,执行edit文件中的增删改操作进行合并,生成新的镜像文件fsimage.ckpt。
(6)通过http协议将fsimage.ckpt发送到NameNode。
(7)NameNode将fsimage.ckpt重新命名成fsimage
镜像文件fsimage
是hdfs文件系统的命名空间镜像文件,他是文件系统元数据的一个永久检查点,内部维护的是最近一次检查点的文件系统树和整棵树内部的所有目录和文件的元数据,如txid(事务id) ,type(文件类型),mtime(修改时间),atime(访问时间),permission(访问权限),replication(副本数据),numBytes(块文件实际大小 ),块id,文件的块列表信息等.
fsimage默认只保留最近两次检查点文件,也就是只保留两个fsimage镜像文件.
edit日志文件
集群正常运行时,客户端的所有更新操作(创建,删除,修改,重命名)除了在内存中维护之外,还会被直接写入edits文件,而不是fsimage镜像文件.
:在分布式文件系统中,通常fsimage镜像文件是比较庞大的,如果客户端直接将更新操作直接写入fsimage文件,性能一定会越来越差,通常edits日常比fsimage小得多,一个edits日志文件最大64M,因此将更新操作写入edits日志是非常高效的.
edits文件的内容:行为代码(关闭,创建,删除,重命名,修改权限等,),事务id,客户端信息,块id,副本数,访问时间,修改时间等
查看f

最低0.47元/天 解锁文章
364

被折叠的 条评论
为什么被折叠?



