Spark实时监控yarn指标:

Posted chunlei99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark实时监控yarn指标:相关的知识,希望对你有一定的参考价值。

Spark实时监控yarn指标:
	实时计算: sparkstreaming、flink

yarn:30T 2000core
	spark、flink、mr

	需求: 实时监控yarn资源使用情况

项目流程:
	数据采集:采集yarn指标数据 =》 yarn api => 用户自己开发代码 jar
	数据处理:实时处理  =》sparkstreaming
	数据输出:mysql、olap =》 clickhouse
	数据可视化:superset、dataease

olap  vs oltp  毫秒级别
olap:clickhouse、doris、tidb、phoenix
oltp:事务 mysql、


链路:
	yarn:
		app.jar [采集yarn数据] =》 kafka =》sparkstreaming =》 clickhouse =》superset

		数据格式:
			1.一行一行发送数据: 文本数据【分割符即可】
				1 2 3 4 5  空格
				1,2,3,4,5 ,
			2.json数据
				"applicationid":1,"meme":4G,“name”:"xxx  asd  x"

		性能问题:
			json 占用io 、好处:解析方便

1.采集数据:
	1.yarn api 采集yarn信息 :
		1.采集yarn 作业运行状态:
			1.ACCEPTED
			2.RUNNING

		2.yarn api如何使用?
			1.YarnClient
			2.YarnApplicationState
			3.ApplicationReport:
				包含yarn上每个作业的详细信息:
					程序id、执行引擎、开始时间、结束时间、mem、cpu、队列、名字

		3.数据发送kafka
		 生产者api :

2.实时数据处理
3.数据可视化


 spark-sql  --master yarn --jars /home/hadoop/software/mysql-connector-java-5.1.28.jar --driver-class-path /home/hadoop/software/mysql-connector-java-5.1.28.jar

公司:
kafka-manger:
kafka-eager:

 查看kafka topic:
 kafka-topics.sh --list --zookeeper bigdata32:2181,bigdata33:2181,bigdata34:2181/kafka

 创建topic:
kafka-topics.sh --create --zookeeper bigdata32:2181,bigdata33:2181,bigdata34:2181/kafka --topic yarn-info --partitions 3 --replication-factor 1

控制台 test:
kafka-console-consumer.sh --bootstrap-server bigdata32:9092,bigdata33:9092,bigdata34:9092 --topic  yarn-info



作业:
	1.安装clickhouse:
		https://clickhouse.com/docs/en/install/#from-rpm-packages


2.实时数据处理
	1.sparkstreaming :  微批
		1.souce kafka  : 10s一个批次  =》计算结果数据延迟性 该如何界定?
		2.todo => 计算监控指标 =》 不做
		3.sink clickhouse  =》 yarn指标 利用 clickhouse计算能力进行计算

eg: ok =》 业务发展  =》 计算实时指标
	1.yarn的某个队列的当前正在运行的作业数量
	2..yarn的当前申请资源的作业的数量
	3
	4
	5
	6

解决: 略微属于 实时数仓
	1.souce kafka  : 10s一个批次  =》计算结果数据延迟性 该如何界定?
	2.sink clickhouse  =》 yarn指标 利用 clickhouse计算能力进行计算

	指标:
		clickhouse  => superset


实时数仓:
	ods
	dws
	rpt

实时数仓:直接把 宽表数据 写出到 clickhouse  利用clickgouse 计算能力 去解决 业务需求多的问题
	dws =》 clickhouse

代码:
	sparkstreaming :
		souce  kafka
		todo no
		sink clickhosue  jdbc :
				1. jdbc  con
				2. df  jdbc

data  =》 clickhouse
				table columns

clickhouse:
	1.安装部署
	2.使用 =》 mysql

mysql  rdbms  vs  nosql hbase  redis

clickhouse  列式存储
	1.官网 https://clickhouse.com/clickhouse
	2.安装部署
		yum install -y yum-utils
		yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
		yum install -y clickhouse-server clickhouse-client
		/etc/init.d/clickhouse-server start

		clickhouse-client


1.table
CREATE TABLE bigdata.user_info (
    id String ,
name String,
 age String,
    dt String
) ENGINE = MergeTree()
PARTITION BY dt
PRIMARY KEY (dt,id,name,age)
ORDER BY (dt,id,name,age) SETTINGS index_granularity = 8192

insert into bigdata.user_info values('1','zhangsan','30','20230206'),('2','lisi','30','20230206');

3.dbeaver 进行远程连接 :
		jdbc
		1.clickhouse  运行任何机器 ip 都可以访问
		2.dbeaver :
			ssh  bigdata34
			clickhouse  =》 本机连接

maven 官网仓库地址:https://mvnrepository.com/


远程连接:
	1.vi /etc/clickhouse-server/config.xml

	2.把<listen_host>::</listen_host>的注释打开
	3.重启ClickHouse服务
		clickhouse stop
		clickhouse start

pom:
添加 clickhouse依赖存在问题:
1.Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature

spark运行过程中需要 xml依赖

2.java.sql.SQLException: No suitable driver
	没有clickhouse驱动


CREATE TABLE bigdata.yarn_info_dbhappy (
applicationid String,
name String,
applicationtype String,
user String,
starttime String,
finishtime String,
memorysize String,
virtualcores String,
containers String,
state String,
queue String,
todaytime String,
url String
) ENGINE = MergeTree()
PARTITION BY queue
PRIMARY KEY (applicationid,name,applicationtype,user,starttime,finishtime,memorysize,virtualcores,containers,state,queue,todaytime,url)
ORDER BY (applicationid,name,applicationtype,user,starttime,finishtime,memorysize,virtualcores,containers,state,queue,todaytime,url) SETTINGS index_granularity = 8192



3.数据可视化
clickhouse:
	1.default用户 =》 创建用户权限
		 vim /etc/clickhouse-server/users.xml
		 <access_management>1</access_management>

	2.进入clickhouse里面
		CREATE USER my_user IDENTIFIED BY 'password';

		CREATE USER root IDENTIFIED BY '123456';

		GRANT ALTER on *.* TO root;
superset : clickhouse
		1.原生方式部署  bigdata34
			0.安装clickhouse驱动
			pip3 install  sqlalchemy-clickhouse -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
			1.source
				clickhouse://root:123456@bigdata34:8123/bigdata
		2.docker  bigdata33
			pip3 install clickhouse-connect -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
			clickhousedb://root:123456@bigdata34:8123/bigdata

	1.试着做一下可视化
		需求:
			1.yarn正在运行作业的明细表
			2.yarn正在运行作业内存使用情况
			3.yarn正在运行作业任务数
			4.yarn正在申请作业任务数
			5.yarn正在运行作业内存使用top10、运行时长top10

数据:clickhouse
superset:sql
	5sql=》 clickhouse 语法


1.yarn正在运行作业的明细表 =》 yarn正在运行作业 最新时间点的 app 信息

where :
	1.正在运行
	2.最新时间点

select
applicationid,
name,
applicationtype,
user,
toDateTime(intDivOrZero(toInt64OrZero(starttime),1000)) as s_time,
dateDiff('minute', toDateTime(intDivOrZero(toInt64OrZero(starttime),1000)),toDateTime(todaytime) ) as diff,
intDivOrZero(toInt64OrZero(memorysize),1024) as user_mem,
virtualcores,
containers,
state,
queue,
todaytime,
url
from bigdata.yarn_info_dbhappy
where
state='RUNNING'
and
todaytime =(
	select
	max(todaytime) as t
	from bigdata.yarn_info_dbhappy
	where
	formatDateTime(toDateTime(todaytime),'%Y-%m-%d')=formatDateTime(now(),'%Y-%m-%d')
)

2.yarn正在运行作业内存使用情况
		=> yarn正在使用的 总内存
select
cast(todaytime_alias,'String') as dt,
sum(user_mem) as all_g
from
(
	select
	toDateTime(todaytime) as todaytime_alias,
	intDivOrZero(toInt64OrZero(memorysize),1024) as user_mem,
	name
	from  bigdata.yarn_info_dbhappy
	where
	state='RUNNING'
	group by
	todaytime_alias,
	user_mem,
	name
) as a
group by
dt;


注意:
	1.环境问题
		superset =》docker  【常用的第三方框架,docker部署 docker】
						docker pull xxx
						docker  run  xx
						docker ps -a
						docker exec -it xxx  bash
		clickhouse =>docker

		小问题:
			clickhouse tcp 端口: 9000  =》 namenode对外提供服务 9000冲突
			superset docker =》 linux 8080-》8088端口  =》 zookeeper端口冲突
															对外提供服务 2181
															tcp端口 8080


superset、clickhouse  bigdata31 => mysql
docker =>
	docker hub


补充:
	kill yarn 上面的作业:
		 yarn application -kill application_1675816347294_0006


3.正在运行的任务数据
select
cast(todaytime_alias,'String') as dt,
count(name) as cnt
from
(
	select
	toDateTime(todaytime) as todaytime_alias,
	name
	from  bigdata.yarn_info_dbhappy
	where
	state='RUNNING'
	and
	todaytime =(
	select
	max(todaytime) as t
	from bigdata.yarn_info_dbhappy
	where
	formatDateTime(toDateTime(todaytime),'%Y-%m-%d')=formatDateTime(now(),'%Y-%m-%d')
)
	group by
	todaytime_alias,
	name
) as a
group by
dt;



数据采集:采集yarn指标数据 scala 代码
数据处理:Spark作业   scala 代码
数据可视化:superset

1.任务进行部署
	不需要定时调度:
	数据采集:一直运行   shell
	数据处理:一直运行   shell
	xxl

2.监控
	定时监控:1min
		1.app
		2.报警:
			电话
			短信
			邮箱
			钉钉、企业微信


任务部署:
	1.采集数据
java -cp ./yarn-log.jar \\
com.bigdata.task.YarnLogTask \\
"bigdata32:9092,bigdata33:9092,bigdata34:9092" "yarn-info"

	2.数据处理
spark-submit \\
--master yarn \\
--class com.bigdata.App \\
--conf "spark.kafka.group.id=yarn01" \\
--conf "spark.kafka.topic.name=yarn-info" \\
--conf "spark.port.maxRetries=100" \\
--driver-memory 1G \\
--executor-memory 1G \\
--executor-cores 2 \\
--num-executors 1 \\
/home/hadoop/project/yarn/output/spark-yarn-monitor.jar

任务监控:xxl 1min
	1.采集数据监控
	2.数据处理监控

	task 挂了:
		1.监控 pid
		2. task 挂了
		3. 报警
		4.任务拉起脚本【不做了】
1.采集数据监控
	1.报警
	2.监控pid


作业:
	1.任务拉起脚本?
	2.整理案例


<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

以上是关于Spark实时监控yarn指标:的主要内容,如果未能解决你的问题,请参考以下文章

Spark Streaming 实时计算在甜橙金融监控系统中的应用及优化

实时监控 Spark 作业

Storm 大数据 视频教程 安装 Spark Kafka Hadoop 分布式实时计算

基于Flume+Kafka+Spark Streaming打造实时流处理项目实战课程

滴滴开源Kafka集群指标监控与运维管控平台

kafka监控指标kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs;取不到值,在jconsole也找不到