Hadoop到底是干什么的,有什么用?

Hadoop 是什么

本质:本质上是一个开源代码框架(apache组织)。是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式的处理。

语言:Hadoop是使用面向对象的语言 Java编写的,所以也具有易扩展的特性。

用途:将单机的工作任务进行分拆,变成协同工作的集群。用以解决日益增加的文件存储量和数据量瓶颈。

通俗应用解释:

比如计算一个100M的文本文件中的单词的个数,这个文本文件有若干行,每行有若干个单词,每行的单词与单词之间都是以空格键分开的。对于处理这种100M量级数据的计算任务,把这个100M的文件拷贝到自己的电脑上,然后写个计算程序就能完成计算。

下面计算一个1T(1024G)的文本文件中的单词的个数。再后来,又接到一个任务,计算一个1P(1024T)的文本文件中的单词的个数……

面对这样大规模的数据,自己那一台计算机已经存储不下了,也计算不了这样大的数据文件中到底有多少个单词了。于是乎Hadoop就出现了,其就是为了解决这种情况。

总结一句话:Hadoop就是存储海量数据和分析海量数据的工具。

关键技术

HDFS(Hadoop Distributed File System):

既可以是Hadoop 集群的一部分,也可以是一个独立的分布式文件系统,是开源免费的大数据处理文件存储系统。

优势:

  1. 支持超大规模数据集:能够扩展到上百个节点。
  2. 数据一致性模型:支持一次写入和多次读取的文件操作。一个文件一旦创建便不能再更改,解决了数据一致性问题。
  3. 移动计算的模式:对于应用端来说,数据离的越近效率越高,HDFS 能将计算移动到数据附近。
  4. 数据完整性:HDFS 再不同节点上存储数据的很多版本,若一个节点出错,那么可以从其它节点获取数据,以保证数据完整性。
  5. 容错性:同样因为副本策略,副本丢失后,能够自动恢复。
  6. 经济型:分布式运营到廉价的普通商业硬件上。

HDFS是Master和Slave的主从结构(是一种概念模型,将设备分为主设备和从设备,主设备负责分配工作并整合结果,或作为指令的来源;从设备负责完成工作,一般只能和主设备通信)。主要由Name-Node、Secondary NameNode、DataNode构成。

Name-Node:分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。(只管理,而不存储数据和执行计算任务)

Secondary NameNode:辅助 NameNode,分担其工作,紧急情况可以辅助恢复。datanode 出现问题依然可以继续运行,但管理者出现问题就无法运行,这就是 secondary namenode 存在的意义。

DataNode:Slave节点,实际存储数据、执行数据块的读写并汇报存储信息给NameNode

HDFS客户端的存储流程:当客户需要写数据时,先在NameNode 上创建文件结构并确定数据块副本将要写道哪几个 datanode ,然后将多个代写 DataNode 组成一个写数据管道,保证写入过程完整统一写入。读取数据时则先通过 NameNode 找到存储数据块副本的所有 DataNode ,根据与读取客户端距离排序数据块,然后取最近的。

流程如下面两个图:

再补充说明一下数据的复制和存放策略,因为HDFS能在一个大集群中,主要归功于他的冗余性。数据块的副本默认系数是 3 ,副本的存放策略是将一个副本放在本地机架节点,第二个副本是放在同一个机架上的不同节点上,第三个放在不同机架的任意一个节点上。这样的副本存放机制减少了机架间的文件传输,增强了文件的读写操作。

MapReduce

MapReduce是一种编程模型,是一种编程方法,是抽象的理论,采用了分而治之的思想。最早由谷歌提出。

MapReduce框架的核心步骤主要分两部分,分别是Map和Reduce。每个文件分片由单独的机器去处理,这就是Map的方法,将各个机器计算的结果汇总并得到最终的结果,这就是Reduce的方法。

Map 函数就近读入 HDFS 分片数据,并将Map 处理结果先写入环形内存缓冲区。如果当缓冲区写到一定阈值则开始分割如文件,此期间会按 Reduce 个数进行数据分区并且按相同键值进行分区内排序,然后写入输出分区文件。

reduce 函数开始时会从各自已经完成的Map 输出结果的节点中选择自己需要的数据分区复制到自己的节点,并进行合并及排序,再将此数据作为输入进行 Reduce 处理,最后将结果输出到 HDFS 中。

此过程可以 充分利用各个结点的计算资源分布、并行的完成 Mapreduce处理。

MapReduce 使用 JobTracter 和 TaskTraker 控制 Job的运行下。

JobTracter 相当于HDFS中的NameNode,负责管理调度所有作业,协调 Job 运行将task 分配到不同的 TaskTracker 上。

TaskTracker 使用文件块信息确定如何创建其它 TaskTracker 丛书任务。TaskTracker 负责运行 task 任务,并将结果反馈给 JobTracker 。TaskTracker有两个线程,一个是MapTask ,一个是 ReduceTask。

能干什么

大数据存储:分布式存储

日志处理:擅长日志分析

ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库

机器学习: 比如Apache Mahout项目

搜索引擎:Hadoop + lucene实现

数据挖掘:目前比较流行的广告推荐,个性化广告推荐

Hadoop是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。

有什么特点

优点:

  1. 支持超大文件。HDFS存储的文件可以支持TB和PB级别的数据。在不保证低延时的前提下,具有相当大的吞吐量,非常适合海量数据的运算。
  2. 可靠性(容错性)。hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。
  3. 高扩展、成本低。可建构在廉价机上,实现线性(横向)扩展,当集群增加新节点之后,NameNode也可以感知,将数据分发和备份到相应的节点上。
  4. 成熟的生态圈。借助开源的力量,围绕Hadoop衍生的一些小工具。
  5. 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
  6. 经济性:开源免费。而且因为其可以运行在廉价的PC机上,所以用户也不必买昂贵的单机服务器,廉价的普通服务器也可以搭建集群。

缺点:

  1. 不能做到低延迟。既然是海量数据的处理,优先考虑的是该系统的吞吐量等性能问题。所以也很难满足平常的低时延的需求,这点是不可避免的,只能说想办法尽量去权衡两者,进而优化
  2. 不适合大量的小文件存储。该框架设计的初衷是针对海量数据的运算处理的问题。因此对于一些数据量很小的处理没有任何优势可言,甚至还不如单机串行的效果,性能也完全体现不出来。
  3. 文件修改效率低。其文件系统设计的前提是一次写入多次读取的情况,因此我们是无法修改某条详细的数据,只能overwrite全部的数据,或者是在文件末尾追加数据。
  4. 开源项目。开源本身是一柄双刃剑,它方便了大多数人,但是对于一个有一定规模的公司,项目发展方向的把握,技术保密和支持等都是采用Hadoop这种开源项目必须考虑的问题。
  5. 集群内部是通过tcp/ip协议进行通信的,所以网络带宽也会成为系统的瓶颈之一

总结:

Hadoop 凭借这些优势让大数据开发变的简单。开发人员不需要关心分布式的容错、效率、底层架构,只需要专注于 Map 函数和 Reduce 函数的编写。

本文是对Hadoop的基础了解,并未进行安装测试。安装文档参考:

https://blog.csdn.net/hliq5399/article/details/78193113/

本文参考:https://www.zhihu.com/question/333417513

赞 (2)