故事开头理解 Hadoop 是什么、能做什么?绝对通俗易懂!
信息化技术真的是日新月异,变化太快了,一段时间不学习就可能落后于时代。处在目前的大数据时代,做为一名信息化技术人员,Hadoop 是一个必学的概念。作为初学者,如何入门理解 Hadoop?网上文章很多很多,本文作了一个整理,希望以最通俗易懂的方式读懂 Hadoop。
故事开场,通俗易懂
小明接到一个任务:计算一个 100M 的文本文件中的单词的个数,这个文本文件有若干行,每行有若干个单词,每行的单词与单词之间都是以空格键分开的。对于处理这种 100M 量级数据的计算任务,小明感觉很轻松。他首先把这个 100M 的文件拷贝到自己的电脑上,然后写了个计算程序在他的计算机上执行后顺利输出了结果。
后来,小明接到了另外一个任务,计算一个 1T(1024G)的文本文件中的单词的个数。再后来,小明又接到一个任务,计算一个 1P(1024T) 的文本文件中的单词的个数……
面对这样大规模的数据,小明的那一台计算机已经存储不下了,也计算不了这样大的数据文件中到底有多少个单词了。机智的小明上网百度了一下,他在百度的输入框中写下了:大数据存储和计算怎么办?按下回车键之后,出现了有关 Hadoop 的网页。
看了很多网页之后,小明总结一句话:Hadoop 就是存储海量数据和分析海量数据的工具。
更专业一点的理解
Hadoop 是由 java 语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是 HDFS 与 MapReduce。
HDFS 是一个分布式文件系统:引入存放文件元数据信息的服务器 Namenode 和实际存放数据的服务器 Datanode,对数据进行分布式储存和读取。
MapReduce 是一个计算框架:MapReduce 的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map 计算 /Reduce 计算)再根据任务调度器(JobTracker)对任务进行分布式计算。
HDFS 的设计特点
1、大数据文件,非常适合上 T 级别的大文件或者一堆大数据文件的存储,如果文件只有几个 G 甚至更小就没啥意思了。
2、文件分块存储,HDFS 会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得都。
3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
4、廉价硬件,HDFS 可以应用在普通 PC 机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
5、硬件故障,HDFS 认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
HDFS 和 MapReduce
Hadoop 的框架最核心的设计就是:HDFS 和 MapReduce。HDFS 为海量的数据提供了存储,则 MapReduce 为海量的数据提供了计算。把 HDFS 理解为一个分布式的,有冗余备份的,可以动态扩展的用来存储大规模数据的大硬盘。把 MapReduce 理解成为一个计算引擎,按照 MapReduce 的规则编写 Map 计算 /Reduce 计算的程序,可以完成计算任务。
HDFS 的关键元素
1、Block:将一个文件进行分块,通常是 64M。
2、NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一 一台主机专门保存,当然这台主机如果出错,NameNode 就失效了。在 Hadoop2.* 开始支持 activity-standy 模式----如果主 NameNode 失效,启动备用主机运行 NameNode。
3、DataNode:分布在廉价的计算机上,用于存储 Block 块文件。
MapReduce 举例理解
我们要数图书馆中的所有书。你数 1 号书架,我数 2 号书架。这就是 “Map”。我们人越多,数书就更快。现在我们到一起,把所有人的统计数加在一起。这就是 “Reduce”。通俗说 MapReduce 是一套从海量源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,而从海量数据中提取分析我们需要的内容就是 MapReduce 做的事了。
MapReduce 的基本原理就是:将大的数据分析分成小块逐个分析,最后再将提取出来的数据汇总分析,最终获得我们想要的内容。当然怎么分块分析,怎么做 Reduce 操作非常复杂,Hadoop 已经提供了数据分析的实现,我们只需要编写简单的需求命令即可达成我们想要的数据。
Hadoop 能干什么
大数据存储:分布式存储
日志处理:擅长日志分析
ETL:数据抽取到 oracle、mysql、DB2、mongdb 及主流数据库
机器学习: 比如 Apache Mahout 项目
搜索引擎:Hadoop + lucene 实现
数据挖掘:目前比较流行的广告推荐,个性化广告推荐
Hadoop 是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。
Hadoop 简单使用过程
1、Hadoop 集群的搭建
无论是在 windows 上装几台虚拟机玩 Hadoop,还是真实的服务器来玩,说简单点就是把 Hadoop 的安装包放在每一台服务器上,改改配置,启动就完成了 Hadoop 集群的搭建。
2、上传文件到 Hadoop 集群
Hadoop 集群搭建好以后,可以通过 web 页面查看集群的情况,还可以通过 Hadoop 命令来上传文件到 hdfs 集群,通过 Hadoop 命令在 hdfs 集群上建立目录,通过 Hadoop 命令删除集群上的文件等等。
3、编写 map/reduce 程序
通过集成开发工具(例如 eclipse)导入 Hadoop 相关的 jar 包,编写 map/reduce 程序,将程序打成 jar 包扔在集群上执行,运行后出计算结果。