大数据小白系列——HDFS(1)

【注1:结尾有大福利!】

【注2:想写一个大数据小白系列,介绍大数据生态系统中的主要成员,理解其原理,明白其用途,万一有用呢,对不对。】

  

大数据是什么?抛开那些高大上但笼统的说法,其实大数据说的是两件事:一、怎么存储大数据,二、怎么计算大数据。

我们先从存储开始说,如果清晨起床,你的女仆给你呈上一块牛排,牛排太大,一口吃不了,怎么办?拿刀切小。

同样的,如果一份数据太大,一台机器存不了,怎么办?切小了,存到几台机器上。

想要保存海量数据,无限地提高单台机器的存储能力显然是不现实,就好比我们不能把一栋楼盖得无限高一样(通常这也不是经济的做法),增加机器数量是相对可持续的方案。

使用多台机器,需要有配套的分布式存储系统把这些机器组织成一个整体,由于Hadoop几乎是目前大数据领域的事实标准,那么这里介绍的分布式存储系统就是HDFS(Hadoop Distributed Filesystem)。

先来介绍几个重要概念。

  • 分片(shard)

就好比把牛排切成小块,对大的文件进行切分,显然是进行分布式存储的前提,例如,HDFS中默认将数据切分成128MB的块(block)。

 

  •  副本(replica)

三台机器中,如果有一台出现故障,如何保证数据不丢失,那么就是使用冗余的方式,为每一个数据块都产生多个副本。

下面图示中,任何单独一个节点掉线,都不会造成数据丢失,仍然可以凑齐A、B、C三个数据块。

当然,如果两个节点同时掉线就不行了。

不过,如果每个数据块都有两个副本,那么可以承受同时损失两个节点。代价是,你的存储成本上升了。

  • Master/Slave架构

只有工人而没有包工头的工地肯定不能正常运转,所以,除了上面3台负责存储的机器,还需要至少一台机器来领导它们,给它们分配工作,否则谁也没办法中的A、B、C具体应该存在哪个机器上。

HDFS中采用Master/Slave架构,其中的NameNode就是Master,负责管理工作,而DataNode就是Slave,负责存储具体的数据,NameNode上管理着元数据,简单的讲就是记录哪个数据块存储在哪台机器上。同时,DataNode也会定时向NameNode汇报自己的工作状态,以便后者监控节点状态、是否故障。

 

说完上面几个我觉得需要了解的基础概念,我们再把HDFS的读、写流程描述一下。

  • 读取数据

读取数据的过程。在这个过程中,NameNode负责提供数据的存储位置,真正的数据读取操作发生在用户和DataNode之间。由于数据有副本,一份数据在多个节点上存在,具体NameNode返回哪个节点,遵循一定的原则(比如,就近原则)。

  • 写入数据

写入数据的过程。和读取流程类似,NameNode负责提供数据的存储位置,真正的写入操作发生在用户和DataNode之间,而副本的制造,是在DataNode之间发生的,例如用户先把数据写入节点1,节点1再把数据复制到节点2等。

 

这篇文章就先到这里,下一篇准备接受HDFS中的单点问题、HA、Federation等概念。

 

最后,福利来了,关注公众号“程序员杂书馆”,将免费送出大数据经典书籍《Spark快速大数据分析》,没错,就是下面这本,纸质书哦,不是什么乱七八糟的其他书哦!还犹豫什么,抓紧扫码关注吧。“程序员杂书馆”以后将每周为大家带来经典书籍资料、原创干货分享,谢谢大家。

需要书的同学请直接在公众号留言哈,如果不想要纸质书的也可以说明,我会选择一些PDF数据赠送,谢谢大家。

转载于:https://www.cnblogs.com/morvenhuang/p/10092144.html

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

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

相关文章

PHP检测远端文件是否存在

简单解释一下上面的代码。get_headers的作用就是访问一个远程地址,把服务器发送的HTTP头以数组形式返回。而$header[0]则是服务器返回的状态码(如果不出意外的话状态码应该都是第一个返回的)。 要确定一个文件在远端服务器上存在&#xff0c…

C#中使用DTS来导入数据及相关问题

向Sql 中导入Excel数据时,使用MS SQL的DTS功能 可以很方便的导入,同时引用Dll文件,可以在程序中对导入过程进行控制。 创建DTS包的过程如下: 1。在SQL企业管理器中,工具菜…

html select选择事件_一道搜狗面试题:IO多路复用中select、poll、epoll之间的区别...

(1)select>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们…

【MySQL】redo log --- 刷入磁盘过程

1、redo log基本概念 redo log的相关概念这里就不再过多阐述,网上有非常多的好的资料,可以看下缥缈大神的文章:https://www.cnblogs.com/cuisi/p/6525077.html,个人感觉介绍的非常详细。 2、数据更改过程简述 MySQL 在更新数据的时…

WPF DataGrid根据内容设置行颜色

转: https://code.4noobz.net/wpf-change-color-of-a-row-in-a-datagrid-depending-on-the-value/ 转载于:https://www.cnblogs.com/Mindy-hym/p/11475024.html

QQ web api

QQ的很多功能和信息可以通过web方式获得~以下链接,星号应换成你要查询的QQ号一、Activities Previewhttp://labs.qq.com/ie8/preview/?uin******二、QQ空间访问次数查询(需权限)http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.…

delphi tclientsocket接收不到返回数据_RS—485中教你主站发送报文结构、从站返回报文结构?系列11...

作者:马乐1.主站发送报文结构大家可以看到我之前写的文章中的程序都是没有什么具体功能的,都是两个站点之间互相传递数据,这些数据我们只是看看是否可以正常接收发送,数据本身是没有任何含义的。很明显在实际使用过程中我们是不会…

MybatisPlus 通用枚举无法正确取值

正常使用mybatisplus <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.4</version></dependency> 使用后发现项目中原先对枚举值的转换存在异常&#xff1a; ER…

零基础学习 Python 之条件语句

写在之前 我们写程序&#xff0c;就好比学生时代写作文一样&#xff0c;由 “字” 到 “词” 到 “句” 最后到 “文章” 。此前我们学会了一些词语&#xff08;对象类型&#xff09;&#xff0c;我们接下来就是学如何造句&#xff0c;而在编程语言里&#xff0c;句子被叫做语句…

python input 文件名_Python播放音频与录音

这一讲主要介绍些音频基本处理方式&#xff0c;为接下来的语音识别打基础。三种播放音频的方式使用 python 播放音频有以下几种方式&#xff1a;os.system()os.system(file) 调用系统应用来打开文件&#xff0c;file 可为图片或者音频文件。缺点&#xff1a;要打开具体的应用&a…

jQuery选择器和方法的等价关系

层级选择器 1、ancestor descendant &#xff08;后代选择器&#xff09; 在给定的祖先元素下匹配所有的后代元素 $(“form input”) $(.div span)选取<div>里的所有的<span>元素 2、parent child &#xff08;子选择器&#xff09;在给定的父元素下匹配所有…

ActionScript 3.0 Step By Step系列(四):来自面向对象开发之前的呐喊:“学会写可重用的代码”...

增强代码的可重用能力&#xff0c;从创建可重用的代码开始&#xff0c;可重用的代码则是通过从现有代码中重构加以封装,使其成为功能单一的可复用代码块。这句话笼统点说便是“封装”或“抽象”。 在实际的编程开发中&#xff0c;要实现代码重用&#xff0c;而不是每次都去Copy…

express利用nodemailer发送邮件(163邮箱)

Nodemailer 是一个简单易用的Node.js邮件发送组件 首先安装这个组件 npm install nodemailer --save安装之后&#xff0c;可以在某个get请求下&#xff0c;发送邮件&#xff0c;具体路由代码&#xff1a; const express require("express"); const nodemailer requ…

使用 Solid 私有化存储 IPFS 文件哈希值

背景 星际文件系统 IPFS&#xff08;InterPlanetary File System&#xff09;是一个面向全球的、点对点的分布式文件系统&#xff0c;目标是为了补充&#xff08;甚至是取代&#xff09;目前统治互联网的超文本传输协议&#xff08;HTTP&#xff09;&#xff0c;将所有具有相同…

使用window.postMessage实现跨域通信

JavaScript由于同源策略的限制,跨域通信一直是棘手的问题。当然解决方案也有很多&#xff1a; document.domainiframe的设置&#xff0c;应用于主域相同而子域不同&#xff1b;利用iframe和location.hash&#xff0c;数据直接暴露在了url中&#xff0c;数据容量和类型都有限Fla…

appium启动app失败_Appium-Desktop Capability 配置及启动App演示

Appium-Desktop Capability配置介绍desired capability的功能是配置Appium会话。为什么要配置capability&#xff0c;目的就是为了告诉Appium服务器您想要自动化的平台和应用程序。Desired Capabilities是一组设置的键值对的集合&#xff0c;其中键对应设置的名称&#xff0c;而…

WinRAR 命令行简体中文说明

从命令行也可以运行 WinRAR 命令&#xff0c;常规的命令行语法描述如下:WinRAR - -命令 要 WinRAR 运行的字符组合代表功能。开关 切换操作指定类型&#xff0c;压缩强度&#xff0c;压缩文件类型&#xff0c;等等的定义。压缩文件 要处理的压缩文件名。文件 要处理的文件名。列…

以Windows服务方式运行.NET Core程序

原文:以Windows服务方式运行.NET Core程序在之前一篇博客《以Windows服务方式运行ASP.NET Core程序》中我讲述了如何把ASP.NET Core程序作为Windows服务运行的方法&#xff0c;而今&#xff0c;我们又遇到了新的问题&#xff0c;那就是&#xff1a;我们的控制台程序&#xff0c…

SparkSession.read().csv()无法定位本地文件的问题

原因是spark有两个文件头 [file://]代表本地 [hdfs://]代表hdfs路径 如果路径没有文件头&#xff0c;spark会将该路径默认添加上"hdfs://" 所以如果要访问本地csv文件&#xff0c;需要确保路径前面有"file://" //java代码&#xff0c;告诉spark这是本地文件…

JavaScript的10种跨域共享的方法

在客户端编程语言中&#xff0c;如javascript和ActionScript&#xff0c;同源策略是一个很重要的安全理念&#xff0c;它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的&#xff0c;一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那…