本文目录:
- 1、Spark Metrics
- 2、Spark端口总结
- 3、spark和hadoop的区别
- 4、科普Spark,Spark是什么,如何使用Spark
- 5、spark安装与运行模式
- 6、Spark应用是用来做什么的?
Spark Metrics
服务运行时将服务信息展示出来方便用户查看时服务易用性的重要组成部分。特别时对于分布式集群服务。
spark服务本身有提供获取应用信息对方法,方便用户查看应用信息。Spark服务提供对master,worker,driver,executor,Historyserver进程对运行展示。对于应用(driver/executor)进程,主要提供metric和restapi对访问方式以展示运行状态。
服务/进程通过Metric将自身运行信息展示出来。spark基于Coda Hale Metrics Library库展示。需要展示的信息通过配置source类,在运行时通过反射实例化并启动source进行收集。然后通过配置sink类,将信息sink到对应的平台。
以driver为例:driver进程启动metricSystem的流程:
SparkContext在初始化时调用 : MetricsSystem.createMetricsSystem("driver", conf, securityManager)
然后等待ui启动后启动并绑定webui(executor则是初始化后直接启动)
metricsSystem.start()
metricsSystem.getServletHandlers.foreach(handler = ui.foreach(_.attachHandler(handler)))
创建MetricConfig, val metricsConfig = new MetricsConfig(conf)
初始化MetricConfig,首先设置默认的属性信息:
prop.setProperty("*.sink.servlet.class","org.apache.spark.metrics.sink.MetricsServlet")
prop.setProperty("*.sink.servlet.path","/metrics/json")
prop.setProperty("master.sink.servlet.path","/metrics/master/json")
prop.setProperty("applications.sink.servlet.path","/metrics/applications/json")
加载conf/metric.properties文件或者通过spark.metrics.conf制定的文件。读取相关配置,metricsConfig.initialize()
在启动metricSystem时,则会注册并启动source和sink
registerSources()
registerSinks()
sinks.foreach(_.start)
默认启动对source如下:
可配置的source如下:
配置方法:修改$SPARK_HOME/conf目录下的metrics.properties文件:
默认相关source已经统计在列。可添加source为jvmsource。添加之后则相关进程的jvm信息会被收集。配置方法
添加如下行:
driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource
executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource
或者*.source.jvm.class=org.apache.spark.metrics.source.JvmSource
source信息的获取比较简单,以DAGSchedulerSource的runningStages为例,直接计算dagscheduler的runningStages大小即可。override def getValue: Int = dagScheduler.runningStages.size
通过这些收集的信息可以看到,主要是方便查看运行状态,并非提供用来监控和管理应用
Metric信息展示方法:
收集的目的是方便展示,展示的方法是sink。
常用的sink如下:
a) metricserverlet
spark默认的sink为metricsserverlet,通过driver服务启动的webui绑定,然后展示出来。ip:4040/metrics/json(ip位driver节点的ip)展示:由于executor服务没有相关ui,无法展示metricsource的信息。 下图是配置过JVMsource后,通过driver节点的看到的metric信息。
b) CSV方式(将进程的source信息,写入到csv文件,各进程打印至进程节点的相关目录下,每分钟打印一次):
*.sink.csv.class=org.apache.spark.metrics.sink.CsvSink
*.sink.csv.period=1
*.sink.csv.directory=/tmp/
c) console方式(将进程的source信息写入到console/stdout
,输出到进程的stdout):
*.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink
*.sink.console.period=20
*.sink.console.unit=seconds
d) slf4j方式(直接在运行日志中查看):
*.sink.slf4j.class=org.apache.spark.metrics.sink.Slf4jSink
*.sink.slf4j.period=10
*.sink.slf4j.unit=seconds
e) JMX方式(此情况下,相关端口要经过规划,不同的pap使用不同的端口,对于一个app来说,只能在一个节点启动一个executor,否则会有端口冲突):
executor.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
JMX方式在配置后,需要在driver/executor启动jmx服务。 可通过启动应用时添加如下操作实现--conf "spark.driver.extraJavaOptions=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.rmi.port=8001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false --conf "spark.executor.extraJavaOptions=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8002 -Dcom.sun.management.jmxremote.rmi.port=8003 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
可通过jconsole工具链接至对应driver进程所在ip和端口查看jmx信息。
除例metrics之外,用户还可以通过restApi接口查看应用运行信息。可以查询的信息如下(参见 ):
运行中的应用:通过driver进程查看:
ip:port/api/v1/....
其中Ip为driver所在节点ip,端口为4040. 如果一个节点运行多个driver,端口会以此累加至4040,4041,4042 . 如:10.1.236.65:4041/api/v1/applications/application_1512542119073_0229/storage/rdd/23(on yarn 模式会自动跳转至如下页面)
对于运行完的应用,可通过jobhistory服务查看
此场景下,需要提交应用时打开eventlog记录功能
打开方法在应用的spark-defaults.conf中添加如下配置spark.eventLog.enabled为true,spark.eventLog.dir为hdfs:///spark-history 。
其中/spark-history可配置,需要和jobhistory进程的路径配置一致 ,该路径可通过historyserver页面查看。
ip:port/api/v1/....(其中Ip为spark服务的jobhistory进程所在节点ip,默认端口为18080). 可通过如下方式访问:
Spark作为计算引擎,对于大数据集群来说,作为客户端向Yarn提交应用来完成数据的分析。所使用的资源一般在yarn控制之下。其应用场景并非作为服务端为其他组件提供服务。其所提供的信息通常是针对app级别,如job,stage,task等信息。一般的信息监控需求均可通过其ui页面查看。对于一些应用的运行情况,可通过restapi获取和分析。
Spark端口总结
Spark的端口总结
Master节点的web端口是8080,work节点的web端口是8081
spark master web ui 默认端口为8080,当系统有其它程序也在使用该接口(比如:Tomcat)时,启动master时也不会报错,spark自己会改用其它端口,自动端口号加1,也可以自行设置,修改方法:
1、cd $SPARK_HOME/sbin
2、vi start-master.sh
if [ "$SPARK_MASTER_WEBUI_PORT" = "" ]; then
SPARK_MASTER_WEBUI_PORT=8080 #可以修改端口号
fi
8080端口:master WEB端口
8081端口:work WEB端口
7077端口:
master通信端口
18080端口:spark历史服务器端口
相关配置:
conf目录下
cp spark-defaults.conf.template spark-defaults.conf
编辑spark-defaults.conf这个文件
编辑spark-env.sh文件
使用sbin/start-history-server.sh脚本启动
启动日志:
执行spark任务
启动日志:
Web界面
4040端口:
2.3 Spark当前执行的任务页面查看端口4040(例如:使用spark-shell启动spark,此时的任务可以在4040端口页面查看),如果任务结束了4040端口页面不能访问
默认是4040,我改配置改了下
spark和hadoop的区别
spark和hadoop的区别:诞生的先后顺序、计算不同、平台不同。
诞生的先后顺序,hadoop属于第一代开源大数据处理平台,而spark属于第二代。属于下一代的spark肯定在综合评价上要优于第一代的hadoop。
计算不同spark和hadoop在分布式计算的底层思路上,其实是极为相似的,即mapreduce分布式运算模型:将运算分成两个阶段,阶段1-map,负责从上游拉取数据后各自运算,然后将运算结果shuffle给下游的reduce,reduce再各自对通过shuffle读取来的数据进行聚合运算spark和hadoop在分布式计算的具体实现上,又有区别;hadoop中的mapreduce运算框架,一个运算job,进行一次map-reduce的过程;而spark的一个job中,可以将多个map-reduce过程级联进行。
平台不同spark和hadoop区别是,spark是一个运算平台,而hadoop是一个复合平台(包含运算引擎,还包含分布式文件存储系统,还包含分布式运算的资源调度系统),所以,spark跟hadoop来比较的话,主要是比运算这一块大数据技术发展到目前这个阶段,hadoop主要是它的运算部分日渐式微,而spark目前如日中天,相关技术需求量大,offer好拿。
科普Spark,Spark是什么,如何使用Spark
科普Spark,Spark是什么,如何使用Spark
1.Spark基于什么算法的分布式计算(很简单)
2.Spark与MapReduce不同在什么地方
3.Spark为什么比Hadoop灵活
4.Spark局限是什么
5.什么情况下适合使用Spark
什么是Spark
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。其架构如下图所示:
Spark与Hadoop的对比
Spark的中间数据放到内存中,对于迭代运算效率更高。
Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count, collect, reduce, lookup, save等多种actions操作。
这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。用户可以命名,物化,控制中间结果的存储、分区等。可以说编程模型比Hadoop更灵活。
不过由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。
容错性
在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用哪种方式来实现容错。
可用性
Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性。
Spark与Hadoop的结合
Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。
Spark的适用场景
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小(大数据库架构中这是是否考虑使用Spark的重要因素)
由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。总的来说Spark的适用面比较广泛且比较通用。
运行模式
本地模式
Standalone模式
Mesoes模式
yarn模式
Spark生态系统
Shark ( Hive on Spark): Shark基本上就是在Spark的框架基础上提供和Hive一样的H iveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和 Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapReduce。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。
Spark streaming: 构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片断(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面相比基于Record的其它处理框架(如Storm),RDD数据集更容易做高效的容错处理。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。
Bagel: Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法。
End.
spark安装与运行模式
Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍前三种模式。
Spark-shell 参数
Spark-shell 是以一种交互式命令行方式将Spark应用程序跑在指定模式上,也可以通过Spark-submit提交指定运用程序,Spark-shell 底层调用的是Spark-submit,二者的使用参数一致的,通过- -help 查看参数:
sparkconf的传入有三种方式:
1.通过在spark应用程序开发的时候用set()方法进行指定
2.通过在spark应用程序提交的时候用过以上参数指定,一般使用此种方式,因为使用较为灵活
3.通过配置spark-default.conf,spark-env.sh文件进行指定,此种方式较shell方式级别低
Local模式
Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(cpu)方式运行,local模式是一种OOTB(开箱即用)的方式,只需要在spark-env.sh导出JAVA_HOME,无需其他任何配置即可使用,因而常用于开发和学习
方式:./spark-shell - -master local[n] ,n代表线程数
Standalone模式
Spark on Yarn
on Yarn的俩种模式
客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和excutor,另外ApplicationMaster和executor都装在在container里运行,container默认的内存是1g,ApplicationMaster分配的内存是driver-memory,executor分配的内存是executor-memory.同时,因为Driver在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名为SparkSubmit的形式存在。
Cluster 模式
1.由client向ResourceManager提交请求,并上传Jar到HDFS上
这期间包括四个步骤:
a).连接到RM
b).从RM ASM(applicationsManager)中获得metric,queue和resource等信息。
c).upload app jar and spark-assembly jar
d).设置运行环境和container上下文
2.ResourceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationManager)
3.NodeManager启动Spark App Master,并向ResourceManager ASM注册
4.Spark ApplicationMaster从HDFS中找到jar文件,启动DAGScheduler和YARN Cluster Scheduler
5.ResourceManager向ResourceManager ASM注册申请container资源(INFO YarnClientImpl: Submitted application)
6.ResourceManager通知NodeManager分配Container,这是可以收到来自ASM关于container的报告。(每个container的对应一个executor)
7.Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。
进入spark安装目录下的conf文件夹
[atguigu@hadoop102 module] mv slaves.template slaves
[atguigu@hadoop102 conf] vim slaves
hadoop102
hadoop103
hadoop104
4)修改spark-env.sh文件,添加如下配置:
[atguigu@hadoop102 conf]$ vim spark-env.sh
SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077
5)分发spark包
[atguigu@hadoop102 module] sbin/start-all.sh
注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置:
export JAVA_HOME=XXXX
官方求PI案例
spark-submit
--class org.apache.spark.examples.SparkPi
--master spark://server-2:7077
--executor-memory 1G
--total-executor-cores 2
/home/xxx/software/spark-2.4.4-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.4.jar
100
spark-shell
--master spark://server-2:7077
--executor-memory 1g
--total-executor-cores 2
spark-shell --master spark://server-2:7077 --executor-memory 1g --total-executor-cores 2
参数:--master spark://server-2:7077 指定要连接的集群的master
Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。
安装使用
1)修改hadoop配置文件yarn-site.xml,添加如下内容:
2)修改spark-env.sh,添加如下配置:
[atguigu@hadoop102 conf]$ vi spark-env.sh
YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
3)分发配置文件
[atguigu@hadoop102 conf] xsync spark-env.sh
4)执行一个程序
spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-2.4.4-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.4.jar
100
注意:在提交任务之前需启动HDFS以及YARN集群。
日志查看
修改配置文件spark-defaults.conf
添加如下内容:
spark.yarn.historyServer.address=server-2:18080
spark.history.ui.port=18080
2)重启spark历史服务
[atguigu@hadoop102 spark] sbin/start-history-server.sh
starting org.apache.spark.deploy.history.HistoryServer, logging to /opt/module/spark/logs/spark-atguigu-org.apache.spark.deploy.history.HistoryServer-1-hadoop102.out
3)提交任务到Yarn执行
spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-2.4.4-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.4.jar
100
Spark应用是用来做什么的?
Spark因其自身优势,发展势头迅猛,目前几乎所有一站式大数据平台都已集成了Spark,很多行业也都正在用Spark来改善他们的业务,以下是Spark在一些行业的具体用途:
保险行业:通过使用Spark的机器学习功能来处理和分析所有索赔,优化索赔报销流程。
医疗保健:使用Spark Core,Streaming和SQL构建病人护理系统。
零售业:使用Spark分析销售点数据和优惠券使用情况。
互联网:使用Spark的ML功能来识别虚假的配置文件,并增强他们向客户展示的产品匹配。
银行业:使用机器学习模型来预测某些金融产品的零售的资料。
政府:分析地理,时间和财政支出。
科学研究:通过时间,深度,地理分析地震事件来预测未来的事件。
投资银行:分析日内股价以预测未来的价格走势。
地理空间分析:按时间和地理分析Uber旅行,以预测未来的需求和定价。
航空公司:建立预测航空旅行延误的模型。
设备:预测建筑物超过临界温度的可能性......
【spark服务】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: