Hadoop 是什么
本质:本质上是一个开源代码框架(apache组织)。是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式的处理。
语言:Hadoop是使用面向对象的语言 Java编写的,所以也具有易扩展的特性。
用途:将单机的工作任务进行分拆,变成协同工作的集群。用以解决日益增加的文件存储量和数据量瓶颈。
通俗应用解释:
比如计算一个100M的文本文件中的单词的个数,这个文本文件有若干行,每行有若干个单词,每行的单词与单词之间都是以空格键分开的。对于处理这种100M量级数据的计算任务,把这个100M的文件拷贝到自己的电脑上,然后写个计算程序就能完成计算。
下面计算一个1T(1024G)的文本文件中的单词的个数。再后来,又接到一个任务,计算一个1P(1024T)的文本文件中的单词的个数……
面对这样大规模的数据,自己那一台计算机已经存储不下了,也计算不了这样大的数据文件中到底有多少个单词了。于是乎Hadoop就出现了,其就是为了解决这种情况。
总结一句话:Hadoop就是存储海量数据和分析海量数据的工具。
关键技术
HDFS(Hadoop Distributed File System):
既可以是Hadoop 集群的一部分,也可以是一个独立的分布式文件系统,是开源免费的大数据处理文件存储系统。
HDFS是Master和Slave的主从结构(是一种概念模型,将设备分为主设备和从设备,主设备负责分配工作并整合结果,或作为指令的来源;从设备负责完成工作,一般只能和主设备通信)。主要由Name-Node、Secondary NameNode、DataNode构成。
Name-Node:分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等
Secondary NameNode:辅助 NameNode,分担其工作,紧急情况可以辅助恢复
DataNode:Slave节点,实际存储数据、执行数据块的读写并汇报存储信息给NameNode
HDFS客户端的存储流程:当客户需要写数据时,先在NameNode 上创建文件结构并确定数据块副本将要写道哪几个 datanode ,然后将多个代写 DataNode 组成一个写数据管道,保证写入过程完整统一写入。读取数据时则先通过 NameNode 找到存储数据块副本的所有 DataNode ,根据与读取客户端距离排序数据块,然后取最近的。
流程如下面两个图:
MapReduce:
MapReduce是一种编程模型,是一种编程方法,是抽象的理论,采用了分而治之的思想。最早由谷歌提出。
MapReduce框架的核心步骤主要分两部分,分别是Map和Reduce。每个文件分片由单独的机器去处理,这就是Map的方法,将各个机器计算的结果汇总并得到最终的结果,这就是Reduce的方法。
Map 函数就近读入 HDFS 分片数据,并将Map 处理结果先写入环形内存缓冲区。如果当缓冲区写到一定阈值则开始分割如文件,此期间会按 Reduce 个数进行数据分区并且按相同键值进行分区内排序,然后写入输出分区文件。
reduce 函数开始时会从各自已经完成的Map 输出结果的节点中选择自己需要的数据分区复制到自己的节点,并进行合并及排序,再将此数据作为输入进行 Reduce 处理,最后将结果输出到 HDFS 中。
此过程可以 充分利用各个结点的计算资源分布、并行的完成 Mapreduce处理。
能干什么
大数据存储:分布式存储
日志处理:擅长日志分析
ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
机器学习: 比如Apache Mahout项目
搜索引擎:Hadoop + lucene实现
数据挖掘:目前比较流行的广告推荐,个性化广告推荐
Hadoop是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。
有什么特点
优点:
支持超大文件。HDFS存储的文件可以支持TB和PB级别的数据。在不保证低延时的前提下,具有相当大的吞吐量,非常适合海量数据的运算。
可靠性。hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。
高扩展、成本低。可建构在廉价机上,实现线性(横向)扩展,当集群增加新节点之后,NameNode也可以感知,将数据分发和备份到相应的节点上。
成熟的生态圈。借助开源的力量,围绕Hadoop衍生的一些小工具。
高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
缺点:
不能做到低延迟。既然是海量数据的处理,优先考虑的是该系统的吞吐量等性能问题。所以也很难满足平常的低时延的需求,这点是不可避免的,只能说想办法尽量去权衡两者,进而优化
不适合大量的小文件存储。该框架设计的初衷是针对海量数据的运算处理的问题。因此对于一些数据量很小的处理没有任何优势可言,甚至还不如单机串行的效果,性能也完全体现不出来。
文件修改效率低。其文件系统设计的前提是一次写入多次读取的情况,因此我们是无法修改某条详细的数据,只能overwrite全部的数据,或者是在文件末尾追加数据。
开源项目。开源本身是一柄双刃剑,它方便了大多数人,但是对于一个有一定规模的公司,项目发展方向的把握,技术保密和支持等都是采用Hadoop这种开源项目必须考虑的问题。
集群内部是通过tcp/ip协议进行通信的,所以网络带宽也会成为系统的瓶颈之一
本文是对Hadoop的基础了解,并未进行安装测试。安装文档参考:
https://blog.csdn.net/hliq5399/article/details/78193113/
本文参考:https://www.zhihu.com/question/333417513
欢迎关注公众号:书生吴小帅
网友评论