一次 Spark Operator 问题的救火
背景你听过Spark , Maybe听过SparkonK8S , 但是Almostnot听过SparkOperator 。
JustRemember这是个车厂多于轮胎厂的时代 , 组合创新盛行而有效 。
SparkOperator就是GoogleCloudNative方式在K8S上运行Spark的组装车 。 不多说 , 上车 。
现象在升级SparkOperator后遇到了SparkApplication无法解析HDFSnamenodeservicename , 报"UnknownHost"的错误 。 前方说我们十万火急 , 需要立刻解决 , 不解决就影响项目进度了 。 耳熟?对 , 我们遇到的问题4个9以上面的话结尾 。 First , calmdown 。
线索从表象上看 , 最直接的问题是在SparkDriver中没有HDFS的配置文件:hdfs-site.xml从Pod的信息中可以看到HDFS配置Volume未挂载查看SparkOperator的Log , 有一行可疑信息"BadCertificate"信息因为"BadCertificate"能给我们的信息可能很关键 , 但是并不直观 , 没有直接说明是谁和谁之间通信的证书不对 , 所以本次定位是采用从Volume挂载的地方入手 。 平常喜欢的方式是从现象到理论到代码的方式进行递进 。 先顺着线索收集了相关的理论信息 。
1.MountingvolumeSparkOperator的说明文档中有指出Mountingvolume需要Enablewebhook , 这个点比较难找 。
https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/docs/user-guide.md#mounting-volumes
在K8S中 , ServiceAccount通常我们只能使用公钥 , 如果自定义服务之间需要访问 , 就需要自己生成密钥对、创建K8sSecret , 这个过程在Spark-web-hook-init中调用源码里面hack目录下的脚本完成 。
3.Web-hook-init从这个Job的yaml文件中可以看到 , 在早期的版本中干的事情是清除密钥和创建密钥 。 但是遇到了Update会清除密钥但不创建新密钥的问题 , 后面就将这两个功能拆分成两个yaml 。 见
issues:
验证既然是顺序问题 , 那么我们重启Spark-operator服务 , 功能正常 。 嗯 , 对 , 还是重启大法好啊 。 说的没错 , 同时咱们是有理有据的重启 。
Deeper我起初怀疑是我们内部没有采用Helm部署导致的问题 , 翻开Yaml却发现并没有关于InstallOrder的控制 , Helm的默认控制顺序和预期的不一样 , Deployment先部署 , Secret后部署 。
#L61
所以 , 包含这么多知识点的一个问题 , 归根到底却是一个操作问题 。 又有什么关系呢?有收获就OK了 。
后记我是个经常救火 , 又立志决不当Fireman的人 , 所以保持借假修真的心态 , 探究的更加深入 , 找出知识点和乐趣 。
【一次 Spark Operator 问题的救火】提前祝各位Coder中秋快乐 。
推荐阅读
- 春天湿气重,多喝这碗糖水,祛湿清热又甘甜,我隔两天喝一次
- 南瓜新吃法,不放面粉,柔软香甜,咬一口满嘴香,隔三差五做一次
- 祖传腌黄瓜做法,一次腌20斤不够吃,脆嫩爽口,放一年不会坏
- 第一次用它来包饺子,超乎想象的好吃,皮薄大馅,个顶个的鲜
- 早餐不用愁,一碗面粉,筷子搅一搅,蛋香酥软,三天两头做一次!
- 一次发酵的奶香小馒头,省时省力成功率高,暄软蓬松比面包还好吃
- 豆腐别再下锅炸,加上两个鸡蛋,吃着比肉还香,吃一次就忘不了
- 蛋黄酥新做法,又酥又脆,口感独特,一次五个都不够,做法超简单
- 五花肉别只知道傻傻的炖,下锅炒一炒,肉香四溢,隔三差五做一次
- 好吃不贵的几道家常菜,色香味俱全,下酒必备,隔三差五吃一次
