🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、问题 初始需求:有一个100M的txt文本文件,需要过滤出我想要的内容。 解决方案:那么有几种方式来实现它。比如:用linux的命令grep,通过编程来读取文件; 进阶需求:如果文本文件的大小是1G,或者1T,甚至1PB,那么,上面的解决方案显然就行不通了;那么,对于这种超大数据文件,我们怎么得到我们想要的结果呢? 解决方案:Haddop!它就是为了解决这类大数据问题而诞生的,Haddop 可以很轻易的把很多PC组成分布式结点,开发人员也不需要知道分布式算法之类,只需要根据MapReduce的规则定义好接口方法,剩下的就交给Haddop,它会自动把相关的计算分布到各个结点上去,然后得出结果; ## 二、概述 **Hadoop就是存储海量数据和分析海量数据的工具;** Hadoop是由java语言编写的框架,其核心是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算; ### **背景** 1998年9月4日,Google公司在美国硅谷成立。正如大家所知,它是一家做搜索引擎起家的公司,一位名叫**Doug Cutting**的美国工程师,也迷上了搜索引擎。他做了一个用于文本搜索的函数库(姑且理解为软件的功能组件),命名为**Lucene**;Lucene是用JAVA写成的,目标是为各种中小型应用软件加入全文检索功能;2001年底,Lucene成为**Apache软件基金会**jakarta项目的一个子项目; 2004年,Doug Cutting再接再励,在Lucene的基础上,和Apache开源伙伴Mike Cafarella合作,开发了一款可以代替当时的主流搜索的开源搜索引擎,命名为**Nutch**; Nutch是一个建立在Lucene核心之上的网页搜索应用程序,可以下载下来直接使用。它在Lucene的基础上加了网络爬虫和一些网页相关的功能,目的就是从一个简单的站内检索推广到全球网络的搜索上,就像Google一样; 随着时间的推移,无论是Google还是Nutch,都面临搜索对象“体积”不断增大的问题; 2003年,Google发表了一篇技术学术论文,公开介绍了自己的谷歌文件系统**GFS(Google File System)**。这是Google公司为了存储海量搜索数据而设计的专用文件系统; 2004年,Doug Cutting基于Google的GFS论文,实现了**分布式文件存储系统**,并将它命名为**NDFS(Nutch Distributed File System)**; 2004年,Google又发表了一篇技术学术论文,介绍自己的**MapReduce编程模型**。这个编程模型,用于大规模数据集(大于1TB)的并行分析运算; 2006年,当时依然很厉害的**Yahoo(雅虎)公司**,招安了Doug Cutting; 加盟Yahoo之后,Doug Cutting将NDFS和MapReduce进行了升级改造,并重新命名为**Hadoop**(NDFS也改名为HDFS,Hadoop Distributed File System); 第二年(2005年),Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了该功能; 2006年,Google又发论文了,介绍了自己的**BigTable**。这是一种分布式数据存储系统,一种用来处理海量数据的非关系型数据库; Doug Cutting当然没有放过,在自己的hadoop系统里面,引入了BigTable,并命名为**HBase**; 某种程度上,Hadoop的核心部分,基本都有Google的影子: 2008年1月,Hadoop成功上位,正式成为Apache基金会的顶级项目; ## 三、核心架构 Hadoop的核心,说白了,就是HDFS和MapReduce。HDFS为海量数据提供了**存储**,而MapReduce为海量数据提供了**计算框架**; ### **HDFS(Hadoop Distribute File System)** HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanode,对数据进行分布式储存和读取; >[danger] 简单的来说,可以把HDFS理解为一个分布式的,有冗余备份的,可以动态扩展的用来存储大规模数据的大硬盘; ### **MapReduce** MapReduce是一种编程模型,是一种编程方法,是抽象的理论,采用了分而治之的思想。MapReduce框架的核心步骤主要分两部分,分别是Map和Reduce。每个文件分片由单独的机器去处理,这就是Map的方法,将各个机器计算的结果汇总并得到最终的结果,这就是Reduce的方法; >[danger] 简单来说,可以把MapReduce理解成为一个计算引擎,按照MapReduce的规则编写Map/Reduce计算的程序,可以完成计算任务; ### **YARN(Yet Another Resource Negotiator,另一种资源协调者)** Hadoop 的资源管理器,负责海量数据运算时的资源调度; 在Hadoop1.0 中,MapReduce 的 JobTracker 负责了太多的工作,包括资源调度,管理众多的 TaskTracker 等工作。这自然是不合理的,于是 Hadoop 在 1.0 到 2.0 的升级过程中,便将 JobTracker 的资源调度工作独立了出来,而这一改动,直接让 Hadoop 成为大数据中最稳固的那一块基石。 而这个独立出来的资源管理框架,就是 YARN; ## 四、应用领域 OLAP领域,而非OLTP领域,具体如: 大数据存储:分布式大数据存储; 日志处理:大数据量日志分析; ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库; 机器学习:如Apache Mahout项目; 搜索引擎:Hadoop + lucene实现; 数据挖掘:目前比较流行的广告推荐,个性化广告推荐; >[danger] Hadoop是专为**离线和大规模数据**分析而设计的,并不适合在线事务处理应用; ## 五、使用流程 ### **搭建Hadoop集群;** ### **上传文件到Hadoop集群;** Hadoop集群搭建好以后,可以通过web页面查看集群的情况,还可以通过Hadoop命令来上传文件到hdfs集群,通过Hadoop命令在hdfs集群上建立目录,通过Hadoop命令删除集群上的文件等等; ### **编写map/reduce程序** 通过集成开发工具(例如eclipse)导入Hadoop相关的jar包,编写map/reduce程序,将程序打成jar包扔在集群上执行,运行后出计算结果; ## 六、关联技术 **Hive** 用户处理存储在HDFS中的数据,hive的意义就是把好写的hive的sql转换为复杂难写的map-reduce程序; **Hbase** 是一款基于HDFS的数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等; **Pig** 是Hadoop数据操作的客户端是一个数据分析引擎; **Spark** 是一种通用的大数据计算框架,正如传统大数据技术Hadoop的MapReduce、Hive引擎,以及Storm流式实时计算引擎等; Spark主要用于大数据的计算,而Hadoop以后主要用于大数据的存储(比如HDFS、Hive、HBase等),以及资源调度(Yarn); **Zookeeper** Hadoop生态圈中很多开源项目使用动物命名,那么需要一个管理员来管理这些“动物”;