开源大数据平台E-MapReduce(简称“EMR”)是云原生开源大数据平台,向客户提供简单易集成的Hadoop、Hive、Spark、Flink、Presto、ClickHouse、StarRocks、Delta、Hudi等开源大数据计算和存储引擎。本文旨在分享阿里云Prometheus对EMR平台大数据服务的监控实践。
EMR 简介
Aliware
开源大数据开发平台E-MapReduce(简称“EMR”)作为大数据处理的系统解决方案被越来越多的企业所接受。而阿里云EMR构建于云服务器ECS上,基于开源的Apache Hadoop和Apache Spark可以方便地使用Hadoop和Spark生态系统中的其他周边系统分析和处理数据,还可以与阿里云OSS和RDS等云数据存储系统和数据库系统进行数据传输,让企业可以快速搭建Hadoop、Spark、Flink、Kafka和HBase等开源大数据服务。
我们可以看到,E-MapReduce的核心是集群。E-MapReduce集群是由一个或多个ECS实例组成的Hadoop、Flink、Druid、ZooKeeper集群。以Hadoop为例,每个ECS 实例上通常都运行了一些daemon进程(例如,NameNode、DataNode、ResouceManager和NodeManager),这些daemon进程共同组成了Hadoop集群。
在众多大数据组件背后,是海量需要被观测的指标,这就给运维工程师、SRE工程师带来了巨大的挑战。那么,构建E-MapReduce之后,我们针对不同组件,应该关注哪些指标呢?
E-MapReduce 观测指标解读
Aliware
Metric指标采集
E-MapReduce指标观测主要包括HOST监控、HDFS 、YARN、Hive、Kafka、Zookeeper、ClickHouse和Flink等,那么接下来我们将进行逐一解读。
HOST指标[1]
提供ECS节点CPU、内存、磁盘、load、网络、socket等监控指标。
HDFS指标[2]
HDFS(Hadoop Distributed File System)是一种Hadoop分布式文件系统,适用于大规模数据的分布式读写,特别是读多写少的场景。HDFS指标包括HOME、NameNodes、DataNodes和JournanlNodes指标。
HDFS-HOME
HDFS-NameNodes
HDFS-DataNodes
HDFS-JournanlNodes
YARN指标[3]
YARN是Hadoop系统的核心组件,主要功能包括负责Hadoop集群的资源管理,对作业进行调度运行以及监控。YARN指标包括HOME、Queue、ResourceManager、NodeManager、TimeLineServer和JobHistory。
YARN-HOME
YARN-Queues
YARN-ResourceManager
YARN-NodeManagers
YARN-TimeLineServer
YARN-JobHistory
Hive指标[4]
Hive是一个基于Hadoop的数据仓库框架,在大数据业务场景中,主要用来进行数据提取、转化和加载(ETL)以及元数据管理。Hive由HiveServer2(HiveQL查询服务器)、Hive MetaStore(元数据管理模块)和Hive Client构成,其指标包括HiveMetaStore和HiveServer2。
HiveMetaStore
指标 |
描述 |
hive_memory_heap_max |
JVM最大可用堆内存,单位:Byte。 |
hive_memory_heap_used |
JVM已使用堆内存,单位:Byte。 |
hive_memory_non_heap_used |
JVM已使用堆外内存量,单位:Byte。 |
hive_active_calls_api_alter_table |
当前活跃的alter table请求数。 |
hive_active_calls_api_create_table |
当前活跃的create table请求数。 |
hive_active_calls_api_drop_table |
当前活跃的drop table请求数。 |
hive_api_alter_table |
alter table请求平均时间,单位:ms。 |
hive_api_alter_table_with_environment_context |
alter table with env context请求平均时间,单位:ms。 |
hive_api_create_table |
create table请求平均时间,单位:ms。 |
hive_api_create_table_with_environment_context |
create table with env context请求平均时间,单位:ms。 |
api_drop_table |
drop table请求平均时间,单位:ms。 |
hive_api_drop_table_with_environment_context |
drop table with env context请求平均时间,单位:ms。 |
hive_api_get_all_databases |
get all databases请求平均时间,单位:ms。 |
hive_api_get_all_functions |
get all functions请求平均时间,单位:ms。 |
hive_api_get_database |
get database请求平均时间,单位:ms。 |
hive_api_get_databases |
get databases请求平均时间,单位:ms。 |
hive_api_get_multi_table |
get multi table请求平均时间,单位:ms。 |
hive_api_get_tables_by_type |
get table请求平均时间,单位:ms。 |
hive_api_get_table_objects_by_name_req |
get table objects by name请求平均时间,单位:ms。 |
hive_api_get_table_req |
get table req请求平均时间,单位:ms。 |
hive_api_get_table_statistics_req |
get table statistics请求平均时间,单位:ms。 |
hive_api_get_tables |
get tables请求平均时间,单位:ms。 |
hive_api_get_tables_by_type |
get tables by type请求平均时间,单位:ms。 |
HiveServer2
指标 |
描述 |
hive_metrics_hs2_active_sessions |
当前活跃的session个数。 |
hive_metrics_memory_total_init |
JVM初始化总内存,单位:Byte。 |
hive_metrics_memory_total_committed |
JVM已预留总内存,单位:Byte。 |
hive_metrics_memory_total_max |
JVM最大可用总内存,单位:Byte。 |
hive_metrics_memory_heap_committed |
JVM已预留堆内存,单位:Byte。 |
hive_metrics_memory_heap_inithive_metrics_memory_heap_committed |
JVM初始化堆内存,单位:Byte。 |
hive_metrics_memory_non_heap_committed |
JVM已预留堆外内存,单位:Byte。 |
hive_metrics_memory_non_heap_init |
JVM初始化堆外内存,单位:Byte。 |
hive_metrics_memory_non_heap_max |
JVM最大可用堆外内存,单位:Byte。 |
hive_metrics_gc_PS_MarkSweep_count |
JVM PS MarkSweep GC次数。 |
hive_metrics_gc_PS_MarkSweep_time |
JVM PS MarkSweep GC时间,单位:ms。 |
hive_metrics_gc_PS_Scavenge_time |
JVM PS Scavenge GC时间,单位:ms。 |
hive_metrics_threads_daemon_count |
JVM daemon线程数。 |
hive_metrics_threads_count |
JVM线程数。 |
hive_metrics_threads_blocked_count |
JVM blocked线程数。 |
hive_metrics_threads_deadlock_count |
JVM deadlock线程数。 |
hive_metrics_threads_new_count |
JVM new状态线程数。 |
hive_metrics_threads_runnable_count |
JVM runnable线程数。 |
hive_metrics_threads_terminated_count |
JVM terminated线程数。 |
hive_metrics_threads_waiting_count |
JVM waiting线程数。 |
hive_metrics_threads_timed_waiting_count |
JVM timed_waiting线程数。 |
hive_metrics_memory_heap_max |
JVM最大可用堆内存,单位:Byte。 |
hive_metrics_memory_heap_used |
JVM已使用堆内存,单位:Byte。 |
hive_metrics_memory_non_heap_used |
JVM已使用堆外内存量,单位:Byte。 |
hive_metrics_hs2_open_sessions |
当前打开的session数。 |
hive_metrics_hive_mapred_tasks |
提交的Hive on MR作业总数。 |
hive_metrics_hive_tez_tasks |
提交的Hive on Tez作业总数。 |
hive_metrics_cumulative_connection_count |
累计连接数。 |
hive_metrics_active_calls_api_runTasks |
当前runtask请求数。 |
hive_metrics_hs2_completed_sql_operation_FINISHED |
已结束的SQL总数。 |
hive_metrics_hs2_sql_operation_active_user |
当前活跃用户数。 |
hive_metrics_open_connections |
当前打开的连接数。 |
hive_metrics_api_PostHook_com_aliyun_emr_meta_hive_hook_LineageLoggerHook |
执行LineageLoggerHook的平均时间,单位:ms。 |
hive_metrics_api_hs2_sql_operation_PENDING |
SQL任务处于PEEDING状态的平均时间,单位:ms。 |
hive_metrics_api_hs2_sql_operation_RUNNING |
运SQL任务处于RUNNING状态的平均时间,单位:ms。 |
hive_metrics_hs2_submitted_queries |
提交查询的平均时间,单位:ms。 |
hive_metrics_hs2_executing_queries |
执行查询的平均时间,单位:ms。 |
hive_metrics_hs2_succeeded_queries |
服务启动后成功的查询数。 |
hive_metrics_hs2_failed_queries |
服务启动后失败的查询数。 |
ZooKeeper指标[5]
ZooKeeper是一个分布式、高可用性的协调服务。ZooKeeper提供分布式配置服务、同步服务和命名注册等功能。
指标 |
描述 |
zk_packets_received |
ZooKeeper接收的包的数量。 |
zk_packets_sent |
ZooKeeper发送的包的数量。 |
zk_avg_latency |
ZooKeeper平均请求延迟,单位:ms。 |
zk_min_latency |
ZooKeeper最小请求延迟,单位:ms。 |
zk_max_latency |
ZooKeeper最大请求延迟,单位:ms。 |
zk_watch_count |