1.1 Hadoop 简介 & 相关

简介

问题起源

  • Google
    爬取全球的网站,然后计算页面的PageRank
  • 要解决的问题
    这些网站怎么存放
    这些网站应该怎么计算

思想之源

  • Google发布了三篇论文
    GFS : Google File System – 谷歌文件系统
    MapReduce :数据计算的方法
    BigTable

Hadoop创始人

Doug cutting 花费了自己的两年业余时间,用java将论文实现了出来
在这里插入图片描述

发展历程

  • 2003-2004年,Google公开了部分GFS和Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和Mapreduce机制,一个微缩版:Nutch
  • Hadoop 于 2005 年秋天作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。
  • 2006 年 3 月份,Map-Reduce分布式离线计算 和 Nutch Distributed File System (NDFS) nutch分布式文件系统分别被纳入称为 Hadoop 的项目中。
  • (Hadoop如今是Apache基金会顶级金牌项目)
  • Hadoop这名字来源于Doug Cutting儿子的玩具大象。

对应实现

  • Hadoop(Java) — 分布式系统架构
  • HDFS - Hadoop Distributed File System
    (hadoop 分布式文件系统)
  • MapReduce — 分布式计算系统

Logo
在这里插入图片描述

官网地址: http://hadoop.apache.org/
经过时间的发展 Hadoop 1.x-->3.x



Hadoop组成

Hadoop Common
	---- 基础型功能
Hadoop Distributed File System
	---- 负责存放数据
Hadoop YARN
	---- 负责资源的调配
Hadoop MapReduce
	---- 大数据的计算框架
Hadoop Ozone
	---- 数据存放到仓库
Hadoop Submarine
	---- 机器学习引擎

Hadoop = hdfs(存储) + mapreduce(计算) + yarn(资源管理) + common(工具包) …

分布式存储系统HDFS

(Hadoop Distributed File System )

  • 分布式存储系统
  • 提供了 高可靠性、高扩展性和高吞吐率的数据存储服务

分布式计算框架MapReduce

  • 分布式计算框架(计算向数据移动)
  • 具有 易于编程、高容错性和高扩展性等优点。

分布式资源管理框架YARN

(Yet Another Resource Management)

  • 负责集群资源的管理和调度



HDFS分布式存储系统(★)

HDFS

  • HDFS是什么?
    HDFS是Hadoop分布式文件存储系统
  • 为什么会有分布式的文件存储系统出现?
    以应对大量的数据和如何计算的难题
  • 大量【pb级以上】的网页怎么存储问题
    (之前是用磁柜存储)

分布式存储系统HDFS (Hadoop Distributed File System)
主要解决大数据的存储问题。

经过多年的发展,HDFS的应用已经非常成熟非常多,如百度网盘 360云盘 腾讯微云 阿里云(不仅提供服务器和云存储还提供服务,比一般的强多了)

大数据好多技术框架都架构于这个文件存储系统之上的。

在这里插入图片描述
hdfs架构图
hdfs架构图

hdfs的构建原理

Hadoop Distributed File System分布式文件系统 
---- 负责存放数据

数据量比较大

数据的安全性

概念

  • 字节数组
    文件的抽象概念
  • 切分数据
    对字节数组进行切分
  • 拼接数据
    按照数组的偏移量将数据连接到一起
  • 偏移量
    当前数据在数组中的相对位置
  • 节点
    集群中参与计算的虚拟机(服务器)
  • 数据块 Block
    数据被切分后的一个整体
    1.x 64M ---- 2.x 128M
    真实情况下,会根据文件大小和集群节点的数量综合考虑块的大小
  • 数据块的个数 =Ceil( 文件大小 / 每个块的大小)
  • 每个数据块会有3个副本,相同副本是不会存放在同一个节点上
  • 副本的数量可以变更,但是Block的大小是不能改变的

数据存储的原理:

  • 不论文件是大是小,所有的文件都是由字节数组构成
  • 如果我们要切分文件,就是将一个字节数组分成多份
  • 我们将切分后的数据拼接到一起,数据可以继续使用
  • 我们需要根据数据的偏移量将他们重新拼接到一起

效率

  • 我们为了更好地去处理数据,我们希望更多的节点参与到运算
  • 那么我们需要将数据进行切分
  • 切分之后,子数据块会放在不同的节点上
    因为大小和切片数量和存放位置都是未知的
    如果直接查询效率很低
    需要专门给节点进行分工
        存储 DataNode
        记录 NameNode

拆分的标准

  • 拆分的数据块需要等大
    等大考虑算法的时候,可以将问题简化
    数据计算的速度 :相对均衡
    数据的读取速度
    通过偏移量就知道这个块的位置
  • 同一个文件中,每个子数据块大小要一致
    除了最后一个节点外
  • 不同文件切分的子数据块可以不同

安全

  • 肯定要对数据做备份
  • 备份的数据肯定不能存放在一个节点上
  • 当我们使用数据的时候可以就近获取数据
  • 所以备份的数量要小于等于节点的数量

HDFS绝对不允许去修改数据

  • 不能等分
  • 如果要保证等分,有可能会产生数据的大批量迁移(蝴蝶效应)

HDFS允许追加数据

  • 但是集群默认是不支持追加的,需要手动开启追加功能

Mapreduce是完全基于HDFS之上的计算框架



集群节点

NameNode(NN)

功能

-接受客户端的读写服务

-保存文件的时候会保存文件的元数据信息
	--文件的归属
	--文件的权限
	--文件的大小时间
	--Block信息,但是block的位置信息不会持久化,需要每次开启集群的时候DN上报
	
-收集Block的位置信息
	--系统启动
		---NN关机的时候是不会存储任意的Block信息
		---DN启动的时候,会将自己节点上存储的文件信息汇报给NN
		---NN接受请求之后重新生成映射关系
		---如果某个数据块的副本数小于设置数,那么NN会将这个副本拷贝到其他节点
	--集群运行中
		---NN与DN保持心跳机制,三秒钟发送一次
		---如果客户端需要读取或者上传数据的时候,NN可以知道DN的健康情况
		---可以让客户端一致读取存活的节点
		---如果DN超过三秒没有心跳,就认为DN出现异常,就不会让新的数据读写去DN
		---如果DN超过10分钟没有心跳,那么NN会将当前DN存储的数据转存到其他节点

NameNode为了效率,将所有的操作都在内存中完成

-执行速度快

-NameNode不会和磁盘进行任何的数据交换

-问题:
	--数据的持久化
		---数据保存在内存中,掉电易失

DataNode(DN)

-存放的是文件的数据信息

-数据会存放在硬盘上

-汇报
	--启动时
		---向NN汇报当前DN上block的信息
	--运行中
		---向NN保持心跳机制

SecondaryNameNode(SNN)

-传统的内存持久化方案
	--日志机制
			---做任何操作之前先记录日志
			---在数据改变之前先记录对应的日志,当NN停止的时候
			---当我下次启动的时候,只需要重新按照以前的日志“重做”一遍即可
			---但是数据文件大小不可控,随着时间的发展,集群启动的时间会越来越长
	--拍摄快照
			---我们可以将内存中的数据写出到硬盘上
			---启动时还可以将硬盘上的数据写回到内存中
			---缺点
				关机时间过长
				如果是异常关机,数据还在内存中,没法写入到硬盘
				如果写出频率过高,导致内存使用效率低(stop the world) JVM
				
-SNN的解决方案
	--解决思路
			---让日志大小可控
			---快照需要定时保存
	--解决方案
			---当我们每次集群启动的时候,都会生成一个叫做 fsimage0000001
			---我们每次操作都会记录日志 -->edits_inprogress-000000001
			---随和时间的推移,日志文件会越来越大,当达到阈值的时候(64M 或 3600秒)
			---会生成新的日志文件 
				edits_inprogress-000000001 -->edits_0000001
				创建新的日志文件edits_inprogress-0000000016 
				
-查看SNN的工作过程
	--查看目录
			---/var/sxt/hadoop/local/dfs/name/current
			---edits_0000000000000000001-0000000000000000002
			---edits_0000000000000000006-0000000000000000045
			---edits_inprogress_0000000000000000046
				当前已经正在执行的操作的日志信息
				这些日志信息还没有被合并到镜像中
			---fsimage_0000000000000000004
			---fsimage_0000000000000000004.md5
				完整性校验规则
			---fsimage_0000000000000000045
			---fsimage_0000000000000000045.md5
			---seen_txid -->46
			---VERSION 



集群相关

文件的数据

分类:
	元数据:
	  文件属性的相关描述
	  使用stat命令查看
	数据:
	  使用vim命令查看

安全模式

- 指的是集群启动时的一个状态
- 处于这个状态为了保护数据的安全所以不可以被客户端访问
- NN启动时不会记录block的位置信息,需要DN汇报
- 如果NN收集Block的信息达到最少副本数,就会脱离安全模式
- 如果NN收集的Block信息没有达到最少副本数,就会将缺失的副本,从有的DN上拷贝到其他DN
- 在拷贝的过程中系统还是处于安全模式

HDFS的权限

 - HDFS对权限的控制
 	只能防止好人做错事
	不能防止坏人做坏事
 - 你告诉他你是谁,他就认为你是谁!

机架感知策略

-为了保证副本在集群不发生意外
-我们需要将副本放在不同的节点上,节点也需要一定的考量
-第一个节点
	--集群内部
		---优先考虑和客户端相同节点作为第一个节点
	--集群外部
		---选择资源丰富且不繁忙的节点为第一个节点
-第二个节点
	--选择和第一个节点不同机架的其他节点
-第三个节点
	--与第二个节点相同机架的其他接点
-第N个节点
	--与前面节点不重复的其他节点



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值