1. 觀察該該topic消費組 Resource-group確定爲Spark-Streaming任務消費resource主題出現堆積,堆積數據20Y
2.訪問spark master web ui 查看 Resource任務,發現running applications 中該沒有該任務,該任務已經死掉,查看死掉應用日誌發現日誌中只有一句: Received signal term. 沒有其他錯誤信息。
3. running applications總數量爲10, running drivers總數量爲15, 現場急於恢復任務正常。因此決定殺掉所有提交的任務重新提交.
4. 重新提交任務,任務提交後running drivers 15個,running applications 一直在8~13個之間瘋狂跳動,每個任務執行10s左右自動死掉。然後driver又會重新拉起一個新的appliction,重複該過程。
5. 查看app日誌發現日誌中未發現有用信息,只有一句received signal term
5. 查找driver日誌,發現日誌中一直提示 kafka jaas鑑權配置認證未通過錯誤信息,發現提交的任務中爲包含jaas 鑑權配置文件。
6. 查看消費的kafka配置文件中,發現以下配置已經增加
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
producer.security.protocol=SASL_PLAINTEXT
producer.sasl.mechanism=PLAIN
consumer.security.protocol=SASL_PLAINTEXT
consumer.sasl.mechanism=PLAIN
7. 查看${SPARK_HOME}/conf/spark-env.sh中在SPARK_WORKER_OPTS 和 SPARK_DAEMON_JAVA_OPTS中已經增加了-Djava.security.auth.login.config=/etc/kafka_client_jaas.conf 說明之前已經有人配置過jaas認證。
但是未生效
8. 修改${spark_home}/conf/spark-defaults.conf文件,將spark.executor.extraJavaOptions配置項打開(#號刪除), 在該配置項後面輸入空格後增加 -Djava.security.auth.login.config=/etc/kafka_client_jaas.conf
9. 增加環境變量 export kafka_driver_jaas="--driver-java-options=\" -Djava.security.auth.login.config=/etc/kafka_client_jaas.conf\"", 在spark提交任務參數中增加該環境變量配置
10. kill掉所有任務後,重新提交任務,直接報錯提示: Unrecognized option: -Djava.security.auth.login.config=/etc/kafka_client_jaas.conf 。排查半天終於發現是因爲--driver-java-options=\" -Djava.security.auth.login.config=/etc/kafka_client_jaas.conf\"中的值竟然多寫了一個空格。 之前以爲新增加一個-D系統參數前面需要增加一個空格防止和其他配置參數粘連在一起系統無法識別,沒想到spark中配置項不能增加配置,如果需要增加多個配置需要配置多次--driver-java-options參數
同樣如果不配置conf/spark-defaults.conf 中的spark.executor.extraJavaOptions,而是直接在spark任務中使用 --conf spark.executor.extraJavaOptions=\"/etc/kafka_client_jaas.conf\" 配置方式增加系統變量也不能增加空格,否則也會提示無法識別參數錯誤。
兩個無法識別阻塞了半天才解決
11. 去掉空格後重新提交任務,任務正常啓動,不再瘋狂殺掉/拉起新的application, 查看頁面數據正常。
未重新觀察之前resource任務爲何掛掉,推測原因有兩個
1. jaas配置在之前提交任務時未生效(配置項加在了conf/spark-env.sh中)。
2. kafka數據壓力大導致任務full gc頻繁,掛掉。