亚索学Java

V1

2022/10/23阅读:19主题:默认主题

大数据only写sql?No!

大家好,我是亚索!好久不见!

最近,亚索入坑大数据开发了,以前常听人们说大数据开发无非就是写写sql啊,查查数据,难度远小于后端开发。。。emm其实不然吧,大数据领域还是有很多方向可供选择的。

今天先大概介绍一下大数据开发方向,然后加点小赠品--Flink On yarn之如何在resourcemanager上查看日志

1 大数据开发主流方向

亚索目前主攻于此。Java 为主。主要做统一数据开发平台、大数据源码级别扩展优化、提供提升开发效率的工具、元数据管理、数据质量管理等。

技能要求:Java,Zookeeper,Hadoop,Hive,Spark,Kafka、Flink、Kerberos(鉴权)、Ranger、Prometheus(监控)、Trino、Rss等。还有当前火热的Linux自动化管理平台,K8s(kubernetes)技术。

要求首先是掌握以上各种大数据组件的使用,然后是深入各组件源码,基于源码二次开发。这里面难度较大的一个点就是各组件之间的耦合与关联,需要对各组件的源码原理以及K8s底层机制有一个清晰而全面的理解。

服务端 Java 为主,全部容器化管理服务。主要是数据报表平台、数据分析平台等。

如果数据开发平台比较完善,一般以 sql 为主,不管是离线计算,还是实时计算(调用基础平台各组件),都只需要在数据开发平台上提交 sql 任务即可。更专注数据模型的建设,能够快速实现用户的数据分析需求。如果平台不够完善,实时计算可能还是需要写代码。技能要求:数据建模、报表开发、理解业务

分析数据趋势,挖掘潜在价值。

技能要求:数据分析技能、Hadoop、Hive、部分Java

Scala,Python,R语言。特征提取、算法模型的开发和优化。主流Python,特别是近些年pyflink和pyspark的发展,可以将 Python 丰富的生态计算能力运行在 Flink 和 Spark 框架之上,这将极大的推动 Python 生态的发展。

Python 生态和大数据生态结合,抛开扩大大数据产品的受众用户之外,对 Python 生态一个特别重要的意义就是从单机到分布式的能力增强,亚索认为,这也是大数据时代海量数据分析对 Python 生态的强烈需求。

随着大数据的发展,也会出现一些新的方向,但数据支持决策的出发点是不会变的。

2 Flink On Yarn之tm、jm日志

Apache Flink是一个分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。

事实证明,Flink 已经可以扩展到数千核心,其状态可以达到 TB 级别,且仍能保持高吞吐、低延迟的特性。世界各地有很多要求严苛的流处理应用都运行在 Flink 之上。

Flink的安装部署模式有:

  • Local本地模式
  • Standalone独立集群
  • Standalone-HA高可用集群模式
  • Flink On Yarn模式(以及Yarn On K8s)

一般为了保证稳定性和资源隔离等,生产环境里的任务皆借助资源管理框架(如Yarn)运行。

任务运行在yarn上,排查问题时需要查询日志,不太方便,尤其是任务进程异常退出之后。

2.1 JobHistoryServer

yarn容器退出之后,默认是不保存日志的。所以需要开启JobHistoryServer,具体方法网上有很多教程。

2.2 查看运行中Flink任务的Log

运行中的Flink任务可以直接通过flink web ui查看:


Job Manager Log

Task Manager Log

对于已经运行结束的yarn应用,flink容器集群进程已经退出,无法提供webui服务。所以需要通过JobHistoryServer查看保留在yarn上的日志。

2.3 yarn界面查看job manager log


Yarn Application

点击Logs,即可得到job manager的日志,点击here得到完整日志。


Job Manager Log

2.4 yarn界面查看task manager log

flink集群提交任务之后,客户端生成jobgraph,提交给job manager,视资源情况安排task manager运行具体任务,一个task manager即是一个jvm进程。

通过yarn(resource manager界面)查看task manager log需掌握一些技巧。

研究一下job manager的日志url,比如:

http://node5:19888/jobhistory/logs//node1:8041/container_1634207619484_0505_01_000001/container_1634207619484_0505_01_000001/hadoop

发现规律:

  • 1、http://node5:19888/jobhistory/logs/:jobhistoryserver的地址
  • 2、/node1:8041:job manager(jm)的运行的宿主yarn node;
  • 3、/container_1634207619484_0505_01_000001/container_1634207619484_0505_01_000001:yarn拉起的容器id
  • 4、/hadoop:提交任务的用户

Esc,输入:wq即可保存并退出编辑模式。注意如果编写某个文件时显示只读,无修改权限,可以尝试输入:wq!保存并退出。

只需知道taskmanager(tm)的容器名和node就能找到它的日志了。flink在jm的日志中记录了详细的相关信息,包括所有的tm的容器名和node。

查找日志技巧:

搜索Registering TaskManger

或者利用appid去搜索,比如这里可以搜索1634207619484_0505:


tm container info

分析关键信息:

Registering TaskManager with ResourceID container_1634207619484_0505_01_000002 (akka.tcp://flink@node1:37798/user/taskmanager_0)

tm的容器此处仅一个,容器名为container_1634207619484_0505_01_000002,node为node1

(注意:后面拼接url用的端口号是8041不是37798)

所以,最终taskmanager日志的url是:

http://node5:19888/jobhistory/logs/node1:8041/container_1634207619484_0505_01_000002/container_1634207619484_0505_01_000002/root

Task Manager Log

总结

运行中的flink/spark的日志查看非常容易,因为它们本身都提供了web ui服务。但是当任务异常退出之后,flink/spark进程的结束,无法提供web ui。

利用job history server来保留和展示当时的日志。但是yarn的web只展示了flink job manager/spark driver的日志链接,我们需要自己拼接flink task manager/spark executor日志链接。


我是亚索,关注我,大家一起学Java和大数据吧!

分类:

后端

标签:

大数据

作者介绍

亚索学Java
V1