Spark metrics整理

链接:https://www.jianshu.com/p/e42ad9cb66a1

 

概述

spark使用metrics的包路径为:org.apache.spark.metrics,核心类:MetricsSystem。可以把Spark Metrics的信息报告到各种各样的Sink,比如HTTP、JMX以及CSV文件。

Spark的Metrics系统目前支持以下的实例:
○ master:Spark standalone模式的master进程;
○ worker:Spark standalone模式的worker进程;
○ executor:Spark executor;
○ driver:Spark driver进程;
○ applications:master进程里的一个组件,为各种应用作汇报。

metrics结构主要分为sink和source,source指数据来源,Source内属性包含name和MetricRegistry,主要有:MasterSource、WorkerSource、ApplicationSource、StreamingSource、BlockManagerSource等。

 

sink是将指标发送到哪,目前有:ConsoleSink、GangliaSink、GraphiteSink、MetricsServlet、JmxSink、CsvSink

配置

在spark的conf目录下metrics.properties文件中配置,默认使用此文件,也可以通过-Dspark.metrics.conf=xxx指定。

--conf "spark.metrics.conf=metrics.properties" \

--files "hdfs://nameservice1/user/adore.chen/app_1/metrics.properties" \

sink配置参数说明

ConsoleSink 是记录Metrics信息到Console中

名称默认值描述
classorg.apache.spark.metrics.sink.ConsoleSinkSink类
period10轮询间隔
unitseconds轮询间隔的单位

CSVSink 定期的把Metrics信息导出到CSV文件中

名称默认值描述
classorg.apache.spark.metrics.sink.CsvSinkSink类
period10轮询间隔
unitseconds轮询间隔的单位
directory/tmpCSV文件存储的位置

JmxSink 可以通过JMX方式访问Mertics信息

名称默认值描述
classorg.apache.spark.metrics.sink.JmxSinkSink类

MetricsServlet

名称默认值描述
classorg.apache.spark.metrics.sink.MetricsServletSink类
pathVARIES*Path prefix from the web server root
samplefalseWhether to show entire set of samples for histograms ('false' or 'true') |

这个在Spark中默认就开启了,我们可以在4040端口页面的URL后面加上/metrics/json查看

GraphiteSink

名称默认值描述
classorg.apache.spark.metrics.sink.GraphiteSinkSink类
hostNONEGraphite服务器主机名
portNONEGraphite服务器端口
period10轮询间隔
unitseconds轮询间隔的单位
prefixEMPTY STRINGPrefix to prepend to metric name

GangliaSink 由于Licene的限制,默认没有放到默认的build里面,如果需要使用,需要自己编译

名称默认值描述
classorg.apache.spark.metrics.sink.GangliaSinkSink类
hostNONEGanglia 服务器的主机名或multicast group
portNONEGanglia服务器的端口
period10轮询间隔
unitseconds轮询间隔的单位
ttl1TTL of messages sent by Ganglia
modemulticastGanglia网络模式('unicast' or 'multicast')

sink配置样例

语法 syntax: [instance].sink.[name].[options]=[value]

 

    *.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink
    *.sink.console.period=10
    *.sink.console.unit=seconds

以上为所有实例开启ConsoleSink,包括master、worker、dirver、executor

 

    master.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink
    master.sink.console.period=10
    master.sink.console.unit=seconds

以上只为master开启ConsoleSink

source配置样例

语法 syntax: [instance].source.[name].[options]=[value]

 

    master.source.jvm.class=org.apache.spark.metrics.source.JvmSource

以上为master开启JvmSource

代码流程

1.各实例master、worker、dirver、executor在启动时创建MetricsSystem实例,在start时调用registerSources()、registerSinks();
2.registerSources中在配置文件中找到对应实例的配置,获取Source的具体包名类名后,通过反射生成实例,再调用registerSource注册到registry中。各source中已定义好要记录的指标,可以继承Source采集自定义信息;
3.registerSinks中同样获取对应实例的配置,得到sink的包名类名反射生成实例,加到sinks列表中。
4.report方法中可调用所有sink的report方法(只在stop中调用)。

参考:

http://spark.apache.org/docs/latest/monitoring.html
http://hao.jobbole.com/metrics/
https://www.jianshu.com/p/e4f70ddbc287
https://www.iteblog.com/archives/1341.html


 

<think>好的,用户现在想了解大数据开发中自动化代码生成的工具和框架。首先,我需要根据之前提供的引用内容来整理相关信息。引用1提到Eclipse有丰富的插件生态系统,特别是针对Hadoop和Spark的插件,这可能涉及到代码生成工具。引用2讲的是离线数据仓库的项目实战,可能会涉及到自动化生成ETL代码的部分。引用3是关于Flink处理数据集的,可能相关的代码生成工具。 首先,用户的问题是关于自动化代码生成,这在大数据开发中确实很重要,因为手动编写大量重复代码效率低下且容易出错。我需要列举常见的工具和框架,并结合引用中的内容。比如,Apache Maven和Gradle是构建工具,可以部分自动化代码生成,特别是项目模板。然后,像Hibernate这样的ORM框架可以生成数据访问层代码,虽然主要用在传统应用,但大数据中可能也有类似工具。 接下来,引用1提到Eclipse的插件,比如Hadoop-Eclipse-Plugin,可以生成Hadoop作业的模板代码,这点需要强调。另外,Apache NiFi的数据流自动化设计可能减少代码量,虽然它本身是可视化工具,但也属于自动化的一部分。Spark SQL的代码生成优化应该也是相关,比如Catalyst优化器自动生成执行计划的代码。 然后,引用2中的Hive数仓项目使用了代码生成工具,比如通过ETL工具生成HiveQL脚本,或者使用代码脚手架工具如Yeoman生成项目结构。此外,SQL生成工具如SQuirreL SQL可以帮助自动生成查询代码,提升效率。 引用3中的Flink方面,可能需要提到Flink SQL或Table API,这些高级API能自动生成底层Java/Scala代码,减少手动编码。例如,Flink的代码生成技术在流处理中优化状态管理和时间处理。 还需要考虑低代码平台,如KNIME、Talend,这些工具通过可视化界面生成代码,适合快速开发。另外,元数据驱动的代码生成框架,通过配置元数据自动生成CRUD操作或数据管道代码,这在企业级项目中常见。 最后,需要总结如何选择工具,根据项目需求、技术栈和团队习惯来决定,同时结合引用中的案例,比如Eclipse插件适合喜欢定制化环境的开发者,而Flink SQL适合需要处理流数据的场景。 确保回答结构清晰,分点列出工具和框架,每个点都结合引用内容,并自然添加引用标识。最后生成相关问题,引导用户深入探讨。</think>在大数据开发中,自动化代码生成主要通过工具链整合、模板引擎和元数据驱动三种方式实现。以下是具体工具与框架的解析: ### 一、代码自动化生成工具 1. **Apache Maven/Gradle插件体系** 通过`archetype`模板可自动生成项目骨架代码,例如创建Spark作业时自动生成`SparkSession`初始化代码和单元测试模板。结合引用[1]中提到的Eclipse插件生态,可集成Hadoop-Maven插件自动生成MapReduce作业配置[^1]。 2. **ORM框架扩展** MyBatis Generator可根据数据库表结构自动生成DAO层代码,在大数据领域衍生出类似工具如**Apache Calcite**,能自动生成SQL解析与优化代码[^2]。 3. **DSL代码生成器** **Apache Groovy**的AST转换功能可创建领域特定语言,例如自动将类SQL语句转换为Spark RDD操作代码: ```groovy // 自动生成Spark转换代码 dataset.where('age > 30').select('name').generateCode() ``` ### 二、大数据专用框架 1. **Apache NiFi代码模板** 其模板库包含200+预置数据处理流程,通过可视化配置可自动生成对应的Java处理器链代码,特别适合ETL管道搭建。 2. **Spark Catalyst优化器** 在Spark SQL执行过程中,Catalyst会通过AST优化自动生成Java字节码,对`where(name='data')`等条件自动优化为谓词下推代码[^3]。 3. **Flink Table API代码生成** Flink 1.14引入的新的代码生成器能将SQL查询自动转换为优化后的Java代码,例如窗口聚合操作会生成包含`ProcessWindowFunction`的状态管理代码[^3]。 ### 三、可视化低代码平台 1. **KNIME Analytics** 通过拖拽组件构建数据流水线,可导出为可执行的Python/Scala代码,支持Spark和Flink运行时。 2. **AWS Glue DataBrew** 自动将数据清洗操作转换为PySpark代码,包含列转换、缺失值处理等代码自动生成。 ### 四、元数据驱动框架 ```python # 元数据示例(YAML格式) pipeline: source: kafka://cluster1/topic transformations: - filter: columnA > 100 - aggregate: group_by: columnB metrics: sum(columnC) sink: hdfs://output/path ``` 通过解析此类元数据配置,框架可自动生成完整的Spark Streaming作业代码,包含Kafka消费者、转换逻辑和输出处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值