大数据学习之hadoop生态圈

我爱海鲸 2022-05-13 19:56:49 暂无标签

简介 Hbase、Hive、Spark、 ZooKeeper、Sqoop(数据ETL/同步工具)、Flume(日志收集工具)、Kafka(分布式消息队列)、Ambari、Avro、Cassandra、Chukwa、 Mahout、Pig、Tez、 Oozie(工作流调度器)、Pig(ad-hoc脚本)

一、hadoop概述

   1.1、为什么要用hadoop

   现在的我们,生活在数据大爆炸的年代。目前全球的数据总量已经达到44ZB,经过单
位换算后,至少在440亿TB以上,也就是说,全球每人一块1TB的硬盘都存储不下。

   扩展:数据大小单位:Byte,KB,MB,GB,TB,PB,EB,ZB,YB,DB,NB

   一些数据集的大小更远远超过了1TB,也就是说,数据的存储是一个要解决的问题。同时,硬盘技术也面临一个技
术瓶颈,就是硬盘的传输速度(读数据的速度)的提升远远低于硬盘容量的提升。我们看下面这个表格:

年份 硬盘大小 传输速率 所需时间
1990 1370MB 4.4MB/s 5分钟
2010 1TB主流 100MB/s 3小时

可以看到,容量提升了将近1000倍,而传输速度才提升了20倍,读完一个硬盘的所需要的时间相对来说,更长更
久了(已经违反了数据价值的即时性)。读数据都花了这么长时间,更不用说写数据了。

对于如何提高读取数据的效率,我们已经想到解决的方法了,那就是将一个数据集存储到多个硬盘里,然后并行读
取。比如1T的数据,我们平均100份存储到100个1TB硬盘上,同时读取,那么读取完整个数据集的时间用不上两
分钟。至于硬盘剩下的99%的容量,我们可以用来存储其他的数据集,这样就不会产生浪费。解决读取效率问题的
同时,我们也解决了大数据的存储问题。

但是,我们同时对多个硬盘进行读/写操作时,又有了新的问题需要解决:

   1、硬件故障问题。一旦使用多个硬件,相对来说,个别硬件产生故障的几率就高,为了避免数据丢失,最常见的做法就
是复制(replication):文件系统保存数据的多个复本,一旦发生故障,就可以使用另外的复本。

   2、读取数据的正确性问题。大数据时代的一个分析任务,就需要结合大部分数据来共同完成分析,因此从一个硬盘上读
取的数据要与从其他99个硬盘上读取的数据结合起来使用。那么,在读取过程中,如何保证数据的正确性,就是一个很
大的挑战。

   针对于上述几个问题,Hadoop为我们提供了一个可靠的且可扩展的存储和分析平台,此外,由于Hadoop运行在
商用硬件上且是开源的,因此Hadoop的使用成本是比较低了,在用户的承受范围内。

   2.2 Hadoop的简要介绍

   Hadoop是Apache基金会旗下一个开源的分布式存储和分析计算平台,使用java语言开发,具有很好的跨平台性,
可以运行在商用(廉价)硬件上,用户无需了解分布式底层细节,就可以开发分布式程序,充分使用集群的高速计算
和存储

   Apache lucene是一个应用广泛的文本搜索系统库。该项目的创始人道格·卡丁在2002年带领团队开发该项目中的子项目
Apache Nutch,想要从头打造一个网络搜索引擎系统,在开发的过程中,发现了两个问题,一个是硬件的高额资金投
入,另一个是存储问题。

   2003年和2004年Google先后发表的《GFS》和《MapReduce》论文,给这个团队提供了灵感,并进行了实现,于是
NDFS(Nutch分布式文件系统)和MapReduce相继问世。2006年2月份,开发人员将NDFS和MapReduce移出Nutch形成一个
独立的子项目,命名为Hadoop(该名字据Doug Cutting所说,是借用了他的孩子给毛绒玩具取得名字)。

   2.3 谷歌的三篇论文

   2003年发表的《GFS》
基于硬盘不够大、数据存储单份的安全隐患问题,提出的分布式文件系统用于存储的理论思想。
· 解决了如何存储大数据集的问题

   2004年发表的《MapReduce》
基于分布式文件系统的计算分析的编程框架模型。移动计算而非移动数据,分而治之。
· 解决了如何快速分析大数据集的问题

   2006年发表的《BigTable》
针对于传统型关系数据库不适合存储非结构化数据的缺点,提出了另一种适合存储大数据集的解决方案

   2.4 Hadoop的发展历史

   它起源于Apache Nutch项目(一个网页爬取工具和搜索引擎系统,后来遇到大数据量的网页存储问题)。

   2003年,谷歌发表的一篇论文(描述的是“谷歌分布式文件系统”,简称GFS)给了Apache Nutch项目的开发者灵感。

   2004年,Nutch的开发者开始着手NDFS (Nutch的分布式文件系统)。

   2004年,谷歌又发表了—篇介绍MapReduce系统的论文。

   2005年,Nutch项目实现了—个MapReduce系统

   2006年,开发人员将NDFS和MapReduce移出Nutch项目形成一个子项目,命名Hadoop

   2008年,Hadoop已称为Apache的顶级项目。

   2008年4月,Hadoop打破世界记录,成为最快排序1TB数据的系统,排序时间为209秒

   2009年,Hadoop把1TB数据的排序时间缩短到62秒。

   从此名声大噪,现在很多公司都在使用,如雅虎,last.fm,FaceBook,《纽约时报》等等

   2.5 Hadoop的版本介绍

   Hadoop是Apache的一个开源项目,所以很多公司在这个基础上都进行了商业化,加入了自己的特色。Hadoop的
发行版中除了有Apache社区提供的hadoop之外,比较出名的公司如cloudera,hortonworks,mapR,华
为,DKhadoop等都提供了自己的商业版本,主要是大型公司提供更为专业的技术支持,多数都收费。

   Apache Hadoop(社区版): 原生的Hadoop、开源、免费、社区活跃,更新速度快,适合学习阶段

   Cloudera Hadoop(CDH版):最成型的商业发行版本。有免费版和收费版本。版本划分清晰,版本更新速度快,对生态圈
的其他软件做了很好的兼容性,安全性、稳定性都有增强。支持多种安装方式(Cloudera Manager、YUM、RPM、
Tarball)

   Hortonworks Hadoop(HDP):完全开源,安装方便,提供了直观的用户安装界面和配置工具

   2.6 Hadoop的官网介绍

   2.6.1 apache官网地址和如何进入项目列表

   https://www.apache.org/

 

   2.6.2 找到Hadoop项目

   

   2.6.3 Hadoop的模块和生态圈

   2.6.4 Hadoop的历史版本入口

   2.6.5 找到Hadoop2.7.6,以及文档入口

   2.7 Hadoop的组成部分

   hadoop2.0以后的四个模块:
      - Hadoop Common:Hadoop模块的通用组件
      - Hadoop Distributed File System:分布式文件系统
      - Hadoop YARN:作业调度和资源管理框架
      - Hadoop MapReduce:基于YARN的大型数据集并行计算处理框架

   hadoop3.0新扩展的两个模块:

      - Hadoop Ozone:Hadoop的对象存储机制

      - Hadoop Submarine:Hadoop的机器学习引擎

   2.8 Hadoop的生态系统

   参考apache官网:http://hadoop.apache.org/

  

   * Hbase

   是一个可扩展的分布式数据库,支持大型表格的结构化数据存储。 HBase是Apache的Hadoop项目的子项目。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的,而不是基
于行的模式。

   * Hive

   数据仓库基础架构,提供数据汇总和临时查询,可以将结构化的数据文件映射为一张数据库表,并提供简单的
sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive提供的是一种结构化数据的机制,定义了类似于传统
关系数据库中的类SQL语言:Hive QL,通过该查询语言,数据分析人员可以很方便地运行数据分析
业务。

   * Spark

   Hadoop数据的快速和通用计算引擎。 Spark提供了一个简单而富有表现力的编程模型,支持广泛的应用程序,
包括ETL,机器学习,流处理和图计算。

   * ZooKeeper

   一个面向分布式应用程序的高性能协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性
服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

   * Sqoop(数据ETL/同步工具)

   Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是
Mapreduce程序,充分利用了MR的并行化和容错性。

   * Flume(日志收集工具)

   Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。它将数据从产生、传
输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而
支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。

   * Kafka(分布式消息队列)

   Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据。这些数据包括网站的
pv、用户访问了什么内容,搜索了什么内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处
理。

   * Ambari

   用于供应,管理和监控Apache Hadoop集群的基于Web的工具。Ambari目前已支持大多数Hadoop组件,包括
HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。Ambari还提供了一个用于查
看集群健康状况的仪表板,例如热图以及可视化查看MapReduce,Pig和Hive应用程序的功能以及用于诊断其性能特征的
功能,以方便用户使用。

   * Cassandra

   可扩展的多主数据库,没有单点故障。是一套开源分布式NoSQL数据库系统。

   * Chukwa

   于管理大型分布式系统的数据收集系统(2000+以上的节点, 系统每天产生的监控数据量在T级别)。它构建在
Hadoop的HDFS和MapReduce基础之上,继承了Hadoop的可伸缩性和鲁棒性。Chukwa包含一个强大和灵活的工具集,提供
了数据的生成、收集、排序、去重、分析和展示等一系列功能,是Hadoop使用者、集群运营人员和管理人员的必备工具。

   * Mahout

   Apache旗下的一个开源项目,可扩展的机器学习和数据挖掘库

   * Pig

   用于并行计算的高级数据流语言和执行框架。它简化了使用Hadoop进行数据分析的要求,提供了一个高层次
的、面向领域的抽象语言:Pig Latin。

   * Tez

   一个基于Hadoop YARN的通用数据流编程框架,它提供了一个强大而灵活的引擎,可执行任意DAG任务来处理批
处理和交互式用例的数据Hado™生态系统中的Hive™,Pig™和其他框架以及其他商业软件(例如ETL工具)正在采用Tez,
以替代Hadoop™MapReduce作为底层执行引擎。

   * Oozie(工作流调度器)

   一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系
统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。

   * Pig(ad-hoc脚本)

   由yahoo!开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具,通常用于进
行离线分析。它定义了一种数据流语言—Pig Latin,它是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分
析Hadoop数据集的脚本语言(Pig Latin)。

你好:我的2025