实验123因加入班级博客迟了点没及时提交,实验7暂缓在家忘记提交了,不好意思1.大数据概述 

 

 

1.列举Hadoop生态的各个组件及其功能、以及各个组件之间的相互关系,以图呈现并加以文字描述。

 

 

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive

生态系统,顾名思义就是很多组件组成的一个生态链,经过多年的发展,Hadoop生态系统不断完善和成熟,目前已经包括了多个子项目,除了核心的HDFS和MapReduce以外,Hadoop生态系统还包括要ZoopKer、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari等功能组件。这些组件几乎覆盖了目前业界对数据处理的所有场景。

 

HDFS

是hadoop体系中数据存储管理的基础。他是一个高度容错的系统,能检测和应对硬件故障。

mapreduce

mapreduce是一种计算模型,用于处理大数据量的计算。其中map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。

 hive

由Facebook开源,最初用于解决海量结构化的日志数据统计问题。

hbase

hbase是一个针对结构化数据的可伸缩,高可靠,高性能,分布式和面向列的动态模式数据库。

zookeeper

解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

sqoop

sqoop是sql-to-hadoop的缩写,主要用于传统数据库和hadoop之间传输数据。

数据的导入和导出本质上是mapreduce程序,充分利用了MR的并行化和容错性。

pig

定义了一种数据流语言-pig latin,将脚本转换为mapreduce任务在hadoop上执行。

通常用于离线分析。

mahout(数据挖掘算法库)

mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

flume

cloudera开源的日志收集系统,具有分布式,高可靠,高容错,易于定制和扩展的特点。

2.对比Hadoop与Spark的优缺点。

 

(1)Spark基于RDD,数据并不存放在RDD中,只是通过RDD进行转换,通过装饰者设计模式,数据之间形成血缘关系和类型转换;

(2)Spark用scala语言编写,相比java语言编写的Hadoop程序更加简洁;

(3)相比Hadoop中对于数据计算只提供了Map和Reduce两个操作,Spark提供了丰富的算子,可以通过RDD转换算子和RDD行动算子,实现很多复杂算法操作,这些在复杂的算法在Hadoop中需要自己编写,而在Spark中直接通过scala语言封装好了,直接用就ok;

(4)Hadoop中对于数据的计算,一个Job只有一个Map和Reduce阶段,对于复杂的计算,需要使用多次MR,这样涉及到落盘和磁盘IO,效率不高;而在Spark中,一个Job可以包含多个RDD的转换算子,在调度时可以生成多个Stage,实现更复杂的功能;

(5)Hadoop中中间结果存放在HDFS中,每次MR都需要刷写-调用,而Spark中间结果存放优先存放在内存中,内存不够再存放在磁盘中,不放入HDFS,避免了大量的IO和刷写读取操作;

(6)Hadoop适合处理静态数据,对于迭代式流式数据的处理能力差;Spark通过在内存中缓存处理的数据,提高了处理流式数据和迭代式数据的性能;

(7)Spark对标于Hadoop中的计算模块MR,但是速度和效率比MR要快得多;

(8)Spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作,它只是一个计算分析框架,专门用来对分布式存储的数据进行计算处理,它本身并不能存储数据;

(9)Spark可以使用Hadoop的HDFS或者其他云数据平台进行数据存储,但是一般使用HDFS;

(10)Spark可以使用基于HDFS的HBase数据库,也可以使用HDFS的数据文件,还可以通过jdbc连接使用Mysql数据库数据;Spark可以对数据库数据进行修改删除,而HDFS只能对数据进行追加和全表删除;

 

 

3.如何实现Hadoop与Spark的统一部署?

一方面,由于Hadoop生态系统中的一些组件所实现的功能,目前还是无法由Spark取代的,比如,Storm可以实现毫秒级响应的流计算,但是,Spark则无法做到毫秒级响应。另一方面,企业中已经有许多现有的应用,都是基于现有的Hadoop组件开发的,完全转移到Spark上需要一定的成本。因此,在许多企业实际应用中,Hadoop和Spark的统一部署是一种比较现实合理的选择。

由于Hadoop MapReduce、HBase、Storm和Spark等,都可以运行在资源管理框架YARN之上,因此,可以在YARN之上进行统一部署。

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_02

2.安装Spark与Python练习

1检查基础环境hadoop,jdk

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_03

2配置

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_04

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_05

3试运行python代码

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_06

二python编程练习:

准备文本文件:world.txt

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_07

读文件,预处理:大小写,标点符号,停用词,分词 main.py

1


with open("Under the Red Dragon.txt""r") as f: text=f.read() text = text.lower() for ch in '!@#$%^&*(_)-+=\\[]}{|;:\'\"`~,<.>?/': text=text.replace(ch," ") words = text.split() # 以空格分割文本 stop_words = [] with open('stop_words.txt','r') as f: # 读取停用词文件 for line in f: stop_words.append(line.strip('\n')) afterwords=[] for in range(len(words)): z=1 for in range(len(stop_words)): if words[i]==stop_words[j]: continue elseif z==len(stop_words): afterwords.append(words[i]) break z=z+1 continue


  

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_08

统计每个单词出现的次数,按词频大小排序,结果写文件 main.py

counts = {} for word in afterwords: counts[word] = counts.get(word, 0) + 1 items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) f1 = open('count.txt', 'w') for i in range(len(items)): word, count = items[i] f1.write(word+" "+str(count)+"\n")

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_09

输出结果

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_10

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_11

三、使用PyCharm搭建编程环境:Ubuntu 16.04 + PyCharm + spark

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_12

 

3.Spark设计与运行原理,基本操作

1.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_13

2、请详细阐述Spark的几个主要概念及相互关系

 

 Master, Worker;  RDD,DAG; Application, job,stage,task; driver,executor,Claster Manager

 

1.Task(任务):RDD中的一个分区对应一个task,task是单个分区上最小的处理流程单元

 

2.TaskSet(任务集):一组关联的,但相互之间没有Shuffle依赖关系的Task集合。

 

3.Stage(调度阶段):一个taskSet对应的调度阶段,每个job会根据RDD的宽依赖关系被切分很多Stage,每个stage都包含 一个TaskSet。

 

4.job(作业):由Action算子触发生成的由一个或者多个stage组成的计算作业。

 

5.application:用户编写的spark应用程序,由一个或者多个job组成,提交到spark之后,spark为application分派资源,将程序转换并执行。

 

6.DAGScheduler:根据job构建基于stage的DAG,并提交stage给TaskScheduler。

 

7.TaskScheduler:将Taskset提交给Worker Node集群运行并返回结果。

 

 

 

关系:

 

1,Application

 

一个SparkContext就是一个application,通过spark-submit脚本提交给集群。

 

2,DAG

 

RDD依赖组成的有向无环图,来表明一个Application中RDD的依赖关系。

 

3,Job

 

(1)没有检查点的正常情况下一个行动算子触发一个Job。

 

(2)如果行动算子的依赖链中有检查点(checkpoint),则至少有一个额外的Job来专门执行检查点功能。如果有多个checkpoint,需要根据下面参数来确定checkpoint Job的数量:spark.checkpoint.checkpointAllMarkedAncestors

 

如果值为true,则所有检查点都会执行,父RDD的checkpoint Job先执行。

 

否则只执行最靠后的RDD的checkpoint Job任务。

 

(3)主线程是串行阻塞式提交Job的,一个行动操作Job执行完毕后执行其依赖链中的checkpoint Job;然后执行下一个行动操作Job及其checkpoint Job。

 

4 Stage

 

(1)stage分为两类:ShuffleMapStage和ResultStage

 

(2)Spark根据ShuffleDependency来划分Stage,一个ShuffleDependency依赖关系的父RDD为前一个Stage的结束,子RDD(都是ShuffledRDD)下一个stage的开始。一个ShuffleDependency一个ShuffleMapStage,另外还会有一个ResultStage。

 

(3)一个Job stage的总数=零个或者多个ShuffleMapStage+一个ResultStage。

 

(4)stage之间有依赖关系,按照依赖关系的顺序串行执行。

 

5 Task

 

(1)Task分为两类:ShfflueMapTask和ResultTask。

 

(2)每个ShuffleMapStage都有一个或者多个ShfflueMapTask,数量为ShuffleMapStage中最后一个RDD的分区数量;

 

(3)每个ResultStage都有一个或者多个ResultStage,数量为ShuffleMapStage中最后一个RDD的分区数量。

 

(4)同一个stage的task之间并行执行,不同stage的task遵循stage的顺序。

 

(5)只有Task才会发送到spark Excutor中执行,涉及到数据计算。其它的概念都只存在于ApplicationMaster中。

3.在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。

 

my.txt

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_14

 

运行spark程序

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_15

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_16

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_17

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_18

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_19

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_20

RDD转换关系图

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_21

  

 

 

7Spark SQL

1.分析SparkSQL出现的原因,并简述SparkSQL的起源与发展。

SparkSQL出现的原因:为了替代Mapreduce,解决Mapreduce计算短板。

SparkSQL的起源与发展:Hadoop刚开始出来的时候,使用的是hadoop自带的分布式计算系统MapReduce,但是MapReduce的使用难度较大,所以就开发了Hive,Hive编程用的是类SQL的HQL的语句,这样编程的难度就大大的降低了,Hive的运行原理就是将HQL语句经过语法解析、逻辑计划、物理计划转化成MapReduce程序执行。当Spark出来以后,Spark团队也开发了一个Shark,就是在Spark集群上安装一个Hive的集群,执行引擎是Hive转化成Mapreduce的执行引擎,这样的框架就是Hive  on  Spark,但是这样是有局限性的,因为Shark的版本升级是依赖Hive的版本的,所以2014年7月1日spark团队就将Shark转给Hive进行管理,Spark团队开发了一个SparkSQL,这个计算框架就是将Hive on Spark的将SQL语句转化为Spark RDD的执行引擎换成自己团队从新开发的执行引擎。

(1)1.0版本以前:Hive on Spark   Shark(2)1.0.x版本:Spark SQL  Alpha版本(测试版本,不建议商业项目使用),这个版本让Spark升为了Apache的顶级项目。(3)1.3.x版本:SparkSQL  DataFrame、Release(成熟,可以使用)(4)spark 1.5.x版本:钨丝计划(底层代码的优化)(5) spark 1.6.x版本:DataSet(alpha版本)(6)Spark 2.x.x版本:DataSet(正式的)、Structrued Streaming

2. 简述RDD 和DataFrame的联系与区别。

联系:(1)都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利(2)都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action才会运算(3)都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出(4)三者都有partition的概念(5)三者有许多共同的函数,如filter,排序等

区别:(1)RDD是分布式的java对象的集合,但是对象内部结构对于RDD而言却是不可知的。(2)DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息,相当于关系数据库中的一张表

3.1 PySpark-DataFrame创建:

spark.read.text(url)

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_22

 

spark.read.json(url) 

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_23

 

spark.read.format("text").load("people.txt")

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_24

 

spark.read.format("json").load("people.json")

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_25

 

描述从不同文件类型生成DataFrame的区别。

  txt文件:创建的DataFrame数据没有结构

    json文件:创建的DataFrame数据有结构

 

  用相同的txt或json文件,同时创建RDD,比较RDD与DataFrame的区别。

    1.RDD在创建之后,你知道有这个类,但是你不知道他的内部结构的,DataFrame是以列式存储,它有schema是可以知道的。    2.DataRrame比RDD的执行效率要高一点,因为在大数据的处理中,RDD即使用mappartition或者foreachRDD都要消耗不少的core,但是DataFrame他可以进行sql操作,先过滤掉一部分数据,在RDD中是不好实现的。

 

3.2 DataFrame的保存

df.write.text(dir)

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_26

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_27

 

df.write.json(dri)

 

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_28

   

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_29

 

df.write.format("text").save(dir)

 

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_30

   

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_31

 

df.write.format("json").save(dir)

 

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_32

   

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_33

 

4.选择题:

1单选(2分)关于Shark,下面描述正确的是:C

A.Shark提供了类似Pig的功能

B.Shark把SQL语句转换成MapReduce作业

C.Shark重用了Hive中的HiveQL解析、逻辑执行计划翻译、执行计划优化等逻辑

D.Shark的性能比Hive差很多

 

2单选(2分)‏下面关于Spark SQL架构的描述错误的是:D

A.在Shark原有的架构上重写了逻辑执行计划的优化部分,解决了Shark存在的问题

B.Spark SQL在Hive兼容层面仅依赖HiveQL解析和Hive元数据

C.Spark SQL执行计划生成和优化都由Catalyst(函数式关系查询优化框架)负责

D.Spark SQL执行计划生成和优化需要依赖Hive来完成

 

3单选(2分)要把一个DataFrame保存到people.json文件中,下面语句哪个是正确的:A

A.df.write.json("people.json")

B.df.json("people.json")

C.df.write.format("csv").save("people.json")

D.df.write.csv("people.json")

 

4多选(3分)‎Shark的设计导致了两个问题:AC

A.执行计划优化完全依赖于Hive,不方便添加新的优化策略

B.执行计划优化不依赖于Hive,方便添加新的优化策略

C.Spark是线程级并行,而MapReduce是进程级并行,因此,Spark在兼容Hive的实现上存在线程安全问题,导致Shark不得不使用另外一套独立维护的、打了补丁的Hive源码分支

D.Spark是进程级并行,而MapReduce是线程级并行,因此,Spark在兼容Hive的实现上存在线程安全问题,导致Shark不得不使用另外一套独立维护的、打了补丁的Hive源码分支

 

5 多选(3分)下面关于为什么推出Spark SQL的原因的描述正确的是:AB

A.Spark SQL可以提供DataFrame API,可以对内部和外部各种数据源执行各种关系操作

B.可以支持大量的数据源和数据分析算法,组合使用Spark SQL和Spark MLlib,可以融合传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力

C.Spark SQL无法对各种不同的数据源进行整合

D.Spark SQL无法融合结构化数据管理能力和机器学习算法的数据处理能力

 

6多选(3分)下面关于DataFrame的描述正确的是:ABCD

A.DataFrame的推出,让Spark具备了处理大规模结构化数据的能力

B.DataFrame比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能

C.Spark能够轻松实现从MySQL到DataFrame的转化,并且支持SQL查询

D.DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息

 

7多选(3分)‏要读取people.json文件生成DataFrame,可以使用下面哪些命令:AC

A.spark.read.json("people.json")

B.spark.read.parquet("people.json")

C.spark.read.format("json").load("people.json")

D.spark.read.format("csv").load("people.json")

 

8单选(2分)以下操作中,哪个不是DataFrame的常用操作:D

A.printSchema()

B.select()

C.filter()

D.sendto()

 

9多选(3分)‏从RDD转换得到DataFrame包含两种典型方法,分别是:AB

A.利用反射机制推断RDD模式

B.使用编程方式定义RDD模式

C.利用投影机制推断RDD模式

D.利用互联机制推断RDD模式

 

10多选(3分)使用编程方式定义RDD模式时,主要包括哪三个步骤:ABD

A.制作“表头”

B.制作“表中的记录”

C.制作映射表

D.把“表头”和“表中的记录”拼装在一起

 

4. PySpark-DataFrame各种常用操作

基于df的操作:

打印数据 df.show()默认打印前20条数据

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_34

 

打印概要 df.printSchema()

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_35

 

查询总行数 df.count()

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_36

 

df.head(3) #list类型,list中每个元素是Row类

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_37

 

输出全部行 df.collect() #list类型,list中每个元素是Row类

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_38

 

查询概况 df.describe().show()

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_39

 

取列 df[‘name’], df.name, df[1]

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_40

 

选择 df.select() 每个人的年龄+1

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_41

 

筛选 df.filter() 20岁以上的人员信息

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_42

 

筛选年龄为空的人员信息

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_43

 

分组df.groupBy() 统计每个年龄的人数

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_44

 

排序df.sortBy() 按年龄进行排序

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_45

 

基于spark.sql的操作:

创建临时表虚拟表 df.registerTempTable('people')

spark.sql执行SQL语句

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_46

 

5. Pyspark中DataFrame与pandas中DataFrame

分别从文件创建DataFrame

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_47

 

比较两者的异同 

  1.地址写法不同

  2.pyspark的df要通过操作查看结果

  3.pandas的df自动加索引

pandas中DataFrame转换为Pyspark中DataFrame

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_48

 

Pyspark中DataFrame转换为pandas中DataFrame

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_49

 

6.从RDD转换得到DataFrame

6.1 利用反射机制推断RDD模式

创建RDD sc.textFile(url).map(),读文件,分割数据项

每个RDD元素转换成 Row

由Row-RDD转换到DataFrame

 

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_50

 

 

6.2 使用编程方式定义RDD模式

#下面生成“表头” 

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_51

#下面生成“表中的记录” 

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_52

#下面把“表头”和“表中的记录”拼装在一起

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_53

 

1.列举Hadoop生态的各个组件及其功能、以及各个组件之间的相互关系,以图呈现并加以文字描述。

 

 

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive

生态系统,顾名思义就是很多组件组成的一个生态链,经过多年的发展,Hadoop生态系统不断完善和成熟,目前已经包括了多个子项目,除了核心的HDFS和MapReduce以外,Hadoop生态系统还包括要ZoopKer、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari等功能组件。这些组件几乎覆盖了目前业界对数据处理的所有场景。

 

HDFS

是hadoop体系中数据存储管理的基础。他是一个高度容错的系统,能检测和应对硬件故障。

mapreduce

mapreduce是一种计算模型,用于处理大数据量的计算。其中map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。

 hive

由Facebook开源,最初用于解决海量结构化的日志数据统计问题。

hbase

hbase是一个针对结构化数据的可伸缩,高可靠,高性能,分布式和面向列的动态模式数据库。

zookeeper

解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

sqoop

sqoop是sql-to-hadoop的缩写,主要用于传统数据库和hadoop之间传输数据。

数据的导入和导出本质上是mapreduce程序,充分利用了MR的并行化和容错性。

pig

定义了一种数据流语言-pig latin,将脚本转换为mapreduce任务在hadoop上执行。

通常用于离线分析。

mahout(数据挖掘算法库)

mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

flume

cloudera开源的日志收集系统,具有分布式,高可靠,高容错,易于定制和扩展的特点。

2.对比Hadoop与Spark的优缺点。

 

(1)Spark基于RDD,数据并不存放在RDD中,只是通过RDD进行转换,通过装饰者设计模式,数据之间形成血缘关系和类型转换;

(2)Spark用scala语言编写,相比java语言编写的Hadoop程序更加简洁;

(3)相比Hadoop中对于数据计算只提供了Map和Reduce两个操作,Spark提供了丰富的算子,可以通过RDD转换算子和RDD行动算子,实现很多复杂算法操作,这些在复杂的算法在Hadoop中需要自己编写,而在Spark中直接通过scala语言封装好了,直接用就ok;

(4)Hadoop中对于数据的计算,一个Job只有一个Map和Reduce阶段,对于复杂的计算,需要使用多次MR,这样涉及到落盘和磁盘IO,效率不高;而在Spark中,一个Job可以包含多个RDD的转换算子,在调度时可以生成多个Stage,实现更复杂的功能;

(5)Hadoop中中间结果存放在HDFS中,每次MR都需要刷写-调用,而Spark中间结果存放优先存放在内存中,内存不够再存放在磁盘中,不放入HDFS,避免了大量的IO和刷写读取操作;

(6)Hadoop适合处理静态数据,对于迭代式流式数据的处理能力差;Spark通过在内存中缓存处理的数据,提高了处理流式数据和迭代式数据的性能;

(7)Spark对标于Hadoop中的计算模块MR,但是速度和效率比MR要快得多;

(8)Spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作,它只是一个计算分析框架,专门用来对分布式存储的数据进行计算处理,它本身并不能存储数据;

(9)Spark可以使用Hadoop的HDFS或者其他云数据平台进行数据存储,但是一般使用HDFS;

(10)Spark可以使用基于HDFS的HBase数据库,也可以使用HDFS的数据文件,还可以通过jdbc连接使用Mysql数据库数据;Spark可以对数据库数据进行修改删除,而HDFS只能对数据进行追加和全表删除;

 

 

3.如何实现Hadoop与Spark的统一部署?

一方面,由于Hadoop生态系统中的一些组件所实现的功能,目前还是无法由Spark取代的,比如,Storm可以实现毫秒级响应的流计算,但是,Spark则无法做到毫秒级响应。另一方面,企业中已经有许多现有的应用,都是基于现有的Hadoop组件开发的,完全转移到Spark上需要一定的成本。因此,在许多企业实际应用中,Hadoop和Spark的统一部署是一种比较现实合理的选择。

由于Hadoop MapReduce、HBase、Storm和Spark等,都可以运行在资源管理框架YARN之上,因此,可以在YARN之上进行统一部署。

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_02

2.安装Spark与Python练习

1检查基础环境hadoop,jdk

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_03

2配置

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_04

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_05

3试运行python代码

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_06

二python编程练习:

准备文本文件:world.txt

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_07

读文件,预处理:大小写,标点符号,停用词,分词 main.py

1


with open("Under the Red Dragon.txt""r") as f: text=f.read() text = text.lower() for ch in '!@#$%^&*(_)-+=\\[]}{|;:\'\"`~,<.>?/': text=text.replace(ch," ") words = text.split() # 以空格分割文本 stop_words = [] with open('stop_words.txt','r') as f: # 读取停用词文件 for line in f: stop_words.append(line.strip('\n')) afterwords=[] for in range(len(words)): z=1 for in range(len(stop_words)): if words[i]==stop_words[j]: continue elseif z==len(stop_words): afterwords.append(words[i]) break z=z+1 continue


  

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_08

统计每个单词出现的次数,按词频大小排序,结果写文件 main.py

counts = {} for word in afterwords: counts[word] = counts.get(word, 0) + 1 items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) f1 = open('count.txt', 'w') for i in range(len(items)): word, count = items[i] f1.write(word+" "+str(count)+"\n")

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_09

输出结果

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_10

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_11

三、使用PyCharm搭建编程环境:Ubuntu 16.04 + PyCharm + spark

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_12

 

3.Spark设计与运行原理,基本操作

1.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。

hadoop生态系统tez hadoop生态系统包括哪些组件_Hive_13

2、请详细阐述Spark的几个主要概念及相互关系

 

 Master, Worker;  RDD,DAG; Application, job,stage,task; driver,executor,Claster Manager

 

1.Task(任务):RDD中的一个分区对应一个task,task是单个分区上最小的处理流程单元

 

2.TaskSet(任务集):一组关联的,但相互之间没有Shuffle依赖关系的Task集合。

 

3.Stage(调度阶段):一个taskSet对应的调度阶段,每个job会根据RDD的宽依赖关系被切分很多Stage,每个stage都包含 一个TaskSet。

 

4.job(作业):由Action算子触发生成的由一个或者多个stage组成的计算作业。

 

5.application:用户编写的spark应用程序,由一个或者多个job组成,提交到spark之后,spark为application分派资源,将程序转换并执行。

 

6.DAGScheduler:根据job构建基于stage的DAG,并提交stage给TaskScheduler。

 

7.TaskScheduler:将Taskset提交给Worker Node集群运行并返回结果。

 

 

 

关系:

 

1,Application

 

一个SparkContext就是一个application,通过spark-submit脚本提交给集群。

 

2,DAG

 

RDD依赖组成的有向无环图,来表明一个Application中RDD的依赖关系。

 

3,Job

 

(1)没有检查点的正常情况下一个行动算子触发一个Job。

 

(2)如果行动算子的依赖链中有检查点(checkpoint),则至少有一个额外的Job来专门执行检查点功能。如果有多个checkpoint,需要根据下面参数来确定checkpoint Job的数量:spark.checkpoint.checkpointAllMarkedAncestors

 

如果值为true,则所有检查点都会执行,父RDD的checkpoint Job先执行。

 

否则只执行最靠后的RDD的checkpoint Job任务。

 

(3)主线程是串行阻塞式提交Job的,一个行动操作Job执行完毕后执行其依赖链中的checkpoint Job;然后执行下一个行动操作Job及其checkpoint Job。

 

4 Stage

 

(1)stage分为两类:ShuffleMapStage和ResultStage

 

(2)Spark根据ShuffleDependency来划分Stage,一个ShuffleDependency依赖关系的父RDD为前一个Stage的结束,子RDD(都是ShuffledRDD)下一个stage的开始。一个ShuffleDependency一个ShuffleMapStage,另外还会有一个ResultStage。

 

(3)一个Job stage的总数=零个或者多个ShuffleMapStage+一个ResultStage。

 

(4)stage之间有依赖关系,按照依赖关系的顺序串行执行。

 

5 Task

 

(1)Task分为两类:ShfflueMapTask和ResultTask。

 

(2)每个ShuffleMapStage都有一个或者多个ShfflueMapTask,数量为ShuffleMapStage中最后一个RDD的分区数量;

 

(3)每个ResultStage都有一个或者多个ResultStage,数量为ShuffleMapStage中最后一个RDD的分区数量。

 

(4)同一个stage的task之间并行执行,不同stage的task遵循stage的顺序。

 

(5)只有Task才会发送到spark Excutor中执行,涉及到数据计算。其它的概念都只存在于ApplicationMaster中。

3.在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。

 

my.txt

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_14

 

运行spark程序

hadoop生态系统tez hadoop生态系统包括哪些组件_spark_15

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_16

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_17

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_18

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_19

hadoop生态系统tez hadoop生态系统包括哪些组件_数据_20

RDD转换关系图

hadoop生态系统tez hadoop生态系统包括哪些组件_hadoop生态系统tez_21