大数据技术快速扫盲篇

              大数据技术快速扫盲篇

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

一.大数据概述

1>.什么是大数据

  大数据(Big Data)是指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发现力和流程优化能力的海量,高增长率和多样化的信息资产。

  大数据技术主要解决海量数据的存储和海量数据的分析计算能力。

  常见的数据存储单位有:bit,Byte,KB,MB,GB,TB,PB,EB,ZB,YB,NB,DB,CB等,换算单位如下所示:
    1Byte = 8bit
    1KB  = 1024Byte
    1MB  = 1024KB
    1GB  = 1024MB
    1TB  = 1024GB
    1PB  = 1024TB
    1EB  = 1024PB
    ...  

2>.大数据的产生背景

  大数据技术直接源于互联网行业。随着互联网的蓬勃发展,用户量和数据量越来越多,逐步形成了大数据,这成为大数据技术的基础。

  根据有关技术报告知道,国内百度,腾讯和阿里巴巴等公司2013年数据规模如下:
    2013年百度相关技术报告称,百度数据总量接近1000PB,网页的数据量是几千亿个,每年更新几十亿个,每天查询次数几十亿次。
    2013年腾讯相关技术报告称,腾讯约有8亿用户,4亿移动用户,总存储数据量经压缩处理以后再100PB左右,日新增200TB到300TB,月增加10%的数据量。
    2013年阿里巴巴相关技术报告称,总体数据量为100PB,每天活跃数据量已经超过了50TB,共有4亿产品信息和2亿多名注册用户,每天访问超过4000万人次。

  为了采集,存储,和分析大数据,互联网公司尝试研发大数据技术,在众多技术方案中,开源系统Hadoop与Spark成为应用最广泛的大数据技术,由于它们的用户量巨大,已经初步成为大数据技术规范。

  以上内容是摘自董西成老师的<<大数据技术体系详解原理,架构与实践>>一书,这本书我强烈推荐小白去阅读一下,这本书很系统的罗列了大数据常用组件的工作原理,很适合大数据运维,开发人员阅读。

  我后期的博客分析也会抽取该书的部分精髓给大家分享,不仅如此,我还会为书中提到的一些技术概要做深入的调研,都会在我的博客中分享出来,2020年估计又是忙碌的一年...

3>.大数据的特点

  数据量大(Volume):
    截至目前,人类生产的所有印刷材料数据量是200PB,而历史上人类总共说过的话的数量大约是5EB。当然,典型个人计算机硬盘的应用为TB量级,而一些大企业的数据量已经接近EB量级。  

  计算速度快(Velocity):
    这是大数据区分于传统数据挖掘的最显著特征,根据IDC的"数字宇宙"的报告,预计到2020年,全球数据使用量将达到35.2ZB。在如此海量的数据面前,处理数据的效率就是企业的生命。

  数据多样化(Variety):
    比如操作系统,Nginx,SDK埋点,订单,爬虫,网络直播,视频电话,屏幕共享等这些不同类型应用程序产生数据的多样性也让数据被分为结构化和非结构化数据。
    相对于以往便于存储的以数据库/文本为主的结构化数据,非结构化数据越来越多,包括网络日志,音频,视频,图片,地理为止信息等,这些多类型的数据的处理能力提出了更高的要求。

  低价值密度(Value):
    价值密度的高低于数据总量的大小成反比。比如,在某网络直播平台中,我们只关心颜值高,身材好,极度幽默感以及多才多艺的主播,如何快速对有价值数据"提纯"成为目前大户数据背景下待解决的难题,
  结构化数据:
    即行数据,存储在数据库中,用二维表来存储的数据。

  非结构化数据:
    难以使用数据库二维表来存储的数据,如文档,图片等,字段可变,字段内容可变或不可变组成的。

  半结构化数据:
    能够实现自我描述的数据,将结构和数据本身混在一起,xml,json,html。
数据的存储方式(就是对数据的建模)概述

4>.大数据的应用场景

  互联网领域:
    在互联网领域,大数据被广泛应用在三大应用场景中,分别是搜索引擎,推荐系统和广告系统。

  电信领域:
    电信领域是继互联网领域之后,大数据应用又一次成功尝试。

  医疗领域:
    医疗领域的数据量巨大,数据类型复杂。到2020年,医疗数据将增至35ZB,相当于2009年数据量的44倍。
    医疗数据包括影像数据,病例数据,检验检查结构,诊疗费用等在内的各种数据,合理利用这些数据可产生巨大的商业价值。

  金融领域:
    银行拥有多年的数据积累,已经开始尝试通过大数据来驱动业务运营。银行大数据应用可分为四大方面,即客户画像应用,精准营销,风险管控,运营优化等不同场景。
  
  物流仓储:
    大数据分析系统助力商家精细化运营,提升销量,节约成本。

  零售:
    分析用户消费习惯,为用户购买商品提供方便,从而提升商品销量,经典案例:纸尿片和啤酒。

  5G时代:
    2019年是大数据的元年。

  物联网:
    比如车联网,家里的冰箱,各种"小度"等。
  旅游:     深度结合大数据能力于旅游行业需求,共建旅游产业智慧管理,指挥服务和指挥营销的未来。   商品广告推荐:     给用户推荐可能喜欢的商品。   保险:     海量数据挖掘及风险预测,助力保险行业精准营销,提升精细化定价能力。   金融:     多维度体现用户特征,帮助金融机构推荐优质客户,防范欺诈风险。   房产:     大数据全面助力房地产行业,打造精准投策和营销,选出更合适的地,建造更适合的楼,卖个更适合的人。   人工智能:     人工智能依赖于大数据技术,因为没有数据就压根就不存在人工智能这样的技术。
    AI(还不成熟,目前最牛的AI智商不如一个五岁的孩子,因此现在的AI还是人和机器相互配合)

  地图:
    百度地图和高德地图想必大家都熟悉,如果没有大数据技术做支撑,就没有办法在秒级内算从一个地方到另一个地方最佳路径。
    而且使用地图的数据还可以判断出一个人每天都去了哪些地方,比如酒店,网吧,公司,酒吧之类的,包括在某个地方的停留时间理论上都是可以算出来的,合理利用这些数据也能发掘很多商业价值哟~

5>.大数据的发展前景

  随着机构和企业积累的数据越来越多,大户数据价值逐步体现出来。因此大数据相关岗位的发展前(钱)景也相当不错。

  国家政策大力扶持大数据技术:
    党的十八大(2012-2017)提出"实施国家大数据战略",2015年国务院向社会公布了<<促进大数据发展行动纲要>>,正式将大数据提升为国家级战略。大数据技术和应用处于创新突破期,国内市场需求处于爆发期,我国大数据产业面临重要的发展机遇。
    党的十九大(2017-2022)提出"推动互联网,大数据,人工智能和实体经济深度融合"。
    
  国际数据公司IDC预测,到2020年,企业基于大数据计算分析平台的支出将突破5000亿美元。目前,外国大数据人才只有46万,未来3到5年人才缺口达到150万之多。自古不变的真理,先入行者吃肉,后入行者喝汤,最后到的买单。

  2017年的北京大学,中国人民大学,北京邮电大学等25所高校成功申请开设大数据课程。

  大数据属于高薪技术,大牛少,升职竞争小,在北京,上海,深圳等地大数据运维和大数据开发等相关岗位3年以上工作经验月薪上20k是很普遍的现象。建议你去主流的招聘网站查看当时的薪资水平。

二.大数据生态圈

1>.Hadoop是什么

  Hadoop是一个由Apache基金会所开发的分布式系统基础架构,主要解决海量的数据存储和海量数据的分析计算问题。

  广义上来说,Hadoop通常是指一个更广泛的概念,即Hadoop生态圈。

  Hadoop的优势如下:
    高可靠性
      因为Hadoop假设计算元素的和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理。
    高扩展性
      在集群间分配任务数据,可方便的扩展数以千计的节点。
    高效性
      在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
    高容错性
      自动保存多个副本数据,并且能够自动将失败的任务重新分配。

2>.Hadoop的发展史

  Lucene框架是Doug Cutting开创的开源软件,用Java书写代码,实现Google类似的全文搜索功能,它提供了全文检索引擎的架构,包括完整的查询引擎和索引引擎。2001年年底Lucene成为Apache基金会的一个子项目。
 
  对于海量数据的场景,Lucene面对与Google同样的困难,即存储数据困难,检索速度慢。学习和模仿Google解决这些问题的办法就是微型版Nutch,可以说Google是Hadoop的思想之源,这里指的是Google在大数据方面的三篇论文。
  2003年Google发布GFS论文思想细节,以此为基础Doug Cutting等人用了1年业余时间,即2014年实现了HDFS前身NDFS问世。同年,Google又有发布了MapReduce论文。

  2005年Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。

  Doug Cutting等人用了2年业余时间实现了NDFS和MapReduce机制,使得Nutch性能飙升。2006年3月份,Map-Reduce和Nutch Distributed File System(简称NDFS)分别被纳入到Hadoop项目中,同年,Hadoop就此正式诞生,标志着大数据时代来临。

  据说Hadoop这个名字来源于Doug Cutting儿子的玩具大象,这也我们后期学习Hadoop组件的logo。

 

3>.Hadoop的发行版本

  随着社区迅猛发展以及各大互联网公司投入的增加,Hadoop与Spark已经成为大数据技术标准,这吸引了大量商业公司基于开源Hadoop与Spark版本实现了自己的发型版本。

  一.Hadoop的版本选择
    目前比较知名的Hadoop版本有以下几个发行版本:
    1>.Apache Hadoop
      社区原始版本,由Apache基金会维护,是其他商业公司发行版的基础。
      2005年Hadoop作为Lucene的子项目,Nutch的一部分正式引入Apache基金会。
      2006年3月份,Map-Reduce和Nutch Distributed File System(NDFS)分别被纳入称为Hadoop的项目中。
      官网地址:http://hadoop.apache.org/

    2>.CDH(Cloudera Distributed Hadoop)
      Cloudera公司发型版,其社区版所有源代码均开源,但企业版则闭源且收费,是使用最广泛的发型版本之一。
      2008年成立的Coudera是最早将Hadoop商用的公司,为合作伙伴提供Hadoop的商用解决方案,主要包括支持,咨询服务,培训;
      2009年Hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support;
      CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强;
      Coundera Manager是集群的软件分发及管理监控平台(这个组件是闭源的,但有对应但API可供二次开发),可以在几个小时内部署好的一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support就是对Hadoop的技术支持;
      Cloudera的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大数据的Impala项目。
      CDH官方地址:https://www.cloudera.com/

    3>.HDP(Hortonworks Data Platform)
      Hortonworks公司发行版,其社区版所有源代码也开源,但企业则闭源收费。
      2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建;
      公司成立之初最吸纳了大约25名至30名专门研究Hadoop的雅虎工程师,上述工程师均在2005年开始协助雅虎开发Hadoop,贡献了Hadoop 80%的代码;
      雅虎工程副总裁,雅虎Hadoop开发团队负责人Eric Baldeschwieler 出任Hortonworks的首席执行官;
      Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目还包括Ambari,一款开源的安装呵呵管理系统;
      HCatalog,一个元数据管理系统,Hcatalog现已集成到Facebook开源的Hive中。Hortonworks的Stringer开创性的极大的优化了Hive项目。Hortonworks为入门提供了一个非常好的,易于使用的沙盒;
      Hortonworks开发很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Windows Server和Windows Azure在内的Microsoft Windows平台上本地运行。定价以集群为基础,每10个节点每年为12500美元;
      2018年10月,均为开源平台的Cloudera与Hortonworks公司宣布他们以52亿美元的价格合并。两家公司称合并后公司将拥有2500客户、7.2亿美元收入和5亿美元现金,且没有债务。
      HDP官方地址:https://hortonworks.com/

    4>.MapR
      2011年6月,在Hadoop 2011峰会上,MapR的创始人M.C. Srivas做了名为《Design, Scale and Performance of MapR's Distribution for Hadoop》的演讲,比较详细的介绍了MapR设计原则,部分实现细节以及MapR的性能,外界也第一次从内部了解MapR Hadoop。
      整个MapR的核心是其分布式NameNode, 在MapR的设计中,分布式的NameNode又被称作Container,和Hadoop原始设计中的Namenode不一样的是,Container不仅维护了用户文件的meta data,也维护数据块。和其它的Hadoop发型版本相比,它的优势在于他支持linux,unix,hdfs文件系统。并且在容灾方面相比其它的版本来说更好一些。据说比HDFS读写快2-5倍,还具有镜像,快照等特性,但用的人少。
      官方文档:https://mapr.com/docs/61/。

    5>.Amazon EMR
      这个是亚马逊推出的一个托管的方案。它可以轻松运行和扩展 Apache Spark、Hadoop、HBase、Presto、Hive 以及其他大数据框架。
      Amazon EMR 提供的托管 Hadoop 框架可以让您快速、轻松、经济高效地在多个动态可扩展的 Amazon EC2 实例中处理大量数据。您还可以运行其他常用的分布式框架(例如 EMR 中的 Apache Spark、HBase、Presto和 Flink),以及与其他 AWS 数据存储服务(例如 Amazon S3 和 Amazon DynamoDB)中的数据进行交互。EMR Notebooks 基于热门的 Jupyter Notebook,可为即席查询和探索性分析提供开发和协作环境。
      官方文档:https://docs.aws.amazon.com/zh_cn/emr/?id=docs_gateway。

  二.Spark的版本选择
    比较知名的Spark发行版本有:
    1>.Apache Spark
      社区原声版本,由Apache 基金会维护,是其他商业公司发行版本的基础。

    2>.Databricks Spark
      Databricks公司发行版,其社区版所有源代码均开源,内置企业版本,增加安全,审计,云等方面的支持。
      Databricks Spark官方地址:https://databricks.com/

    3>.Hadoop企业发行版
      各大Hadoop企业发行版,比如HDP和CDH,均内置了对Spark的支持。

  三.各个发行版本的区别
    各个发行版本之间统一系统对外使用和接口的方式完全兼容的,不同之处在于他们引入了不同系统解决某个场景的问题,比如CDH选择Impala解决交互式分析问题,而HDP选择Hive On Tez;CDH引入了Cloudera Navigator和Sentry解决安全问题,而HDP则使用Ranger和Knox。

    另外,他们均提供了个性化的运维和管理工具等。在线上环境部署私有Hadoop与Spark集群时,为了避免各个系统之间兼容性(比如HBase不同版本和Hadoop版本之间的兼容性)带来的麻烦,建议大家直接选用商业公司发行版。当然,我们在上课的时候会会给大家讲免费版本的简单使用。

  温馨提示:
    上面介绍的开源软件都是国外的,其实国内也有做开源大数据平台的公司叫"星环科技",只不过它在国际上不是特别的火,官方地址:https://www.transwarp.cn/
    国内很多大厂也有专门的大数据平台解决方案,比如阿里巴巴有一个阿里云的产品,专门提供SAAS层的服务,腾讯公司的蓝鲸产品也继承了大数据平台的SAAS层的服务,当然还有一些不错的互联网企业,比如Ucloud公司也有相应的大数据平台的SAAS层的服务。
    后续我们会分享一些国内大厂的大数据解决方案。

 

三.Hadoop组成

1>.Hadoop组件概述

  Hadoop HDFS: 
    一个高可用,高吞吐量的分布式文件系统,提供数据存储;

  Hadoop MapReduce:
    一个分布式的离线并行计算框架;

  Hadoop YARN:
    作业调度与集群资源管理的框架,提供资源调度(管理CPU的vcore和物理内存);

  Hadoop Common:
    共同模块,支持其他模块的工具模块。

2>.HDFS架构概述

  随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。

  我们在大数据领域常用的就是HDFS,HDFS知识分布式文件管理系统的一种,还有很多分布式文件系统,比如Fastdfs,MogileFS,Ceph等。

  HDFS的定位:
    HDFS全称为"Hadoop Distributed File System",它是一个文件系统,用于存储文件,通过目录树来定位文件,这一点它和Linux的目录非常像,如果你熟悉Linux操作系统,学习它来就非常的得心应手。
    HDFS是分布式的文件系统,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
   
  HDFS的使用场景:
    适合一次写入,多次读取的场景,且不支持文件的修改。适合用来做数据分析,并不适合用作来网盘应用。

  HDFS的优缺点:
    优点:
      高容错性:
        数据自动保存多个副本,它通过添加副本的形式,提高容错性;
        某一个副本丢失以后,它可以自动恢复。
      适合处理大数据:
        数据规模:
          能够处理数据规模达到GB,TB,甚至PB级别的数据;
        文件规模:
          能够处理百万规模以上的文件数量,数量相当大。
      可构建在廉价机器上,通过多副本机制,提高可用性。
    缺点:
      不适合低延迟数据访问,比如毫秒级的存储数据是做不到的。
      无法对高效的大量小文件进行存储:
        存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息,这样是不可取的,因为NameNode的内存总是有限的;
        小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
      不支持并发写入,文件是随机修改:
        一个文件只能有一个写,不允许多个线程同时写;
        仅支持数据追加(append),不支持文件的随机修改。

  HDFS的组成架构:  
    NameNode(简称NN)
      负责存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode信息等等。
      我们可以理解它就是Master,他是一个主管,管理者,它具有以下功能:
        管理HDFS的名称空间;
        配置副本策略;
        管理数据块(Block)映射信息;
        处理客户端读写请求;
    DataNode(简称DN)
      负责在本地文件系统存储文件块数据,以及块数据的校验和。换句话说,它负责存储真实数据。
      就是Slave。NameNode下达命令,DataNode执行实际的操作,它具有以下功能:
        存储实际的数据块;
        执行数据块的读/写操作;

    Client
      就是客户端,它具有以下功能:
        文件切分,文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;
        与NameNode交互,获取文件的位置信息;
        与Datanode交互,读取或者写入数据;
        Client提供一些命令来管理HDFS,比如NameNode格式化;
        Client可以通过一些命令来访问HDFS,比如对HDFS增删改查操作;

    Secondary NameNode(简称2nn)
      负责用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
      并非NameNode的热备,当NameNode刮掉的时候,它并不能马上替换NameNode并提供服务,它具有以下功能:
        助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode;
        在紧急情况下,可辅助恢复NameNode;
 
  HDFS文件块大小
    HDFS中文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop2.x版本是128M,在Hadoop1.x版本中是64M。
    为什么Hadoop2.x版本中是128MB呢?
      如果寻址时间为10ms,即查找到目标的bolck的时间为10ms;
      寻址时间为传输时间的1%时,则为最佳状态。因此,传输时间=寻址时间/0.01=10ms/0.01=1000ms=1s
      而目前磁盘的传输速度普遍为100MB/s
      因此block的大小为=1s*100MB/s=100M
      这个100M在外国的程序员无法用二进制表示,于是开发人员为了方便好记就找了一个二进制和改制相似的数字设置为默认值,因此Hadoop默认的大小为128MB。当然,这是为脑补出来的答案,哈哈哈~

    为什么块的大小不能设置太小,也不能设置太大?
      HDFS的块设置太小,会增加寻址时间,呈现一直在找块的开始位置;
      如果块设置的太大,从磁盘传输数据的时间会明显大雨定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。

    总结:
      HDFS块的大小设置,主要取决于磁盘传输速度。随着科技的发展,磁盘的速度在不久的将来也会有所提高的,而Hadoop的版本默认值也会在不断的变大,这是很合理的。
      关于如何测试磁盘的读写速度,可参考我之前的笔记。
 
    博主推荐阅读:
      http://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#HDFS_Architecture
      https://www.cnblogs.com/yinzhengjie/p/9935478.html

3>.YARN架构概述

  ResourceManager(简称rm)
    负责处理客户端请求,启动/监控ApplicationMaster,监控NodeManager,资源分配与调度。

  NodeManager(简称nm)
    负责单个节点上的资源管理,处理来自ResourceManager的命令,处理来自ApplicationMaster的命令。

  ApplicationMaster
    负责数据切分,为应用程序申请资源并分配给内部的任务,任务监控与容错。

  Container
    是YARN中的运行环境资源抽象,它封装了某个节点上的多个维度资源,比如CPU,内存,磁盘,网络等 

4>.MapReduce架构概述

  MapReduce只是一个计算思想,它没有具体的结构,MapReduce将计算过程分为两个阶段:即Map和Reduce(当然你在跟源码的时候发现其实在Map和Reduce阶段的前后还有很多细节!后期的文章会详细介绍的)
    
  Map阶段并行处理输入数据
    
  Reduce阶段对Map结构进行汇总

5>.Hadoop1.x,Hadoop2.x,Hadoop3.x的区别

  在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源调度,耦合性较大;

  在Hadoop2.x时代,最吸引眼球的是YARN组件和HDFS HA功能,YARN只负责资源调度,MapReduce只负责运算。不仅如此,Hadoop 2.x还新增了集群键数据拷贝,小文件归档等功能。

  而Hadoop3.x在Hadoop2.x的基础上做相应的优化,并附带了一些新的特性。   MapReduce1.x架构设计:     
1>在hadoop1.x,MapReduce不仅做作业的计算,还做资源的调度。     2>它是一个主从架构,由一个主节点Jobtrack和多个从节点Tasktrack组成。     3>真正执行任务的是tasktrack中运行着的maptask和reducetask。   mapreduce2.x架构设计     1>.客户端向ResourceManager申请提交作业,ResourceManager中的Applications Manager给客户端返回一个作业编号及作业资源存放路径,客户端拿到返回信息后计算数据切片并将数据切片信息及配置信息和jar包文件保存在作业资源存放路径。     2>.资源保存成功后客户端会向ResourceManager中的Applications Manager申请任务的第一个container,并且要求对应的NodeManager在该container内启动应用程序的MRApplicationMaster。     3>.MRApplicationMaster启动成功后向ResourceManager中的Applications Manager注册自己,注册成功即采用轮询的方式通过rpc协议向ResourceManager中的Resource scheduler申请应用程序的各个task执行所需要的资源。申请成功则到对应的NodeManager上要求它分配contatiner,并在container内启动task。     4>.在整个应用程序执行期间,各个task通过rpc协议向MRApplicationMaster报告task执行状态,用户也可以通过rpc向MRApplicationMaster查询任务的运行情况。所有task结束,MRApplicationMaster向ResourceManager中的Applications Manager申请注销,注销完成任务结束。     5>.每个container中只运行一个task,要么是maptask,要么是reducetask。当然也可以是MRAM,每个应用程序MRAM只有一个。 Hadoop3.x新特性     1>.Java最低版本要求从Java7更改成Java8。     2>.HDFS支持纠删码,将原本3倍的存储消耗降低到1.4倍。       (1)在原始数据中加入新的校验数据,使得各个部分的数据产生关联性。       (2)在一定范围的数据出错情况下,通过纠删码技术都可以进行恢复。       (3)既耗网络又耗CPU,适用于冷数据集群。     3>.Hadoop的Shell脚本被重写。     4>.MapReduce任务级本地优化。       (1)MapReduce添加了Map输出collector的本地实现。       (2)对于shuffle密集型的作业来说,这将会有30%以上的性能提升。     5>.支持多于2个的NameNode。     6>.多个服务的默认端口被改变。     7>.提供了单节个磁盘存储不均的情况的解决方案。     8>.重写守护进程以及任务的堆内存管理。

6>.大数据生态体系

  下图摘自互联网,我觉得话这个图的人对大数据的组件了解的非常熟悉了,很清晰的画出了大数据生态体系,尽管有一些组件已经过时,有一些主流组件也没有画进去,估计作者是在2018年之前画的。

  离线计算:
    MapReduce,Spark

  实时计算 + 流处理组件:
    Kafka,Storm,Spark Streaming,Fink。

  温馨提示:
    Storm是一个纯流式计算组件,比Spark Streaming的实时性还要高,但吞吐量相对较低,随着数据量的增大,Storm逐渐被淘汰在人们的视野中,取而代之的是后起之秀Flink。
    Spark是一个可用于离线的批处理计算组件,也可以用于实时流式计算,但本质上依旧是批处理思想,因此延迟性没有Storm强,但吞吐量要比Storm高,而且Spark还支持有状态流的数据计算;
    Fink也是一个纯流式计算组件,Fink的设计借鉴了Spark的设计架构,因此在理论上处理性能上要比Storm更快,国内很多大厂已经纷纷在使用Fink。

 

图中涉及的技术名词解释如下:
  Sqoop:
    Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
  
  Flume:
    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

  Kafka:
    Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
    (1)通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
    (2)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
    (3)支持通过Kafka服务器和消费机集群来分区消息。
    (4)支持Hadoop并行数据加载。

  Storm:
    Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。

  Spark:
    Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。

  Oozie:
    Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。

  Hbase:
    HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。

  Hive:
    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

  R语言:
    R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

  Mahout:
    Apache Mahout是个可扩展的机器学习和数据挖掘库。

  ZooKeeper:
    Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
图中涉及的技术名词解释
原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12417161.html