大数据框架学习:从 Hadoop 到 SparkHadoop

1. Hadoop是什么Hadoop软件库是一个利用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理的框架。特点:部署成本低、扩展方便、编程模型简单。Hadoop 实现了在行业标准的服务器上进行可靠、可缩放的分布式计算,让你能够以较低的预算跟踪数 PB 以上的数据,而不必需要超级计算机和其他昂贵的专门硬件。Hadoop 还能够从单台服务器扩展到数千台计算机,检测和处理应用程序层上的故障,从而提高可靠性。

2. Hadoop的组成部分 (Hadoop 2.0)1、Hadoop Common: The common utilities that support the other Hadoop modules.2、Hadoop Distributed File System (HDFS:tm:): A distributed file system that provides high-throughput access to application data.3、Hadoop YARN: A framework for job scheduling and cluster resource management.4、Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.我们平常接触比较多的也是 HDFS、YARN、MapReduce;具体的场景,HDFS,比如通过客户端访问集群, YARN,MapReduce,我们看提交的任务的执行情况。

3. Hadoop架构Hadoop的发展 Hadoop1.0 vs Hadoop 2.0在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDFS NameNode 和 JobTracker都存在着单点问题,这其中以NameNode的单点问题尤为严重。因为NameNode保存了整个HDFS的元数据信息,一旦NameNode挂掉,整个HDFS就无法访问,同时Hadoop生态系统中依赖于HDFS的各个组件,包括MapReduce、Hive、Pig以及HBase等也都无法正常工作,并且重新启动NameNode和进行数据恢复的过程也会比较耗时。这些问题在给Hadoop的使用者带来困扰的同时,也极大地限制了Hadoop的使用场景,使得Hadoop在很长的时间内仅能用作离线存储和离线计算,无法应用到对可用性和数据一致性要求很高的在线应用场景中。 Hadoop1.0HDFS由一个NameNode和多个DataNode 组成, MapReduce的执行过程由一个JobTracker和多个TaskTracker 组成。Hadoop2.0针对Hadoop1.0中的单NameNode制约HDFS的扩展性问题,提出了HDFSFederation(联盟),它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展,同时它彻底解决了NameNode单点故障问题。它将JobTracker中的资源管理和作业控制功能分开,分别由组件ResourceManager和ApplicationMaster实现,其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序,进而诞生了全新的通用资源管理框架YARN。基于YARN,用户可以运行各种类型的应用程序(不再像1.0那样仅局限于MapReduce一类应用),从离线计算的MapReduce到在线计算(流式处理)的Storm等YARN不仅限于MapReduce一种框架使用,也可以供其他框架使用,比如Tez、Spark、Storm。图 HDFS1.0图 HDFS2.0Hadoop 1.0Hadoop 2.0这个图里面有Hadoop的构成,以及Hadoop相关项目的一些构成,比如Hive、Pig,Spark。它们都是依赖于MapReduce之上的,比如Hive Sql 会转换成 MapReduce程序去执行。

4. MapReduce原理及过程传统的分布式程序设计(如MPI)非常复杂,用户需要关注的细节非常多,比如数据分片、数据传输、节点间通信等,因而设计分布式程序的门槛非常高。Hadoop的一个重要设计目标便是简化分布式程序设计,将所有并行程序均需要关注的设计细节抽象成公共模块并交由系统实现,而用户只需专注于自己的应用程序逻辑实现,这样简化了分布式程序设计且提高了开发效率。Map Task 先将对应的 split 迭代解析成一个个 key/value 对,依次调用用户自定义的map()函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分成若干个partition,每个 partition 将被一个 Reduce Task 处理。Reduce Task 执行过程。该过程分为三个阶段①从远程节点上读取MapTask中间结果(称为“Shuffle阶段”);②按照 key 对key/value对进行排序(称为“Sort阶段”);③依次读取,调用用户自定义的 reduce() 函数处理,并将最终结果存到HDFS上(称为“Reduce 阶段”)。 一般的场景是需要多个MapReduce进行迭代计算(如HiveSQL),Map Reduce过程都会有写磁盘的操作,而且两个MapReduce之间还需要访问HDFS。 任务提交 Hadoop 1.0 Yarn 5. Hive HQL 原理 大家因为相互选择走到了一起,然后成就了彼此。但不是天生就是为了彼此。 HiveQL通过CLI/webUI或者thrift、odbc或jdbc接口的外部接口提交,经过complier编译器,运用Metastore中的云数据进行类型检测和语法分析,生成一个逻辑方案(logicalplan),然后通过简单的优化处理,产生一个以有向无环图DAG数据结构形式展现的map-reduce任务 整个编译过程分为六个阶段: 1、Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree; 2、遍历AST Tree,抽象出查询的基本组成单元QueryBlock; 3、遍历QueryBlock,翻译为执行操作树OperatorTree; 4、逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量; 5、遍历OperatorTree,翻译为MapReduce任务; 6、物理层优化器进行MapReduce任务的变换,生成最终的执行计划。 TDW Hive 转换为 MapReduce举例: TDW Hive Sql 转化为 MapReduce,可以在IDE里先看下SQL的执行计划,每个Stage都是由一个MapReduce组成,当然,一个Stage也可能没有Reduce。 两个Stage之间,上一个reduce的数据会写到HDFS上。 6、DAG计算框架 Tez 对于需要多个MapReduce作业迭代计算的场景,因为每个MapReduce都要读写HDFS会造成磁盘和网络IO的浪费,而Tez作为一个DAG框架,可以将多个有依赖的MapReduce作业转化为一个作业,从而提高性能。 Spark 基于内存的计算框架 1、核心概念 RDD RDD 弹性分布式数据集(RDD,Resilient Distributed Datasets),是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。RDD还提供了一组丰富的操作来操作这些数据。Spark对于数据的处理,都是围绕着RDD进行的。 RDD只能通过在稳定的存储器或其他RDD的数据上的确定性操作来创建。 val hdfsURL="hdfs://**/**/**/**/ds=20170101/*gz" val hdfsRdd = sparkSession.sparkContext.textFile(hdfsURL) 2、RDD的操作:RDD转换和动作 Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。 Action 行动算子:这类算子会触发 SparkContext 提交 Job 作业。 3、执行过程 宽窄依赖 窄依赖允许在一个集群节点上以流水线的方式(pipeline)计算所有父分区。例如,逐个元素地执行map、然后filter操作;而宽依赖则需要首先计算好所有父分区数据,然后在节点之间进行Shuffle,这与MapReduce类似。第二,窄依赖能够更有效地进行失效节点的恢复,即只需重新计算丢失RDD分区的父分区,而且不同节点之间可以并行计算;而对于一个宽依赖关系的Lineage图,单个节点失效可能导致这个RDD的所有祖先丢失部分分区,因而需要整体重新计算。 4、 与MapReduce对比,提升效率的地方 MapReduce是一个Map和一个Reduce组成一个stage,当然也有没有reduce的stage,(如简单的不涉及到reduce的查询) Spark也类似,每一个宽依赖(需要shuffle,类似Reduce)的地方就是两个Stage的分界线。 可以看到 Spark的stage思想跟 Tez的很像,不像MapReduce那样必须成对的MapReduce一起出现,可以在map阶段做很多事情,减少不必要的网络IO和写HDFS的时间。同时一个Stage内,数据的处理也是基于内存的,减少了本地磁盘的IO。 5、 DataSet 结构化的RDD 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观RDD,由于无从得知所存数据元素的具体内部结构,SparkCore只能在stage层面进行简单、通用的流水线优化。 6、Spark 使用 SparkSQL的前身是Shark,而Shark的前身是Hadoop中的hive。 受限于络子,目前好像只能用Scala开发。 Python Sql的任务,如果SQL支持Spark SQL的语法,会使用Spark引擎执行任务。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容