大数据思考

1.前言

       记得从上大学的时候就已经据说过这个词语 之前的理解可能就是数据量超大不少嘛 到这几年大数据这个词语被人们谈论得也愈来愈频繁 也愈来愈想了解它的因此本身才会去学习 我以为作任何事以前确定有某种驱使你去了解它的过程 如下仅是本身我的的理解服务器

2.什么是大数据?

       大数据不只是数据量大 (G,TB,PB.....)达到甚至更大 ,试想一下我给你一个数据量达到TB级别的数据 可是里面的数据都是一些你看不懂或者没有什么可用的信息的 那它也不过是一个数据量很大的文件而已(仅此而已没有什么能够提供的价值信息) ,因此说大数据不只是拥有海量的数据并且是多维度的(可以获取到不少有价值的信息)咱们常常会把数据存放到硬盘 硬盘大嘛能够存放几百G的容量 可是咱们的大数据就不行了 由于大数据的数据量是庞大的是你都没法想象的(有时候会在脑海里想一想 全世界有接近70多亿的人口说全世界可能范围太大 就单单一个中国13亿人天天产生的数据量就大的惊人)这么大的数据量怎么可能去存放到硬盘里呢(在多弄几台电脑不就好了 几台不行在搞个几十台当初就是这么想的) 这时候咱们的大数据就派上用场了 框架

      大数据的核心是解决海量数据 场景下的数据存储加运算问题(拿到数据后确定会进行一些计算而后提取到咱们所须要的信息) 而海量数据 场景下的数据存储加运算问题的核心又是分布式技术分布式

       咱们常常会上网购物 淘宝天猫京东呀 每次只要搜索的时候一件物品(好比电脑)那么下次再进来的时候你就会发现不少有关电脑的购物信息 当我选择一件物品进入到购物车 就会当即跟我推荐不少跟我购物车相关的物品  之前可能回想这是怎么回事 为何不推荐其余的物品呢 如今可能有了一些些了解布局

      首先当咱们访问一个页面的时候 例如京东的网站    每当咱们在浏览一个页面点击每一件商品的时候 会像服务端server发送不少信息 (商品标题 ip地址 用户id.......)都会发到server 服务端收到信息以后 就会把这些信息获取到而后保存到硬盘中 至关一个日志吧 天天都会存放一些信息 而且会不断的更新数据会愈来愈大必须作一些处理 那么问题也就来了学习

 Q1:试想如下像京东天猫天天同时浏览人数没有上亿也有好几千万的访问量 ,假如一我的访问数据量为几k 一天总共请求的数据也有百g了 若是一个月 一年 那么数据就会愈来愈大那么它的数据又是如何保存的呢?大数据

      若是用硬盘存放确定不现实 而京东(不止是京东 天猫 谷歌 阿里)也是运用了分布式文件存储系统(HDFS) 将数据存放到多台服务器上面 而后进行数据操做网站

  

3.接下来谈谈对HDFS的理解 不由会有这么几个问题

1.HDFS是作什么的?spa

 HDFS分布式计算中数据存储管理的基础 是用来存储超大数据文件的系统日志

2.HDFS有什么优势为何这么多公司会用?server

 (1)高容错性 

    数据自动保存多个副本 当一个副本丢失会自动恢复

   (2)适合大数据处理

      1) 数据规模:可以处理数据规模达到 GB、TB、甚至PB级别的数据。

      2) 文件规模:可以处理百万规模以上的文件数量,数量至关之大。

   (3) 流式数据访问

     1) 一次写入,屡次读取,不能修改,只能追加。

     2) 它能保证数据的一致性。

   (4) 可构建在廉价机器上

     1) 它经过多副本机制,提升可靠性。

     2) 它提供了容错和恢复机制。好比某一个副本丢失,能够经过其它副原本恢复。

   (5) 适合批处理

     1) 它是经过移动计算而不是移动数据。

     2) 它会把数据位置暴露给计算框架。

 3.HDFS如何存储数据?

     (1) 咱们要想知道HDFS如何存储数据 就必须先了解到HDFS Client、NameNode、DataNode和Secondary NameNode
         1) HDFS Cilent   hdfs客户端

         文件上传到HDFS的时候 会将文件进行分块 而后再进行存储

         与NameNode交互 获取到文件的位置信息 NameNode管理DataNode 应该将文件存储到哪一个节点

         与DataNode交互 存储获读取数据

         Client 提供一些命令来管理 HDFS,好比启动或者关闭HDFS。

          2)NameNode 

           处理客户端的请求 

           管理数据块的信息

           管理DataNode

         3)DataNode

            是真正干事的节点 它负责存储数据

        4)Secondary NameNode

          辅助 NameNode,分担其工做量(有点像秘书的角色) 可是当NameNode挂掉的时候 它并不能立刻替换 NameNode 并提供服务

          按期合并 fsimage和fsedits,并推送给NameNode。

 4. 接下来来谈谈HDFS的存储过程 

1 当客户端发送一个请求说有一个文件须要存储(gfvadio.avi) 

2.NameNode会接收到这个请求 而且会在虚拟目录树下面找是否有这个文件 若是有就响应能够传输  

3.而后客户端就会去传输数据(而且会分块传输 默认是128M是一块 而我要传输的文件是200M 它会分为两块去传) 而且会保存三份副本 以避免数据丢失

4.NameNode通知客户端能够将数据传到 DN1 DN2 DN4 而且会给它分配一个全局惟一的blk_id 

5.客户端收到消息后就会将文件传到DN1 DN2 DN4 第一块传输完成

6.客户端请求传输文件的第二块 而且也保存三份 接着NameNode通知能够将文件传到DN2 DN3 DN4 而且会分配给它一个布局惟一的blk_id2

7.客户端收到消息后传输文件到DN2 DN3 DN4 存储完成

至于为何HDFS会这么存储数据 确定是有它的道理的 接下来这几个问题问题也许能够解决这个疑问

     Q2:若是多个客户端传输同一个文件名 可能形成什么后果?

           以前的数据确定会被覆盖 数据丢失 正是由于这个缘由因此在传输文件的时候NameNode会分配一个全局惟一的编号

     Q3:若是客户端传输一个超大文件100G会发生什么?

         100G的数据读起来确定很是慢 因此会分块 每一个机器读取不一样的块 能够大大增长读取效率

     Q4:传输数据的时候数据存储服务器挂掉(若是DN1,DN2 )了会发生什么?

          这里就能够解决为何会备份副本 传输文件的时候会备份多份 这样能够防止某台服务器忽然挂掉 数据出现丢失的状况

  

5.HDFS读取数据的过程

  1.客户端发送请求读取数据

  2.NameNode会在元数据中查找是否存在这个文件 若是存在 而后就会通知客户端blk_id在DN1 blk_id2在DN2

  3.客户端而后再去DN1中取第一块数据 取完以后再在DN2中取第二块

先前老是想着写的 老是没有足够的时间 今天花了一个上午终于写完了 以上仅是本身的理解 若是有什么不对的欢迎指正 小弟不胜感激

相关文章
相关标签/搜索