Hadoop基础(一)

573a8113059bf.jpg

Hadoop 基础知识

大数据已经火了很长很长时间了,从最开始是个公司都说本身公司的数据量很大,咱们在搞大数据。到如今大数据真的已经很是成熟而且已经在逐渐的影响咱们的生产生活。你可能听过支付宝的金融大数据,滴滴的出行大数据以及其余的诸如气象大数据等等,咱们每一个人都是数据的制造者,之后又将享受大数据技术所带来的生活的便利。node

做为一个IT相关的从业人员,你确定听过Hadoop,Spark了。毕竟技术在发展,如今你们上班下班地铁公交都交流啥,机器学习,人工智能,AI,搞大数据都不太敢说话。为啥,由于技术实在是发展太快了。。。有点跟不上节奏。可是如今大数据已经很是成熟了,并且是所谓的机器学习,人工智能的基础。因此,若是有想法赶忙学习学习吧。linux

大数据究竟是啥?大数据是一个概念也是一门技术,它是在以Hadoop为表明的大数据平台框架上进行各类数据分析的技术。大数据包括以HadoopSpark为表明的基础大数据框架,还包括实时数据处理,离线数据处理,数据分析,数据挖掘和用机器算法进行预测分析等技术。 说通俗点,就是大量数据进行 数据存储,数据清洗,数据分析,数据处理,数据应用 的技术就是大数据。算法

我曾拜读过云戒大神的全栈大数据一书,该书中简单概要的描述了互联网的发展,大数据是其中很是重要的一环。你们能够看下图哈。安全

bigdata.png

由图片看到啊,互联网往小了发展是移动互联网,以前移动互联网多么火造就了多少独角兽公司就不用多介绍了吧。如今的物联网也是站在了风口之上,各类可穿戴设备层出不穷。互联网往大了发展呢,第一步是云计算。云计算相信你们都用过,阿里云,aws,虽然收费愈来愈贵可是确实解决了不少问题。而后就是大数据了。因此大数据仍是顺应了技术发展的潮流,也不枉他在咱们IT圈口口相传火了这么多年。因此大数据是一个颇有钱途的方向。并发

hadoop.jpg

咱们在介绍大数据的定义的时候反复的提到了Hadoop框架,那么做为大数据的表明性技术框架,咱们必需要学好,用好它。接下来,咱们就来简单看一下Hadoop框架。app

  1. Hadoop是一个开源的大数据框架框架

  2. Hadoop是一个分布式计算的解决方案机器学习

  3. Hadoop = HDFS(分布式存储服务) + MapReduce (分布式计算框架)分布式

咱们能够看出啊Hadoop包括两个核心,一个是HDFS一个是MapReduce。工具

问:假如你有一个10M的文件,你想过滤出含有Hadoop字符串的行,你会怎么作。

做为一个程序猿的你这时候就要秀一波操做了,你可能会用linux的grep命令。也可能去写几行代码搞一把。10M并不能让你感受到绝望,那么10G呢,10T呢,甚至是10P呢。你会不会感受到绝望?而Hadoop这两个核心就分别解决了上述的问题,HDFS解决了10T或者10P的数据存储的问题,MapReduce解决了分布式计算的问题,强强联手啊,能比较轻松的搞定令你感受到绝望的问题。

HDFS

HDFS为何是Hadoop的核心? 嗯,这个问题问得好。 由于存储是大数据的核心。 若是连数据存储都搞不定,你拿设么分析计算呢。要知道当咱们入了大数据的门,咱们接触的数据规模不局限于GB级了,咱们可能会处理TB甚至是PB的数据,单机去存储几T的数据已经很是多了。若是是几PB的话单机是确定搞不定的,因此HDFS帮你解决了这个问题。

咱们都知道Hadoop的一大优势就是利用多个廉价的机器组成集群,HDFS就是将大量的数据存储到这成百上千的廉价的机器上,可是你访问的时候就跟使用本地文件同样的简单。好比你要访问一个/tmp/file1的文件,这个文件可能存储到了不少机器上。可是你是用户啊,用户就是上帝,你根本就不用管他怎么存的,存在哪。你只须要告诉HDFS你要这个文件就能够了。

对于HDFS啊,我这里只介绍三个重要的概念:数据块、NameNode、DataNode

数据块

若是咱们对Hadoop有过了解的话咱们都知道存储在HDFS上的数据都是按块存的。

数据块是什么?数据块是一个抽象的概念。

好比咱们设置数据块的大小为128m,咱们要存一个10m的文件,由于是按块存的 因此咱们这个文件就独占了一个数据块。若是咱们存储大小为300m的文件,那就会分红三个块进行存储。

那么按块存到底有什么好处呢, 首先 他屏蔽了文件这个概念,好比你存了一个200T的文件,这个文件大于你任意一个磁盘单个的大小,这种状况下你能够将整个文件分红n个数据块,而后存储到各个磁盘。这样就简化了存储系统的设计, 并且 咱们知道为了保证数据安全咱们确定是要备份的, 而数据块它就很是适合用于数据备份,进而提供数据容错能力和可用性。

那么咱们到底选择设置多大的数据块呢?数据块的默认大小是64M,通常咱们会将他设置成128M。若是数据块的大小设置过小的话,那么对于通常的文件咱们可能也须要按块进行存储了,这样的话当咱们查询一个文件的时候就须要检索多个数据块的地址,这样效率不高,并且对NameNode的内存是一种极大的浪费。由于咱们是经过NameNode去检索数据的,NameNode的内存中存储了数据块与文件和DataNode的映射,这个咱们后面会提到。若是数据块设置太大的话,咱们可能会遇到一些系统层面的问题,好比系统重启的时候须要从新加载数据,数据块越大恢复须要的时间越长。并且数据块过大对于并行的支持不好。 因此,通常咱们都将其设置成128M。

NameNode 和 DataNode

咱们都知道HDFS是分布式文件系统,既然是分布式那么通常是主从模式,那么谁是主,谁是从呢?NameNode就是主,而DataNode就是从。因此HDFS是由一个NameNode(Master)和多个DataNode(Slave)组成的。

NameNode 作了哪些工做
  1. 管理文件系统的NameSpace

  2. 维护着文件系统树以及文件树中全部的文件和文件夹的元数据(这些数据存储在内存中,也会持久化存储到磁盘)

  3. 记录着每一个文件中各个块所在数据节点的位置信息,这些信息在DataNode启动的时候会发送给NameNode

DataNode 作了哪些工做
  1. DataNode是文件系统的工做节点

  2. 负责存储和检索数据,而且将他所存储的块的列表发送给NameNode

既然有主从模式咱们都要考虑若是Master也就是NameNode挂掉了怎么办,Hadoop2以后呢咱们能够配置两个NameNode,一个处于active状态,一台处于standby状态。这样若是处于active状态的NameNode挂掉了,另一台能够快速无缝的接手后续的工做。很大的程度上避免了单点问题的存在。

经过咱们上面对HDFS进行的介绍,咱们来总结一下HDFS的优缺点:

优势:

  1. 适合大数据存储,并有副本策略
  2. 能够构建在廉价的机器上,提供容错和恢复机制
  3. 提供流式文件访问,一次性写入,屡次读取

那对应这三个优势呢 天然就会发现他的三个缺点:

  1. 不适合大量小文件存储
  2. 不适合并发写入,文件随机修改等场景, 一个文件只能有一个writer 只支持append
  3. 不适合随机读等低延时数据访问的场景。 原本就不是为这种场景设计的。

因此说,用不用Hadoop这头神象仍是要根据具体的场景,具体的需求来考虑。 在合适的需求下用合适的工具才能达到合适的效果!

(未完待续,下节是HDFS的读写流程)

相关文章
相关标签/搜索