大数据 — Hadoop

HDFS


Hadoop 1.0:

  • 3个组件:
    • Namenode
    • SecondNamenode
    • Datanode

namenode(主节点,master,只有一个,单点故障的风险)中间存储信息(元数据)
2种映射关系

  1. path -> blockid list 列表
  2. blockid 数据块 -> datanode 节点地址
    元数据存在内存中
    元数据进行持久化 — 磁盘fsimage — 目的:避免数据丢失
    fsimage : 元数据镜像文件
    只有机器重启的时候加载fsimage

    元数据持久化的过程 — SNN — secondnamenode
    内存 -> edit log(磁盘)-> fsimage

    SNN 存在意义 : 备份 / 数据恢复

    namenode和 edit log关系:
    namenode需要把每一次改动都存在 edit log ,整个过程谁来推动?(Datanode和namenode之间心跳机制)

    namenode除了单点问题之外,还有不适合存储太多小文件的问题,因为内存有限

datanode (slave,从节点,多个机器)

  1. block 数据块 -> 真实输据
    多副本机制 — 默认3副本 (作用:数据冗余,高可用)
    本地化原则 (就近原则):mapreduce:主(jobtracker - namenode),从(tasktracker - datanode)

可靠性保证 :

  1. 数据校验
    目的 : 保证数据完整性 (通过crc32校验算法)
    整个数据传输过程,输据需要校验几次?
    1. client给datanode写数据:要针对写的数据,每个检查单元(512字节)
      • 每一个单元创建一个单独的校验码(crc32) , 数据和校验码统一发送给Datanode
    2. Datanode 接受输据的时候 : 用同样的加密算法,生成校验码,并校验
      • 在后台还会运行一个扫描进程:DataBlockScanner(定期校验)
      • 一旦检测出现问题,通过心跳,通知NN,让NN发起DN修复 (拷贝没有问题的备份)

2.可靠性保证 :

  • 心跳
  • 多副本机制
  • crc32
  • SNN (secondnamenode)
  • 回收站 ( .Trash 目录)

Hadoop 2.0:

 

  1. HA 高可用 : 解决了单点故障问题
    1.0里有一个SNN,但是不可靠
    如何便可靠:需要两个NN,一个active,一个standby(备用)
    为了保证两个NN的数据一致性,Datanode要对两个NN同时发送心跳

  2. 虽然Datanode同时发送心跳,但是为什么还需要JN?
    2种映射关系
    path -> blockid list 列表 :JN
    blockid 数据块 -> datanode 节点地址 : Datanode心跳
    分工不同:::

  3. HDFS2.0 需要引入zookeeper , (zookeeper目的:协调分布式集群中各个节点工作有序进行,完成故障转移)

  4. 在2.0,引入zkfc(ZookeeperFailoverController)进程,和NN部署到同一个机器上,目的:负责自己管辖之内的NN进行健康检查
    zkfc 进程会在zookeeper上注册一个临时节点
    目的:监控NN,一旦NN挂掉,相对应的临时节点消失,接下来开始选主(申请锁)流程

  5. JN目的:让activeNN和standbyNN保持输据同步(文件 -> block)
    同步问题:需要以来JN(JournalNodes)守护进程,完成元数据的一致性

  6. JN 角色有两种选择:
    1) NFS — 网络系统 (network file system)
    需要额外的磁盘空间
    2)QJM — 最低法人管理机制 (投票)
    不需要额外的磁盘空间
    需要用2n+1台机器存储edit log (奇数是为了投票)
    QJM本质是小集群
    好处
    * 不需要空间
    * 无但点问题
    * 不会因为个别机器延迟,影响整体性能
    * 只需要通过简单的系统配置可以实现

  7. NN 和 JN 通常不再一个机器上
    FC 和 NN 在同一个机器上
    RM(Yarn主) 和 NN(HDFS主) 通常在同一台机器上
    zookeeper 需要单独维护一套独立集群

 

HDFS Federation(联邦) : 水平扩展

集群中提供多个Name Node,每个NameNode负责管理一部分DataNode
每一个NN只管理自己管辖之内的DN
目的:减轻单一NN压力,将一部分文件转移到其他NN上管理

如果集群中一个目录比较大,那么可以用单独的NN维护起来
横向亏站,突破了NN的限制

不同的NN,会可以访问所有的DN吗? 会的 
联邦的本质:将元数据管理NN和存储DN进行解耦

可以把联邦和高可用同时体现出来

快照:真实数据(不是元数据) ::: 数据备份/灾备/快速恢复

本质:仅仅记录block列表和大小而已,并不涉及数据本身的复制
某个目录的某一时刻的镜像
创建和恢复,都非常快 — 瞬间完成,高效

HDFS快照是一个只读的基于时间点文件系统拷贝
HDFS快照是对目录进行设定,是某个目录的某一个时刻的镜像

  • 快照可以是整个文件系统的也可以是一部分
  • 常用来作为数据备份,防止用户错误操作和容灾恢复
  • Snapshot并不会影响HDFS的正常操作:修改会按照时间的反序记录,这样可以直接读取到最新的数据
  • 快照数据是当前数据减去修改部分计算出来的
  • 快照会存储在snapeshottable的目录下

 

快照的各种命令
hdfs dfsadmin -allowSnapshot /user/spark
hdfs dfs -createSnapshot /user/spark s0
hdfs dfs -renameSnapshot /user/spark s0 s_init
hdfs dfs -deleteSnapshot  /user/spark s_init
hdfs dfsadmin -disallowSnapshot /user/spark

 

 

缓存(集中式缓存 — 不局限具体的机器的cpu和操作系统层面上的优化)

对于重复访问的文件很有用
优点:速度快

  • 允许用户指定要缓存的HDFS路径
  • 明确的锁定可以阻止频繁使用的数据被从内存中清除
  • 集中化缓存管理对于重复访问的文件很有用
  • 可以换成目录或文件,但目录是非递归

 

权限控制 ACL

类似于linux系统acl

例:rwx - rwx - rwx
自己 - 组 - 其他

设置权限: setacl命令
需要开启功能:

    dfs.permissions.enableddfs.namenode.acls.enabledhadoop fs -getfacl /input/aclhdfs dfs -setfacl -m user:mapred:r-- /input/aclhdfs dfs -setfacl -x user:mapred /input/acl





















转载于:https://www.cnblogs.com/pipemm/articles/11331639.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE:兄弟组件间传参

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1、定义一个中间 eventBus.js ,只有 2 行代码,用于传参: // 此页面是vue 巴士,用于兄…

C++的历史

本文由 伯乐在线 - honpey 翻译自 Albatross。欢迎加入 技术翻译小组。转载请参见文章末尾处的要求。C的历史可以追溯到1979年,当时Bjarne Stroustrup(译者注:C之父)正在准备他的博士毕业论文,他有机会使用一种叫做Si…

asp.net ajax的学习第一篇

自己理解的asp.net ajax的核心思想&#xff1a; javascript 调用web service <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />由于工作的原因&#xff0c;要在自己的网页上使用无刷新技术&#xff0c;增加客户体验。开始学习asp…

insertSelective 和 insert 的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、selective的意思是&#xff1a;选择性。 2、insertSelective--选择性保存数据&#xff1b; 比如User里面有三个字段:id&#xff0c;n…

病从口入 这样吃小心癌症找上门

肿瘤专家估计&#xff0c;大约有35%的致癌物质是经过饮食&#xff0c;30%是经过吸烟侵入体内的。仅此两项已经占了致癌因素入侵人体的一半以上了。所以说&#xff0c;预防肿瘤&#xff0c;饮食首当其冲&#xff0c;第一步就要从入口的食物谈起。 食管癌&#xff1a;腌制的咸…

VUE插件总结

UI组件 element - 饿了么出品的Vue2的web UI工具套件Vux - 基于Vue和WeUI的组件库mint-ui - Vue 2的移动UI元素iview - 基于 Vuejs 的开源 UI 组件库Keen-UI - 轻量级的基本UI组件合集vue-material - 通过Vue Material和Vue 2建立精美的app应用muse-ui - 三端样式一致的响应式 …

解决:No goals have been specified for this build. You must specify a valid lifecycle phase or a goal i

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 执行打包命令报错&#xff1a; No goals have been specified for this build. You must specify a valid lifecycle phase or a goa…

十个好习惯帮你理财省大钱

理财和收入高低其实是没有关系的&#xff0c;仅和生活习惯相关。有了好的理财方法&#xff0c;也可以攒下自己的钱&#xff0c;达到财务自由的境界。下面是一些理财的技巧? 1、定时积极的存款 怎样开源节流是理财的第一步。增加收入来源&#xff0c;算好该存的钱&#xff0…

生成随机码,保存随机文件.

PrivateFunction GetRandomizeNo()Function GetRandomizeNo() As Integer 功能说明:生成随机验证码 Dim RandomizeNo As Integer Randomize() RandomizeNo 9999 * Rnd() 1000 If (RandomizeNo).ToString.Length > 5 Then R…

解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ...

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题&#xff0c;即在mybatis中dao接口与mapper配置…

真实股市房市信托本质,金融故事三则:钱都去哪儿了?

什么叫做虚拟经济、泡沫经济、次贷危机、金融危机?看完本文这几个简短精辟故事&#xff0c;你就都知道了。 故事&#xff08;1&#xff09; 有一个商人到了一个山村&#xff0c;村子周围的山上全是猴子。 商人就和村子种地的农民说&#xff0c;我买猴子&#xff0c;100元一只…

Mac 远程命令工具

转载于:https://www.cnblogs.com/BrightMoon/p/4479375.html

Springboot Mybatis 整合(完整版)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 正题 本项目使用的环境&#xff1a; 开发工具&#xff1a;Intellij IDEA 2017.1.3 springboot: 1.5.6 jdk&#xff1a;1.8.0_161 maven…

OpenCL 第5课:向量相加

OpenCL程序分为两个部份&#xff0c;一部份是内核代码&#xff0c;负责具体算法。另一部份是主程序负责初始化OpenCL和准备数据。主程序加载内核代码&#xff0c;并按照即定方法进行运算。 内核代码可以写在主程序里面&#xff0c;也可以写在另一个文本文件里&#xff0c;有点…

同名的const 成员函数

如下代码&#xff1a;struct Derived{ void foo(string) { cout<<"ddd foo"<<endl; }; void foo(string) const { cout<<"ddd foo const"<<endl; };}; int _tmain(int argc, TCH…

springboot 中使用 Mybatis 注解 配置 详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 传参方式 使用不同的传参方式&#xff1a; 使用Param 之前博文中的项目使用了这种简单的传参方式&#xff1a; Insert("INSERT IN…

mongodb数据库的备份与恢复

先介绍下命令语法&#xff1a; ./mongodump -h 127.0.0.1:10001 -d lietou -o /usr/local/data -h&#xff1a;MongDB所在服务器地址&#xff0c;例如&#xff1a;127.0.0.1&#xff0c;当然也可以指定端口号&#xff1a;127.0.0.1:10001 -d&#xff1a;需要备份的数据库实例…

OpenCL 第6课:矩阵转置

上一节我们写了个一维向量相加的程序。这节我们来看一个44矩阵转置程序。 4X4矩阵我们采用二维数组进行存储&#xff0c;在程序设计上&#xff0c;我们让转置过程分4次转置完成&#xff0c;就是一次转一行。注意这里的OpenCL的工作维数是二维。&#xff08;当然用一维的方式也…

springboot 系列技术教程目录

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、教程目录地址&#xff1a; springboot系列技术教程目录 二、教程内容&#xff1a; springboot2.X系列&#xff1a; springboot整…

OpenCL 第7课:旋转变换(1)

旋转是一个常用的处理功能。图片中所有的点以某一个点为轴&#xff0c;顺时或逆时方向旋转N个角度。我们利用OpenCL就可以对图片中所有的点进行并行转换&#xff0c;大大提高效率。 上两节中&#xff0c;我们编写了CL文件来传递数组的地址&#xff0c;这一节中我们会多加入几个…