亚索学Java
2022/10/23阅读:29主题:默认主题
大数据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查看:


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

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

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:

分析关键信息:
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

总结
运行中的flink/spark的日志查看非常容易,因为它们本身都提供了web ui服务。但是当任务异常退出之后,flink/spark进程的结束,无法提供web ui。
利用job history server来保留和展示当时的日志。但是yarn的web只展示了flink job manager/spark driver的日志链接,我们需要自己拼接flink task manager/spark executor日志链接。
我是亚索,关注我,大家一起学Java和大数据吧!

作者介绍