hadoop生态圈相关技术_hadoop的生态

hadoop生态圈相关技术_hadoop的生态装完hadoop2.6.0-cdh5.5.2后put命令不好使,并且装完hive后导入本地数据也报错,put命令一直报这个错:hadoop@debian:~$hadoopfs-puthe.tt/aaa17/01/0223:37:52WARNhdfs.DFSClient:DataStreamerExceptionorg.apache.hadoop.ipc.RemoteE

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一、hadoop诞生记

  最早Doug Cutting(后面被称为hadoop之父)领导创立了Apache的项目Lucene,然后Lucene又衍生出子项目Nutch,Nutch又衍生了子项目Hadoop。Lucene是一个功能全面的文本搜索和查询库,Nutch目标就是要试图以Lucene为核心建立一个完整的搜索引擎,并且能达到提到Google商业搜索引擎的目标。网络搜索引擎和基本文档搜索区别就在规模上,Lucene目标是索引数百万文档,而Nutch应该能处理数十亿的网页。因此Nutch就面临了一个极大的挑战,即在Nutch中建立一个层,来负责分布式处理、冗余、故障恢复及负载均衡等等一系列问题。

  曙光的到来,2004年,Google发表了两篇论文来论述Google文件系统(GFS)和MapReduce框架,并且使用了这两项技术来拓展自己的搜索系统,于是Doug Cutting看到了这两篇论文的价值并带领他的团队便实现了这个框架,并将Nutch移植上去,于是Nutch的可扩展性得到极大的提高。这个新的框架就是最初的hadoop。2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。

  在2006年1月,雅虎雇佣Doug Cutting,并让他和一个专门的团队来一起改进Hadoop,并将其作为一个开源项目继续发展。
 

二、hadoop生态圈

  我们通常说到的hadoop包括两部分,一是Hadoop核心技术(或者说狭义上的hadoop),对应为apache开源社区的一个项目,主要包括三部分内容:hdfs,mapreduce,yarn。其中hdfs用来存储海量数据,mapreduce用来对海量数据进行计算,yarn是一个通用的资源调度框架(是在hadoop2.0中产生的)。

  另一部分指广义的,广义上指一个生态圈,泛指大数据技术相关的开源组件或产品,如hbase、hive、spark、pig、zookeeper、kafka、flume、phoenix、sqoop等。

  生态圈中的这些组件或产品相互之间会有依赖,但又各自独立。比如habse和kafka会依赖zookeeper,hive会依赖mapreduce。

  下面图给出了Hadoop技术生态圈的一个大致组件分布图:
在这里插入图片描述
  需要说明的是,上图并没有包括当前生态圈中的所有组件。而且hadoop生态圈技术在不断的发展,会不断有新的组件出现,一些老的组件也可能被新的组件替代。需要持续关注Hadoop开源社区的技术发展才能跟得上变化。
 

三、常见组件简介

1.Hdfs:

  Hdfs是一种分布式文件系统,是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。Hdfs简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。

2.Mapreduce:

  MapReduce分为第一代(称为 MapReduce 1.0或者MRv1,对应hadoop第1代)和第二代(称为MapReduce 2.0或者MRv2,对应hadoop第2代)。第一代MapReduce计算框架,它由两部分组成:编程模型(programming model)和运行时环境(runtime environment)。它的基本编程模型是将问题抽象成Map和Reduce两个阶段,其中Map阶段将输入数据解析成key/value,迭代调用map()函数处理后,再以key/value的形式输出到本地目录,而Reduce阶段则将key相同的value进行规约处理,并将最终结果写到HDFS上。它的运行时环境由两类服务组成:JobTracker和TaskTracker,其中,JobTracker负责资源管理和所有作业的控制,而TaskTracker负责接收来自JobTracker的命令并执行它。

  MapReduce 2.0或者MRv2具有与MRv1相同的编程模型,唯一不同的是运行时环境。MRv2是在MRv1基础上经加工之后,运行于资源管理框架YARN之上的MRv1,它不再由JobTracker和TaskTracker组成,而是变为一个作业控制进程ApplicationMaster,且ApplicationMaster仅负责一个作业的管理,至于资源的管理,则由YARN完成。

  总结下,MRv1是一个独立的离线计算框架,而MRv2则是运行于YARN之上的MRv1。

3.Hive:

  Hive是一种基于Hadoop的数据仓库,由facebook开源,最初用于解决海量结构化的日志数据统计问题。Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。

4.Hbase:

  HBase是Google Bigtable的克隆版。它是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

5.Zookeeper:

  ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper包含一个简单的原语集,提供Java和C的接口。

6.Sqoop:

  Sqoop是一款开源的工具,主要用于在Hadoop和传统的数据库(mysql、postgresql等)进行数据的传递,可以将一个关系型数据库(例如:MySQL、Oracle、Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

  Sqoop分为一代(称为Sqoop1)和二代(称为Sqoop2),其中Sqoop1的架构,仅仅使用一个Sqoop客户端,Sqoop2的架构,引入了Sqoop server集中化管理connector,以及rest api,web,UI,并引入权限安全机制。

7.Pig:

  Apache Pig是MapReduce的一个抽象。它是一个工具/平台,用于分析较大的数据集,并将它们表示为数据流。Pig通常与 Hadoop 一起使用;我们可以使用Apache Pig在Hadoop中执行所有的数据处理操作。要编写数据分析程序,Pig提供了一种称为 Pig Latin 的高级语言。该语言提供了各种操作符,程序员可以利用它们开发自己的用于读取,写入和处理数据的功能。

  要使用 Apache Pig 分析数据,程序员需要使用Pig Latin语言编写脚本。所有这些脚本都在内部转换为Map和Reduce任务。Apache Pig有一个名为 Pig Engine 的组件,它接受Pig Latin脚本作为输入,并将这些脚本转换为MapReduce作业。

  所以使用PIG,可以让不太擅长编写Java程序的程序员来进行大数据分析处理。

8.Mahout:

  Mahout起源于2008年,最初是Apache Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。

  Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。

9.Flume:

  Flume是Cloudera(一个知名的基于开源hadoop的大数据发行商)设计开发的一个开源的日志收集工具, 具有分布式、高可靠、高容错、易于定制和扩展的特点。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。

10.Spark:

  Spark是一个通用计算引擎,能对大规模数据进行快速分析,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。Spark不依赖于MapReduce,它使用了自己的数据处理框架。Spark使用内存进行计算,速度更快。Spark本身就是一个生态系统,除了核心API之外,Spark生态系统中还包括其他附加库,可以在大数据分析和机器学习领域提供更多的能力,如Spark SQL,Spark Streaming,Spark MLlib,Spark GraphX,BlinkDB,Tachyon等。

11.Storm:

  Storm是Twitter开源的分布式实时大数据处理框架,最早开源于github,从0.9.1版本之后,归于Apache社区,被业界称为实时版Hadoop。它与Spark Streaming的最大区别在于它是逐个处理流式数据事件,而Spark Streaming是微批次处理,因此,它比Spark Streaming更实时。

12.Impala:

  Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。

  另外Impala可以和Hive结合使用,它可以直接使用Hive的元数据库Metadata。

13.Kafka:

  Kafka是一种分布式的,基于发布/订阅的消息系统,类似于消息对列的功能,可以接收生产者(如webservice、文件、hdfs、hbase等)的数据,本身可以缓存起来,然后可以发送给消费者(同上),起到缓冲和适配的作。

14.Yarn:

  Yarn是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。它将资源管理和处理组件分开,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。可以把它理解为大数据集群的操作系统。可以在上面运行各种计算框架(包括MapReduce、Spark、Storm、MPI等)。

15.Hue:

  Hue是一个开源的Apache Hadoop UI系统,通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job等等。

16.Oozie:

  在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的。Oozie让我们可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。wuOozie是一种Java Web应用程序,它运行在Java servlet容器中,并使用数据库来存储相关信息。

17.Azkaban:

  主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value键值对的方式,通过配置中的dependencies来设置依赖关系,这个依赖关系是无环的,否则会被视为无效的工作流。相比于OOzie的配置复杂度高。

18.Dolphinscheduler:

  Apache DolphinScheduler是一个分布式、去中心化、易扩展的可视化DAG工作流任务调度系统,其致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。

19.Ambari:

  Ambari是一个开源的大数据集群管理系统,可以用来就是创建、管理、监视 Hadoop 的集群,并提供WEB可视化的界面来让用户进行管理。

20.Tez:

  Tez是Apache最新开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。

21.Lucene/Solr/Elasticsearch:

  Solr与ElasticSearch都是基于Apache lucene,Solr适合传统搜索,ES适合实时搜索。

22.Kylin:

  Kylin作为第一个由国人主导并贡献到Apache基金会的开源项目,堪称大数据分析界的“神兽”。Kylin的出现就是为了解决大数据系统中TB级别数据的数据分析需求,它提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,它能在亚秒内查询巨大的Hive表。其核心是预计算,计算结果存在HBase中。

23.Presto:

  Presto是Facebook在2013年开源基于内存的并行计算的MPP SQL引擎,旨在填补Hive在速度和灵活性(对接多种数据源)上的不足。相似的SQL on Hadoop竞品还有Impala和Spark SQL等。

  Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。
 

四、组件下载

  我们可以有两种途径获取相关的大数据开源组件,一种是直接获取apache提供的原始组件。另外一种是从一些知名的大数据发行商(如cloudera,简称CDH)获取。

  这两种方式各有优劣,从apache获取原始组件,好处是可以及时追踪最新的版本和补丁。从发行商获取的组件,是经过发行商测试、甚至改进的,可能会更加稳定。如果只是自己学习使用,从哪获取没啥区别了。有一点需要注意的是,各个组件都有各自独立的版本规划和演进,之间存在相互依赖的问题,需要考虑彼此间的版本匹配问题。

我们下面举例如何从apache上获取原生组件:
  Hadoop生态圈的各种组件和产品都在apache上。我们可以到apache官网上去下载,一般会链接到相关的镜像站点上(http://archive.apache.org/dist/)。比如我们进入如下的页面,会看到大量的组件目录列表,下图是截图的一部分:
在这里插入图片描述
  上图中每行都代表了apache下的一个开源软件,按字母顺序排列的,你可以找到有hadoop,hbase,hive,impala等这几个大数据的组件。我们以hadoop为例来继续,点击列表中的hadoop目录,会出现如下的界面:
在这里插入图片描述
  其中ozone是新一代的一个分布式存储组件,我们暂时不管。上面的common和core目录的内容是一样的。我们再点击common目录,会出现如下界面:
在这里插入图片描述
  上面每个目录对应的是hadoop的一个版本,我们选择自己需要的版本,比如我们点击hadoop-2.6.0目录,会出现如下界面:
在这里插入图片描述
  名称中含src的表示是源代码,如果下载源代码,需要自己编译打包。我们直接下载编译打包好的,这样下载后直接部署即可,对应上面的就是hadoop-2.6.0.tar.gz目录。

  下载到本地解压后,我们会看到如下的目录结构:
在这里插入图片描述
  上面是hadoop下载包中的内容,其中包含了Hdfs,mapreduce,yarn这三个核心部件。我们可以进行相关的配置,然后运行相关的脚本,就可以启动hdfs,yarn服务。
 

五、学习路线

1.预备知识:

(1)linux基础:

  因为hadoop一般都是在linux下运行,我们要在linux进行大数据环境的安装和配置,肯定需要对linux有所熟悉。另外很多组件在设计上也参考了linux的一些特点,比如hdfs的文件目录树也是类似Linux的目录结构,相关的文件操作命令也是类似linux的文件命令。熟悉linux的相关操作对更好的理解相关组件也是很有帮助的。

(2)java等编程语言:

  这个可以从两个角度来看,一是各个大数据组件都是由某种编程语言开发出来的,比如hdfs,hbase,hive等是用java语言开发出来的;比如spark,kafka等是用scala语言开发出来的;比如impla是用c++语言开发出来的。这些大数据组件作为开源产品,如果我们要深入学习和了解的话,就需要去阅读源码,甚至可以发现源码中的问题和可以补充的功能,往开源社区提交代码,作开源贡献。

  目前来说JAVA语言是各大数据组件使用最多的编程语言,但如上面所列的也有组件使用非JAVA的编程语言,而且相信随着大数据技术的发展,越来越多的编程语言会被用到。作为大数据技术的学习者,我们可能要学习多门编程语言,以便与熟悉更多的大数据组件技术。

  另外一个层面是,每个开源组件都提供了对外的API,以让程序员可以编写代码来使用这些开源组件,有些开源组件除了提供与本身开发语言相同的API外,甚至提供了其它编程语言的API。我们要使用这些组件,肯定要使用到某种或某几种API,这样必须要熟悉所使用的API对应的编程语言。

(3)关系数据库与sql语句:

  很多大数据分析和处理组件,如hive ,spark,impala等都提供了类似关系数据库sql的操作数据的机制。如果对关系数据库及sql已经很熟悉,则对掌握这些组件提供的类sql功能有非常大的帮助。

2.环境准备:

  hadoop各种组件一般都是运行在linux系统上,部分组件也可以在windows下运行。我们最好是准备一个linux的环境来学习。获取Linux环境方式很多,如:

  • 在一台机器上安装Linux操作系统 或 windows和Linux双操作系统
  • 可以在windows或linux操作系统的机器上安装虚拟机软件(如virualbox,vmware等),然后创建linux操作系统的虚拟机
  • 可以直接在网上(如阿里、腾讯等)租赁一台Linux主机

  因为hadoop核心组件和很多组件都是基于Jvm运行的,所以机器上一定要安装java运行环境。建议安装java1.8版本。

3.分阶段学习:

(1)先从单个组件学习:

  一般是先从hadoop核心组件HDFS,maperduce开始学习,然后再逐步学习其它组件。

(2)单个组件的基础学习:

  先掌握单个组件(以及依赖组件)的安装和运行,开始可以先是单机安装,hadoop生态圈的各个组件基本都支持在一台机器上进行安装和运行,以便于简化开发阶段的环境准备。而在应用上线后,往往是集群方式安装和运行。

  同时要理解组件的基本架构和原理,对组件有一个整体层面的了解。
另外站在使用者角度(如开发者角度)去学习组件的使用,比如对于hdfs,知道如何通过命令行方式使用hdfs提供的命令进行文件的操作,如何通过组件提供的api(如java api)来编写程序进行操作。

(3)对单个组件进行深入学习,包括但不限于如下方面:
  • 深入了解组件的原理和架构
  • 了解组件分布式部署的配置和性能调优
  • 阅读组件的源代码,理解其实现机制
  • 发现组件源代码中的问题和不足,向开源社区提交issue,为开源社区做贡献
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226893.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux获取时间戳_java时间戳转换成时间

    linux获取时间戳_java时间戳转换成时间转换成指定的日期格式,如“2021/08/2919:25:18‘:date-d@1630236318+”%Y/%m/%d%H:%M:%S”leon@ubuntu:~/work$date-d@1630236318+”%Y/%m/%d%H:%M:%S”2021/08/2911:25:18date-d@1630236318leon@ubuntu:~/work$date-d@1630236318Sun29Aug202111:25:18AMUTC…

  • C语言模拟银行家算法

    C语言模拟银行家算法银行家算法需求:一个程序对资源的最大需求量不超过系统的最大资源程序可以分多次申请资源,但是申请资源的总量不能超过最大需求量当系统现有资源不能满足程序的需求时,可以推迟分配资源,但是总能满足程序对资源的需求当程序获得了全部的资源后,要在有限的时间内归还资源系统的安全/不安全状态:在程序申请资源时,当系统的拥有的资源不能满足程序剩余所需的全部资源时,则处于不安全状态C代码实现:头文件的导入和预定义#include<stdio.h>#include<stdli

  • springboot排除exclude

    springboot排除exclude

  • python 大数组切割成多个小数组

    python 大数组切割成多个小数组#一个大数组切割成无数的小数组defarr_size(arr,size):s=[]foriinrange(0,int(len(arr))+1,size):c=arr[i:i+size]s.append(c)newlist=[xforxinsifx]returnnewlist

  • Lunix 命令_linux常用基本命令实例

    Lunix 命令_linux常用基本命令实例将常用到的Lunix基本命令整理一下。1.文本编辑命令使用:vifilename:对文本可以增删改查操作。viewfilename:可以理解成vi版本的只读操作。catfilename:普通查阅2.vi命令详解(1)退出并保存::ZZ或是:wq退出不保存::q!(2)光标移动:hjkl分别对应←…

  • docker离线安装部署 linux_docker 离线安装

    docker离线安装部署 linux_docker 离线安装docker离线安装

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号