一、前言

大数据这个概念不用我提大家也听过很多了,前几年各种公开论坛、会议等场合言必及大数据,说出来显得很时髦似的。有意思的是最近拥有这个待遇的名词是“人工智能/AI”,当然这是后话。

众所周知,大数据的发展是来源于Google三驾马车,分别是:

  • Google File System(GFS) —2003
  • MapReduce —2004
  • Bigtable —2006

不得不说,Google真的是一家牛逼的公司,开源了这些思想造福了全球的IT事业。不过有意思的是,这三篇论文一开始并不是大数据相关的,而是为了更好地服务谷歌自家的搜索业务。基于此,出现了传统的大数据框架三大组件:HDFS、MapReduce、Hbase,这就是Hadoop最开始的样子。

二、Hadoop简介

Hadoop是一个用Java编写的Apache开源框架,现在我们提到Hadoop可能有两种所指,一种是Hadoop几个基本模块,另一种是可以安装在Hadoop之上的附加软件包的集合,例如Hive、Impala、Oozie、Hue等等等等,也称之为Hadoop家族。所以说,Hadoop技术产品是十分丰富并且在一直不停地演化,有些技术可能几年后不流行了,又或者产生了新的技术。所以在大数据领域是需要不断地学习的,这也导致了大数据领域的工作一般待遇都很丰厚,因为要求真的还蛮高的,需要掌握的技术线比较长。
随便丢张图了解下(图随便找的,有些技术可能已经不流行了,有些目前流行的技术没有):

Hadoop基本框架介绍

  • Hadoop Common:这些是其他Hadoop模块所需的Java库和实用程序。这些库提供文件系统和操作系统级抽象,并包含启动Hadoop所需的Java文件和脚本;
  • Hadoop YARN:这是一个用于作业调度和集群资源管理的框架;
  • Hadoop Distributed File System (HDFS™):分布式文件系统,提供对应用程序数据的高吞吐量访问;
  • Hadoop MapReduce:这是基于YARN的用于并行处理大数据集的系统。

MapReduce

实际上是两个不同的任务:
Map(映射):把读入的数据用相同的方法拆分成小数据块,然后把这些小数据块分发到不同的工作节点上。每一个节点循环处理同样的事,这就是一个分布式计算的过程。
Reduce(归并):此任务将map任务的输出作为输入,并将这些数据元组合并为较小的元组集合。 reduce任务总是在map任务之后执行。
图解:

HDFS

HDFS是GFS的开源实现,它使用主/从结构,其中主节点由管理文件系统元数据的单个NameNode和存储实际数据的一个或多个从节点DataNode组成。HDFS命名空间中的文件被拆分为几个块,这些块存储在一组DataNode中。 NameNode决定块到DataNode的映射。DataNodes负责与文件系统的读写操作。它们还根据NameNode给出的指令来处理块创建,删除和复制。
HDFS架构图:

YARN

旧的MapReduce过程是通过JobTracker和TaskTracker来完成的:

  • JobTracker: 负责资源管理,跟踪资源消耗和可用性,作业生命周期管理(调度作业任务,跟踪进度,为任务提供容错)
  • TaskTracker: 加载或关闭任务,定时报告任务状态旧MapReduce图示:


可以一眼看出JobTracker是核心所在,存在单点问题和资源利用率问题。所以出现了新的YARN架构。
YARN将JobTracker的职责进行拆分,将资源管理和任务调度监控拆分成独立的进程:一个全局的资源管理和一个单点的作业管理。ResourceManager和NodeManager提供了计算资源的分配和管理,而ApplicationMaster则完成应用程序的运行。

  • ResourceManager: 全局资源管理和任务调度
  • NodeManager: 单个节点的资源管理和监控
  • ApplicationMaster: 单个作业的资源管理和任务监控

YARN架构图示:

现在的Hadoop架构长这样:


可以看出,一些Hadoop家族的技术产品也是通过YARN和Hadoop联动的,YARN作为资源调度器起到一个中央管理的作用,这么多技术工具都在同一个集群上运转,大家互相配合协调有序工作,就是依赖于YARN的分配管理。

三、Hadoop家族产品介绍

大数据领域的技术产品茫茫多,挑几个我用过的或者很重要的组件简单介绍下。

Hive

MapReduce的程序写起来是一点都不方便,所以需要更高层更抽象的语言来描述算法和数据处理过程。于是Hive诞生了,它用类SQL语言来描述MapReduce,称之为HQL。这简直是个伟大发明。大量的数据分析人员终于也能直接使用Hadoop技术,我的SQL入门就是在Hive上操作的。Hive现在是Hadoop大数据仓库的核心工具,它是由Facebook贡献的,感谢脸书,感恩。

Impala

跟Hive一样,也提供类SQL语言来查询处理数据,称之为Impala SQL。它是一种实时交互的查询工具,不经由MapReduce批处理,而是通过使用分布式查询引擎直接读取HDFS或HBase中的内容,大大降低延迟。总结下,Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。
就我个人的使用体会看,Impala的容错性没有Hive好,很多Hive能运行的SQL,在Impala中可能报错,不过Impala的查询速度的确甩开Hive很多,这也是MapReduce的局限性所在(这也导致了后续Spark的诞生),而且Impala也不支持UDF(自定义函数扩展,实现很多SQL难以实现或不好实现的功能)。所以在很多时候,我们都是Hive和Impala配合着使用,各有优劣。

Oozie

一个基于工作流引擎的开源框架。它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。当我们需要让一些数据处理过程自动周期地运行时会需要它,在Oozie上设定好工作流后,可以实现数据的自动导入HDFS-清洗-处理-导出同步的过程。

HBase

构建在HDFS之上的分布式,面向列的数据库。HDFS缺乏随即读写操作,HBase正是为此而出现。在需要实时读写、随机访问超大规模数据集时,可以使用HBase。它不是关系型数据库,也不支持SQL,它是一种典型的NoSQL(Not Only SQL)。也是Google经典论文Bigtable的开源实现。

Storm

流计算平台,为了达到更快更实时的数据更新,在数据流进来的时候就进行处理。流计算基本无延迟,但劣势是不灵活,你想要处理的数据必须预先设计好,所以并不能完全替代批处理系统。

Spark

一个快速、通用的大规模数据处理引擎,在Hadoop的整个生态系统中,Spark和MapReduce在同一个层级,即主要解决分布式计算框架的问题。至于为什么会产生Spark,是因为Hadoop的计算框架MapReduce存在着局限性和不足。比如抽象层次低,代码不好写;表达力欠缺、中间结果存储在HDFS中,速度不够快;延时高,只适合批处理不适合交互处理和实时处理。所以Spark的诞生就是为了解决这些问题,它的中间输出结果可以保存在内存中(内存放不下会写入磁盘),避免了对HDFS的大量的读写,减少了I/O的开销。
可以说,Spark是对Hadoop MapReduce的改进,同时又兼容Hadoop家族,它可以运行在YARN之上,负责存储的仍然是HDFS,它替代的是MapReduce计算框架,获取更高更快更强的计算速度。上层的话也有用对SQL的支持,叫做Spark SQL,也有Hive ON Spark的项目继续使用我们可爱的Hive。所以说,Spark是有一定的野心来对Hadoop取而代之的,而且这样的趋势来越来越明显。

其他

还有些我不太了解的就简单提及:Zookeeper是高一致性的分布存取协同系统;Mahout是分布式机器学习库;Sqoop是异构数据源海量数据交互工具。当然这个工具我没用过,我用的是阿里开源的数据同步工具:DataX。

四、后话—Hadoop版本

Hadoop的部署是比较麻烦的,我自己也只是实现过伪分布式模式的部署,还是按照教程一步步来的,很多步骤都不是很明白到底在做什么,对于Linux和Java精通的程序员来说可能过程会比较友好。
Hadoop实际上有很多版本,有Apache Hadoop,这是开源版本,也叫社区版。实际上所有其他的发行版都是基于此衍生出来的。因为Apache Hadoop是开源的,允许任何人修改并作为商业版本发布。
最有名的发行版当属Cloudera版本(CDH)和Hortonworks版本(HDP)了,其中Cloudera可是贡献了很多Hadoop家族产品技术的公司,CDH也成为了很多人的选择。有意思的是这些发行版也是免费的。
对于大公司来说,为了灵活和实现高度的定制化,基本会选择Apache Hadoop,不过这需要一个Hadoop开发团队来维护,小公司就会选择付费的商业版,有专门的技术支持来解决疑问,也不用维持一个团队,保留少量的管理员即可。

参考资料:https://blog.csdn.net/zhchs2012/article/details/80356920

转载于:https://www.cnblogs.com/shujuxiong/p/9714017.html

大数据和hadoop的一些基础知识相关推荐

  1. 入行大数据,需要学习哪些基础知识?

    大数据已经成为时代发展的趋势,很多人纷纷选择学习大数据,想要进入大数据行业.大数据技术体系庞大,包括的知识较多,系统的学习大数据可以让你全面掌握大数据技能.学习大数据需要掌握哪些知识? 1.学习大数据 ...

  2. 大数据技术原理-----期末复习-基础知识

    一.大数据技术 1.试述数据产生方式经历的几个阶段. 运营式系统阶段:在这个阶段,数据的产生方式是被动的,只有当实际企业业务发生时,才会产生新的记录并存入数据库. 用户原创内容阶段:互联网真正的数据爆 ...

  3. BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略

    BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...

  4. 大数据技术之_23_Python核心基础学习_01_计算机基础知识 + Python 入门 (9.5小时)

    大数据技术之_23_Python核心基础学习_01 第一章 计算机基础知识 1.1 课程介绍 1.2 计算机是什么 1.3 计算机的组成 1.4 计算机的使用方式 1.5 windows 的命令行 1 ...

  5. 细细品味大数据--初识hadoop

    初识hadoop 前言 之前在学校的时候一直就想学习大数据方面的技术,包括hadoop和机器学习啊什么的,但是归根结底就是因为自己太懒了,导致没有坚持多长时间,加上一直为offer做准备,所以当时重心 ...

  6. Hadoop专业解决方案-第1章 大数据和Hadoop生态圈

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop生态圈小组已经翻译完成,在此 ...

  7. hadoop 传感器数据_大数据时代Hadoop的本质,你有过认真了解吗?

    ​ ​除非你过去几年一直隐居,远离这个计算机的世界,否则你不可能没有听过Hadoop,全名Apache Hadoop,是一个在通用低成本的硬件上处理存储和大规模并行计算的一个开源框架,Hadoop本质 ...

  8. 大数据与Hadoop有什么关系?大数据Hadoop入门简介

    学习着数据科学与大数据技术专业(简称大数据)的我们,对于"大数据"这个词是再熟悉不过了,而每当我们越去了解大数据就越发现有个词也会一直被提及那就是--Hadoop 那Hadoop与 ...

  9. 大数据框架Hadoop篇之Hadoop入门

    1. 写在前面 今天开始,想开启大数据框架学习的一个新系列,之前在学校的时候就会大数据相关技术很是好奇,但苦于没有实践场景,对这些东西并没有什么体会,到公司之后,我越发觉得大数据的相关知识很重要,不管 ...

最新文章

  1. python计算四元素组合算法_python – 算法,列表元素之间的最近点
  2. ebs查看服务状态_浅析AWS KMS密钥管理服务
  3. OBS集成WebRTC
  4. SMW0上传文件到数据库层详解
  5. 提高服务器并发量,有关系统配置的常规方法
  6. lombok null字段不显示 继承_Lombok 要知道的 8 个点
  7. python3 与 Django 连接数据库:Error loading MySQLdb module: No module named 'MySQLdb'
  8. Java项目Lombok
  9. 传智播客视频python视频爬虫
  10. network 宽带比特b,字节B
  11. 经典sql练习题(oracle版)
  12. android4.4 计算器,卡西欧仿真计算器
  13. Android Toast的几种使用方式
  14. Java setlocale方法_Java Locale.Builder setLocale(Locale)用法及代码示例
  15. UINO优锘:产品实施“八步法”让客户感受DCV实施的专业性
  16. Altium Designer之多层板设置
  17. 服务器系统启用来宾用户,系统日志中出现Internet来宾账户
  18. 2022-01-05:有四种诗的韵律分别为: AABB、ABAB、ABBA、AAAA。 比如 : 1 1 3 3就属于AABB型的韵律、
  19. 听框架师——李云谈如何成为一个技术“牛人”
  20. 通用设计法则:80/20法则

热门文章

  1. cordova splashscreen插件在android平台的使用
  2. 随笔(二)-- PyCharm如何更改背景图片
  3. es创建索引库,无法使用InetSocketTransportAddress
  4. 原生html小游戏,原生JS实现别踩白块小游戏(一)
  5. java 下载excel xlsx_JAVA Excel.xlsx 上传于下载
  6. c++入门代码_C/C++编程笔记:C语言入门题之正倒金字塔,正反三角形代码详解
  7. 如何进入python程序代码编辑环境_Python怎么打开代码编辑器 来学习吧
  8. JZOJ 5930. 【NOIP2018模拟10.26】山花
  9. android map数据更新数据,Android Intent Map 数据被覆盖
  10. mybatis mapper.xml 文件共用_MyBatis 缓存原来是这么一回事儿!| 原力计划