เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ

เจชเจฟเจ†เจฐเฉ‡ เจชเจพเจ เจ•, เจธเจผเฉเจญ เจฆเฉเจชเจนเจฟเจฐเฅค เจ…เฉฑเจœ เจ…เจธเฉ€เจ‚ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจฆเฉ€เจ†เจ‚ เจธเฉฐเจญเจพเจตเจจเจพเจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเฉ€ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ

เจตเฉฑเจกเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจ†เจงเฉเจจเจฟเจ• เจธเฉฐเจธเจพเจฐ เจตเจฟเฉฑเจš, เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจฌเฉˆเจš เจกเฉ‡เจŸเจพ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจฒเจˆ เจ…เจธเจฒ เจฎเจฟเจ†เจฐ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจธเจŸเฉเจฐเฉ€เจฎเจฟเฉฐเจ— เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจตเฉ€ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจœเฉ‹ เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจฌเฉˆเจš เจธเฉฐเจ•เจฒเจช, เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจ…เจคเฉ‡ เจธเจผเจฟเจชเจฟเฉฐเจ— เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ›เฉ‹เจŸเฉ‡ เจนเจฟเฉฑเจธเจฟเจ†เจ‚ (เจธเจชเจพเจฐเจ• เจธเจŸเฉเจฐเจ•เจšเจฐเจก เจธเจŸเฉเจฐเฉ€เจฎเจฟเฉฐเจ—) เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ…เจคเฉ‡ เจฐเจตเจพเจ‡เจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจน เจธเจฐเฉ‹เจค เจฎเฉˆเจจเฉ‡เจœเจฐ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ YARN (เจœเจพเจ‚ เจ•เฉเจ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš Apache Mesos) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจฎเฉเฉฑเจšเฉ‡ Hadoop เจธเจŸเฉˆเจ• เจฆเจพ เจนเจฟเฉฑเจธเจพ เจฐเจฟเจนเจพ เจนเฉˆเฅค 2020 เจคเฉฑเจ•, เจ‡เจธเจฆเฉ‡ เจฐเจตเจพเจ‡เจคเฉ€ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจตเจฟเจจเฉ€เจค เจนเฉˆเจกเฉ‚เจช เจตเฉฐเจกเจพเจ‚ เจฆเฉ€ เจ˜เจพเจŸ เจ•เจพเจฐเจจ เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจ•เฉฐเจชเจจเฉ€เจ†เจ‚ เจฒเจˆ เจชเฉเจฐเจธเจผเจจ เจตเจฟเฉฑเจš เจนเฉˆ - เจเจšเจกเฉ€เจชเฉ€ เจ…เจคเฉ‡ เจธเฉ€เจกเฉ€เจเจš เจฆเจพ เจตเจฟเจ•เจพเจธ เจฐเฉเจ• เจ—เจฟเจ† เจนเฉˆ, เจธเฉ€เจกเฉ€เจเจš เจšเฉฐเจ—เฉ€ เจคเจฐเฉเจนเจพเจ‚ เจตเจฟเจ•เจธเจค เจจเจนเฉ€เจ‚ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจ‰เฉฑเจš เจ•เฉ€เจฎเจค เจนเฉˆ, เจ…เจคเฉ‡ เจฌเจพเจ•เฉ€ เจนเฉˆเจกเฉ‚เจช เจธเจชเจฒเจพเจ‡เจฐ เจนเจจเฅค เจœเจพเจ‚ เจคเจพเจ‚ เจนเฉ‹เจ‚เจฆ เจ–เจคเจฎ เจนเฉ‹ เจ—เจˆ เจนเฉˆ เจœเจพเจ‚ เจ‡เฉฑเจ• เจฎเฉฑเจงเจฎ เจญเจตเจฟเฉฑเจ– เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€ เจ…เจคเฉ‡ เจตเฉฑเจกเฉ€เจ†เจ‚ เจ•เฉฐเจชเจจเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจตเฉฑเจงเจฆเฉ€ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจนเฉˆ - เจจเจฟเฉฑเจœเฉ€ เจ…เจคเฉ‡ เจœเจจเจคเจ• เจ•เจฒเจพเจ‰เจกเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉฐเจŸเฉ‡เจจเจฐ เจ†เจฐเจ•เฉˆเจธเจŸเฉ‡เจธเจผเจจ เจ…เจคเฉ‡ เจธเจฐเฉ‹เจค เจชเฉเจฐเจฌเฉฐเจงเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจฟเจ†เจฐ เจฌเจฃเจจเจพ, เจ‡เจน YARN 'เจคเฉ‡ เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ€ เจ…เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจธเจฐเฉ‹เจค เจธเจฎเจพเจ‚-เจธเจพเจฐเจฃเฉ€ เจจเจพเจฒ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจธเจพเจฐเฉ‡ เจ†เจ•เจพเจฐเจพเจ‚ เจ…เจคเฉ‡ เจชเฉฑเจŸเฉ€เจ†เจ‚ เจฆเฉ€เจ†เจ‚ เจ•เฉฐเจชเจจเฉ€เจ†เจ‚ เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเจชเจพเจฐเจ• เจ…เจคเฉ‡ เจ–เฉเฉฑเจฒเฉ‡ เจตเฉฐเจกเจพเจ‚ เจตเจพเจฒเจพ เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจตเจฟเจ•เจพเจธเจธเจผเฉ€เจฒ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจชเฉเจฐเจธเจฟเฉฑเจงเฉ€ เจฆเฉ‡ เจฎเฉฑเจฆเฉ‡เจจเจœเจผเจฐ, เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ†เจชเจฃเฉ€เจ†เจ‚ เจ–เฉเจฆ เจฆเฉ€เจ†เจ‚ เจ•เฉเจ เจธเจฅเจพเจชเจจเจพเจตเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ•เจพเจฎเจฏเจพเจฌ เจนเฉ‹ เจ—เจ เจนเจจ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ€ เจฎเฉเจนเจพเจฐเจค เจตเจฟเฉฑเจš เจตเจพเจงเจพ เจ•เจฐ เจšเฉเฉฑเจ•เฉ‡ เจนเจจ, เจœเฉ‹ เจ‡เจธ เจ•เจฆเจฎ เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

เจธเฉฐเจธเจ•เจฐเจฃ 2.3.0 เจฆเฉ‡ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจจเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจšเฉฑเจฒ เจฐเจนเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจฒเจˆ เจ…เจงเจฟเจ•เจพเจฐเจค เจธเจนเจพเจ‡เจคเจพ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ…เฉฑเจœ, เจ…เจธเฉ€เจ‚ เจ‡เจธ เจชเจนเฉเฉฐเจš เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจพ เจชเจฐเจฟเจชเฉฑเจ•เจคเจพ, เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฒเจˆ เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจฟเจ•เจฒเจชเจพเจ‚ เจ…เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉŒเจฐเจพเจจ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจฎเฉเจธเจผเจ•เจฒเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจธเจญ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ‰ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจ…เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจ เจ…เจคเฉ‡ เจ–เจพเจธ เจ•เฉ‡เจธเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจœเจพเจ—เจฐ เจ•เจฐเฉ€เจ เจœเจฟเจธ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ•เจพเจฐเจœ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เจธ เจชเฉ‹เจธเจŸ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจตเจฟเฉฑเจš, OpenShift เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเฉฐเจก เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ (oc) เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจœเจพเจฃเจ—เฉ€เจ†เจ‚เฅค เจนเฉ‹เจฐ Kubernetes เจตเฉฐเจกเจพเจ‚ เจฒเจˆ, เจฎเจฟเจ†เจฐเฉ€ Kubernetes เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ (kubectl) เจœเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจเจจเจพเจฒเจพเจ— (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, oc adm เจจเฉ€เจคเฉ€ เจฒเจˆ) เจคเฉ‹เจ‚ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจชเจนเจฟเจฒเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฆเจพ เจ•เฉ‡เจธ - เจธเจชเจพเจฐเจ•-เจธเจฌเจฎเจฟเจŸ

เจ•เจพเจฐเจœเจพเจ‚ เจ…เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเฉ‚เฉฐ เจกเจพเจŸเจพ เจชเจฐเจฟเจตเจฐเจคเจจ เจจเฉ‚เฉฐ เจกเฉ€เจฌเฉฑเจ— เจ•เจฐเจจ เจฒเจˆ เจ•เจพเจฐเจœ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจธเจฟเจงเจพเจ‚เจคเจ• เจคเฉŒเจฐ 'เจคเฉ‡, เจธเจŸเฉฑเจฌเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ‡เจนเจจเจพเจ‚ เจ‰เจฆเฉ‡เจธเจผเจพเจ‚ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ, เจชเจฐ เจ…เฉฐเจค เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจฆเฉ‡ เจ…เจธเจฒ (เจญเจพเจตเฉ‡เจ‚ เจŸเฉˆเจธเจŸ) เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ€ เจญเจพเจ—เฉ€เจฆเจพเจฐเฉ€ เจจเจพเจฒ เจตเจฟเจ•เจพเจธ เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ€ เจ‡เจธ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจตเจฟเฉฑเจš เจคเฉ‡เจœเจผ เจ…เจคเฉ‡ เจฌเจฟเจนเจคเจฐ เจธเจพเจฌเจค เจนเฉ‹เจ‡เจ† เจนเฉˆเฅค เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจœเจฆเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจ…เฉฐเจค เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจฆเฉ€เจ†เจ‚ เจ…เจธเจฒ เจธเจฅเจฟเจคเฉ€เจ†เจ‚ 'เจคเฉ‡ เจกเฉ€เจฌเฉฑเจ— เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจฆเฉ‹ เจฆเฉเจฐเจฟเจธเจผ เจธเฉฐเจญเจต เจนเจจ:

  • เจกเจฟเจตเฉˆเจฒเจชเจฐ เจธเจŸเฉˆเจ‚เจกเจ…เจฒเฉ‹เจจ เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ;

    เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ

  • เจ‡เฉฑเจ• เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจฒเฉ‚เจช เจตเจฟเฉฑเจš เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจ‰เฉฑเจคเฉ‡ เจ‡เฉฑเจ• เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

    เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ

เจชเจนเจฟเจฒเฉ‡ เจตเจฟเจ•เจฒเจช เจจเฉ‚เฉฐ เจฎเฉŒเจœเฉ‚เจฆ เจนเฉ‹เจฃ เจฆเจพ เจ…เจงเจฟเจ•เจพเจฐ เจนเฉˆ, เจชเจฐ เจ‡เจธเจฆเฉ‡ เจ•เจˆ เจจเฉเจ•เจธเจพเจจ เจนเจจ:

  • เจนเจฐเฉ‡เจ• เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจตเจพเจฒเฉ€ เจฅเจพเจ‚ เจคเฉ‹เจ‚ เจ…เฉฐเจคเจฎ เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจฆเฉ€เจ†เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจฅเจฟเจคเฉ€เจ†เจ‚ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเฉ€ เจœเจพเจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจ‰เจธเจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจนเฉˆ;
  • เจตเจฟเจ•เจธเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพ เจฐเจนเฉ‡ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจตเจฐเจ•เจฟเฉฐเจ— เจฎเจธเจผเฉ€เจจ 'เจคเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจฆเฉ‚เจœเฉ‡ เจตเจฟเจ•เจฒเจช เจตเจฟเฉฑเจš เจ‡เจน เจจเฉเจ•เจธเจพเจจ เจจเจนเฉ€เจ‚ เจนเจจ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เฉฑเจ• เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจธเจฐเฉ‹เจค เจชเฉ‚เจฒ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ…เฉฐเจคเจฎ เจธเจฟเจธเจŸเจฎ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจชเจนเฉเฉฐเจš เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ, เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฐเฉ‹เจฒ เจฎเจพเจกเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเจšเจ•เจฆเจพเจฐ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจ‡เจธ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจตเจฟเจ•เจพเจธ เจŸเฉ€เจฎ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฎเฉˆเจ‚เจฌเจฐเฅค เจ†เจ‰ เจ‡เจธเจจเฉ‚เฉฐ เจชเจนเจฟเจฒเฉ‡ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‰เจœเจพเจ—เจฐ เจ•เจฐเฉ€เจ - เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจธเจฐเจ•เจŸ เจตเจฟเฉฑเจš เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจธเจฅเจพเจจเจ• เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฎเจธเจผเฉ€เจจ เจคเฉ‹เจ‚ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจฒเจพเจ‚เจš เจ•เจฐเจจเจพเฅค

เจ†เจ‰ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจธเจชเจพเจฐเจ• เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจ—เฉฑเจฒ เจ•เจฐเฉ€เจเฅค เจธเจชเจพเจฐเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

mkdir /opt/spark
cd /opt/spark
wget http://mirror.linux-ia64.org/apache/spark/spark-2.4.5/spark-2.4.5.tgz
tar zxvf spark-2.4.5.tgz
rm -f spark-2.4.5.tgz

เจ…เจธเฉ€เจ‚ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจชเฉˆเจ•เฉ‡เจœ เจ‡เจ•เฉฑเจ เฉ‡ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

cd spark-2.4.5/
./build/mvn -Pkubernetes -DskipTests clean package

เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ€ เจฌเจฟเจฒเจก เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจธเจฎเจพเจ‚ เจฒเฉฑเจ—เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ "เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€/" เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจคเฉ‹เจ‚ เจœเจพเจฐ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจธเจฟเจฐเจซ เจ‡เจธ เจ‰เจช-เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

./build/mvn -f ./assembly/pom.xml -Pkubernetes -DskipTests clean package

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ เจธเจชเจพเจฐเจ• เจจเฉŒเจ•เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเฉ‡เจธ เจ‡เจฎเฉ‡เจœ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เฉฑเจฅเฉ‡ 2 เจธเฉฐเจญเจต เจชเจนเฉเฉฐเจš เจนเจจ:

  • เจคเจฟเจ†เจฐ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจ•เฉ‹เจก เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆ;
  • เจฌเจฃเจพเจ เจ—เจ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซเจผ เจธเจชเจพเจฐเจ• เจ…เจคเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจจเจฟเจฐเจญเจฐเจคเจพ เจธเจผเจพเจฎเจฒ เจนเฉˆ, เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจฐเจฟเจฎเฉ‹เจŸเจฒเฉ€ เจนเฉ‹เจธเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, HDFS เจตเจฟเฉฑเจš)เฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจˆเจ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจฆเฉ€ เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจ‰เจฆเจพเจนเจฐเจจ เจนเฉˆเฅค เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจธเจชเจพเจฐเจ• เจ•เฉ‹เจฒ "เจกเฉŒเจ•เจฐ-เจ‡เจฎเฉ‡เจœ-เจŸเฉ‚เจฒ" เจจเจพเจฎเจ• เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจนเฉˆเฅค เจ†เจ“ เจ‡เจธ 'เจคเฉ‡ เจฎเจฆเจฆ เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐเฉ€เจ:

./bin/docker-image-tool.sh --help

เจ‡เจธเจฆเฉ€ เจฎเจฆเจฆ เจจเจพเจฒ, เจคเฉเจธเฉ€เจ‚ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฐเจฟเจฎเฉ‹เจŸ เจฐเจœเจฟเจธเจŸเจฐเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจ…เจชเจฒเฉ‹เจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เจธเจฆเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจจเฉเจ•เจธเจพเจจ เจนเจจ:

  • เจฌเจฟเจจเจพเจ‚ เจ…เจธเจซเจฒ 3 เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ - เจธเจชเจพเจฐเจ•, โ€‹โ€‹เจชเจพเจˆเจธเจชเจพเจฐเจ• เจ…เจคเฉ‡ เจ†เจฐ เจฒเจˆ;
  • เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจฆเจพ เจจเจพเจฎ เจฆเฉ‡เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจ—เจˆ เจ‡เจธ เจธเจนเฉ‚เจฒเจค เจฆเฉ‡ เจธเฉ‹เจงเฉ‡ เจนเฉ‹เจ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡:

vi bin/docker-image-tool-upd.sh

#!/usr/bin/env bash

function error {
  echo "$@" 1>&2
  exit 1
}

if [ -z "${SPARK_HOME}" ]; then
  SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi
. "${SPARK_HOME}/bin/load-spark-env.sh"

function image_ref {
  local image="$1"
  local add_repo="${2:-1}"
  if [ $add_repo = 1 ] && [ -n "$REPO" ]; then
    image="$REPO/$image"
  fi
  if [ -n "$TAG" ]; then
    image="$image:$TAG"
  fi
  echo "$image"
}

function build {
  local BUILD_ARGS
  local IMG_PATH

  if [ ! -f "$SPARK_HOME/RELEASE" ]; then
    IMG_PATH=$BASEDOCKERFILE
    BUILD_ARGS=(
      ${BUILD_PARAMS}
      --build-arg
      img_path=$IMG_PATH
      --build-arg
      datagram_jars=datagram/runtimelibs
      --build-arg
      spark_jars=assembly/target/scala-$SPARK_SCALA_VERSION/jars
    )
  else
    IMG_PATH="kubernetes/dockerfiles"
    BUILD_ARGS=(${BUILD_PARAMS})
  fi

  if [ -z "$IMG_PATH" ]; then
    error "Cannot find docker image. This script must be run from a runnable distribution of Apache Spark."
  fi

  if [ -z "$IMAGE_REF" ]; then
    error "Cannot find docker image reference. Please add -i arg."
  fi

  local BINDING_BUILD_ARGS=(
    ${BUILD_PARAMS}
    --build-arg
    base_img=$(image_ref $IMAGE_REF)
  )
  local BASEDOCKERFILE=${BASEDOCKERFILE:-"$IMG_PATH/spark/docker/Dockerfile"}

  docker build $NOCACHEARG "${BUILD_ARGS[@]}" 
    -t $(image_ref $IMAGE_REF) 
    -f "$BASEDOCKERFILE" .
}

function push {
  docker push "$(image_ref $IMAGE_REF)"
}

function usage {
  cat <<EOF
Usage: $0 [options] [command]
Builds or pushes the built-in Spark Docker image.

Commands:
  build       Build image. Requires a repository address to be provided if the image will be
              pushed to a different registry.
  push        Push a pre-built image to a registry. Requires a repository address to be provided.

Options:
  -f file               Dockerfile to build for JVM based Jobs. By default builds the Dockerfile shipped with Spark.
  -p file               Dockerfile to build for PySpark Jobs. Builds Python dependencies and ships with Spark.
  -R file               Dockerfile to build for SparkR Jobs. Builds R dependencies and ships with Spark.
  -r repo               Repository address.
  -i name               Image name to apply to the built image, or to identify the image to be pushed.  
  -t tag                Tag to apply to the built image, or to identify the image to be pushed.
  -m                    Use minikube's Docker daemon.
  -n                    Build docker image with --no-cache
  -b arg      Build arg to build or push the image. For multiple build args, this option needs to
              be used separately for each build arg.

Using minikube when building images will do so directly into minikube's Docker daemon.
There is no need to push the images into minikube in that case, they'll be automatically
available when running applications inside the minikube cluster.

Check the following documentation for more information on using the minikube Docker daemon:

  https://kubernetes.io/docs/getting-started-guides/minikube/#reusing-the-docker-daemon

Examples:
  - Build image in minikube with tag "testing"
    $0 -m -t testing build

  - Build and push image with tag "v2.3.0" to docker.io/myrepo
    $0 -r docker.io/myrepo -t v2.3.0 build
    $0 -r docker.io/myrepo -t v2.3.0 push
EOF
}

if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then
  usage
  exit 0
fi

REPO=
TAG=
BASEDOCKERFILE=
NOCACHEARG=
BUILD_PARAMS=
IMAGE_REF=
while getopts f:mr:t:nb:i: option
do
 case "${option}"
 in
 f) BASEDOCKERFILE=${OPTARG};;
 r) REPO=${OPTARG};;
 t) TAG=${OPTARG};;
 n) NOCACHEARG="--no-cache";;
 i) IMAGE_REF=${OPTARG};;
 b) BUILD_PARAMS=${BUILD_PARAMS}" --build-arg "${OPTARG};;
 esac
done

case "${@: -1}" in
  build)
    build
    ;;
  push)
    if [ -z "$REPO" ]; then
      usage
      exit 1
    fi
    push
    ;;
  *)
    usage
    exit 1
    ;;
esac

เจ‡เจธเจฆเฉ€ เจฎเจฆเจฆ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจธเจชเจพเจฐเจ• (เจ‡เฉฑเจฅเฉ‡ {docker-registry-url} เจคเฉเจนเจพเจกเฉ€ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจฆเจพ URL เจนเฉˆ, {repo} เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฆเจพ เจจเจพเจฎ เจนเฉˆ, เจœเฉ‹ OpenShift เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ , {image-name} โ€” เจšเจฟเฉฑเจคเจฐ เจฆเจพ เจจเจพเจฎ (เจœเฉ‡ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเจพ เจคเจฟเฉฐเจจ-เจชเฉฑเจงเจฐเฉ€ เจตเจฟเจญเจพเจœเจจ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ Red Hat OpenShift เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ€ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš), {tag} โ€” เจ‡เจธเจฆเจพ เจŸเฉˆเจ— เจšเจฟเฉฑเจคเจฐ เจฆเจพ เจธเฉฐเจธเจ•เจฐเจฃ):

./bin/docker-image-tool-upd.sh -f resource-managers/kubernetes/docker/src/main/dockerfiles/spark/Dockerfile -r {docker-registry-url}/{repo} -i {image-name} -t {tag} build

เจ•เฉฐเจธเฉ‹เจฒ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ OKD เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจฒเฉŒเจ—เจ‡เจจ เจ•เจฐเฉ‹ (เจ‡เฉฑเจฅเฉ‡ {OKD-API-URL} OKD เจ•เจฒเฉฑเจธเจŸเจฐ API URL เจนเฉˆ):

oc login {OKD-API-URL}

เจ†เจ“ เจกเฉŒเจ•เจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ…เจงเจฟเจ•เจพเจฐ เจฒเจˆ เจฎเฉŒเจœเฉ‚เจฆเจพ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเจพ เจŸเฉ‹เจ•เจจ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ€เจ:

oc whoami -t

OKD เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ€ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจกเฉŒเจ•เจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจฒเฉŒเจ—เจ‡เจจ เจ•เจฐเฉ‹ (เจ…เจธเฉ€เจ‚ เจชเจพเจธเจตเจฐเจก เจตเจœเฉ‹เจ‚ เจชเจฟเจ›เจฒเฉ€ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจŸเฉ‹เจ•เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚):

docker login {docker-registry-url}

เจ†เจ“ เจ‡เจ•เฉฑเจ เฉ‡ เจ•เฉ€เจคเฉ‡ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจกเฉŒเจ•เจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจ“เจ•เฉ‡เจกเฉ€ เจตเจฟเฉฑเจš เจ…เจชเจฒเฉ‹เจก เจ•เจฐเฉ€เจ:

./bin/docker-image-tool-upd.sh -r {docker-registry-url}/{repo} -i {image-name} -t {tag} push

เจ†เจ‰ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ เจ•เจฟ เจ…เจธเฉˆเจ‚เจฌเจฒเจก เจšเจฟเฉฑเจคเจฐ OKD เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจธเฉฐเจฌเฉฐเจงเจฟเจค เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ€เจ†เจ‚ เจคเจธเจตเฉ€เจฐเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฟเฉฑเจš URL เจ–เฉ‹เจฒเฉเจนเฉ‹ (เจ‡เฉฑเจฅเฉ‡ {project} OpenShift เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเจพ เจจเจพเจฎ เจนเฉˆ, {OKD-WEBUI-URL} OpenShift เจตเฉˆเฉฑเจฌ เจ•เฉฐเจธเฉ‹เจฒ เจฆเจพ URL เจนเฉˆเฅค ) - https://{OKD-WEBUI-URL}/console /project/{project}/browse/images/{image-name}เฅค

เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ, เจชเฉŒเจก เจจเฉ‚เฉฐ เจฐเฉ‚เจŸ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจตเจฟเจธเจผเฉ‡เจธเจผ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจ–เจพเจคเจพ เจฌเจฃเจพเจ‡เจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ (เจ…เจธเฉ€เจ‚ เจ‡เจธ เจจเฉเจ•เจคเฉ‡ 'เจคเฉ‡ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจšเจฐเจšเจพ เจ•เจฐเจพเจ‚เจ—เฉ‡):

oc create sa spark -n {project}
oc adm policy add-scc-to-user anyuid -z spark -n {project}

เจšเจฒเฉ‹ OKD เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจธเจชเจพเจฐเจ•-เจธเจฌเจฎเจฟเจŸ เจ•เจฎเจพเจ‚เจก เจšเจฒเจพเจ, เจฌเจฃเจพเจ เจ—เจ เจธเฉ‡เจตเจพ เจ–เจพเจคเฉ‡ เจ…เจคเฉ‡ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ:

 /opt/spark/bin/spark-submit --name spark-test --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=3 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.kubernetes.namespace={project} --conf spark.submit.deployMode=cluster --conf spark.kubernetes.container.image={docker-registry-url}/{repo}/{image-name}:{tag} --conf spark.master=k8s://https://{OKD-API-URL}  local:///opt/spark/examples/target/scala-2.11/jars/spark-examples_2.11-2.4.5.jar

เจ‡เฉฑเจฅเฉ‡:

โ€”เจจเจพเจฎ โ€” เจ‰เจธ เจ•เฉฐเจฎ เจฆเจพ เจจเจพเจฎ เจœเฉ‹ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจชเฉŒเจกเจธ เจฆเฉ‡ เจจเจพเจฎ เจฆเฉ‡ เจ—เจ เจจ เจตเจฟเฉฑเจš เจนเจฟเฉฑเจธเจพ เจฒเจตเฉ‡เจ—เจพ;

โ€”เจ•เจฒเจพเจธ โ€” เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒ เจฆเฉ€ เจ•เจฒเจพเจธ, เจœเจฆเฉ‹เจ‚ เจŸเจพเจธเจ• เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ;

โ€”conf โ€” เจธเจชเจพเจฐเจ• เจธเฉฐเจฐเจšเจจเจพ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ;

spark.executor.instances โ€” เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจธเจชเจพเจฐเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเจฐเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€;

spark.kubernetes.authenticate.driver.serviceAccountName - เจชเฉŒเจก เจฒเจพเจ‚เจš เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจธเฉ‡เจตเจพ เจ–เจพเจคเฉ‡ เจฆเจพ เจจเจพเจฎ (เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ API เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจธเฉฐเจฆเจฐเจญ เจ…เจคเฉ‡ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ);

spark.kubernetes.namespace โ€” Kubernetes เจจเฉ‡เจฎเจธเจชเฉ‡เจธ เจœเจฟเจธ เจตเจฟเฉฑเจš เจกเจฐเจพเจˆเจตเจฐ เจ…เจคเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเจฐ เจชเฉŒเจก เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡;

spark.submit.deployMode โ€” เจธเจชเจพเจฐเจ• เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฆเจพ เจคเจฐเฉ€เจ•เจพ (เจธเจŸเฉˆเจ‚เจกเจฐเจก เจธเจชเจพเจฐเจ•-เจธเจฌเจฎเจฟเจŸ โ€œเจ•เจฒเฉฑเจธเจŸเจฐโ€ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจธเจชเจพเจฐเจ• เจ†เจชเจฐเฉ‡เจŸเจฐ เจ…เจคเฉ‡ เจธเจชเจพเจฐเจ• โ€œเจ•เจฒเจพเจ‡เฉฐเจŸโ€ เจฆเฉ‡ เจฌเจพเจ…เจฆ เจฆเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจฒเจˆ);

spark.kubernetes.container.image - เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจœเฉ‹ เจชเฉŒเจกเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ;

spark.master โ€” Kubernetes API URL (เจฌเจพเจนเจฐเฉ€ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจ‡เจธเจฒเจˆ เจชเจนเฉเฉฐเจš เจธเจฅเจพเจจเจ• เจฎเจธเจผเฉ€เจจ เจคเฉ‹เจ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ);

local:// เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจšเฉฑเจฒเจฃเจฏเฉ‹เจ— เจธเจชเจพเจฐเจ• เจฆเจพ เจฎเจพเจฐเจ— เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจธเฉฐเจฌเฉฐเจงเจฟเจค OKD เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ 'เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจฌเจฃเจพเจ เจ—เจ เจชเฉŒเจกเจธ เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ - https://{OKD-WEBUI-URL}/console/project/{project}/browse/podsเฅค

เจตเจฟเจ•เจพเจธ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจตเจฟเจ•เจฒเจช เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจชเจพเจฐเจ• เจฆเจพ เจ‡เฉฑเจ• เจธเจพเจ‚เจเจพ เจ…เจงเจพเจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจธเจพเจฐเฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ‡ เจธเจจเฉˆเจชเจธเจผเจพเจŸ เจจเฉ‚เฉฐ เจฌเจพเจนเจฐเฉ€ เจธเจŸเฉ‹เจฐเฉ‡เจœ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจนเฉˆเจกเฉ‚เจช) เจตเจฟเฉฑเจš เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจพเจฒ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจธเจชเจพเจฐเจ•-เจ‡เฉฑเจ• เจฒเจฟเฉฐเจ• เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจœเจฎเฉเจนเจพเจ‚ เจ•เจฐเฉ‹เฅค เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, WebHDFS เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฌเจฃเจพเจ เจฌเจฟเจจเจพเจ‚ เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉฐเจธเจ•เจฐเจฃ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจฌเฉ‡เจจเจคเฉ€ เจญเฉ‡เจœเจฆเฉ‡ เจนเจพเจ‚ (เจ‡เฉฑเจฅเฉ‡ {host} WebHDFS เจธเฉ‡เจตเจพ เจฆเจพ เจฎเฉ‡เจœเจผเจฌเจพเจจ เจนเฉˆ, {port} WebHDFS เจธเฉ‡เจตเจพ เจฆเจพ เจชเฉ‹เจฐเจŸ เจนเฉˆ, {path-to-file-on-hdfs} เจซเจพเจˆเจฒ เจฆเจพ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจฎเจพเจฐเจ— เจนเฉˆ HDFS 'เจคเฉ‡):

curl -i -X PUT "http://{host}:{port}/webhdfs/v1/{path-to-file-on-hdfs}?op=CREATE

เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจพ เจœเจตเจพเจฌ เจฎเจฟเจฒเฉ‡เจ—เจพ (เจ‡เฉฑเจฅเฉ‡ {location} เจ‰เจน URL เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจซเจผเจพเจˆเจฒ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ):

HTTP/1.1 307 TEMPORARY_REDIRECT
Location: {location}
Content-Length: 0

เจธเจชเจพเจฐเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ HDFS เจตเจฟเฉฑเจš เจฒเฉ‹เจก เจ•เจฐเฉ‹ (เจ‡เฉฑเจฅเฉ‡ {path-to-local-file} เจฎเฉŒเจœเฉ‚เจฆเจพ เจนเฉ‹เจธเจŸ 'เจคเฉ‡ เจธเจชเจพเจฐเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒ เจฆเจพ เจฎเจพเจฐเจ— เจนเฉˆ):

curl -i -X PUT -T {path-to-local-file} "{location}"

เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ HDFS 'เจคเฉ‡ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เฉ€เจคเฉ€ เจธเจชเจพเจฐเจ• เจซเจพเจˆเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจธเจชเจพเจฐเจ•-เจธเจฌเจฎเจฟเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ (เจ‡เฉฑเจฅเฉ‡ {class-name} เจ‰เจธ เจ•เจฒเจพเจธ เจฆเจพ เจจเจพเจฎ เจนเฉˆ เจœเจฟเจธ เจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจชเฉ‚เจฐเจพ เจ•เจฐเจจ เจฒเจˆ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ):

/opt/spark/bin/spark-submit --name spark-test --class {class-name} --conf spark.executor.instances=3 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.kubernetes.namespace={project} --conf spark.submit.deployMode=cluster --conf spark.kubernetes.container.image={docker-registry-url}/{repo}/{image-name}:{tag} --conf spark.master=k8s://https://{OKD-API-URL}  hdfs://{host}:{port}/{path-to-file-on-hdfs}

เจ‡เจน เจจเฉ‹เจŸ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ•เจฟ HDFS เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐเจจ เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจฆเฉ‡ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ Dockerfile เจ…เจคเฉ‡ entrypoint.sh เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ - /opt/spark/jars เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจจเจฟเจฐเจญเจฐ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจพเจชเฉ€ เจ•เจฐเจจ เจฒเจˆ Dockerfile เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจเจ‚เจŸเจฐเฉ€ เจชเฉเจ†เจ‡เฉฐเจŸ เจตเจฟเฉฑเจš SPARK_CLASSPATH เจตเจฟเฉฑเจš HDFS เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹เฅค

เจฆเฉ‚เจœเจพ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ‡เจธ - เจ…เจชเจพเจšเฉ‡ เจฒเจฟเจตเฉ€

เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจœเจฆเฉ‹เจ‚ เจ•เฉ‹เจˆ เจ•เฉฐเจฎ เจตเจฟเจ•เจธเจฟเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจธเจตเจพเจฒ เจชเฉˆเจฆเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจธ เจจเฉ‚เฉฐ CI/CD เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡ เจ…เจคเฉ‡ เจ‡เจธ เจฆเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ• เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฅเจพเจจเจ• เจธเจชเจพเจฐเจ•-เจธเจฌเจฎเจฟเจŸ เจ•เจพเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจ‡เจน CI/CD เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธเจจเฉ‚เฉฐ CI เจธเจฐเจตเจฐ เจเจœเฉฐเจŸเจพเจ‚/เจฐเจจเจฐเจพเจ‚ 'เจคเฉ‡ เจธเจชเจพเจฐเจ• เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ API เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจ•เฉ‡เจธ เจฒเจˆ, เจŸเฉ€เจšเจพ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจจเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจนเฉ‹เจธเจŸ เจ•เฉ€เจคเฉ‡ เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• REST API เจตเจœเฉ‹เจ‚ เจ…เจชเจพเจšเฉ‡ เจฒเจฟเจตเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เฉ€เจคเฉ€ เจนเฉˆเฅค เจ‡เจธเจฆเฉ€ เจฎเจฆเจฆ เจจเจพเจฒ, เจคเฉเจธเฉ€เจ‚ เจจเจฟเจฏเจฎเจค cURL เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเฉ‹ เจ•เจฟ เจ•เจฟเจธเฉ‡ เจตเฉ€ CI เจนเฉฑเจฒ เจฆเฉ‡ เจ…เจงเจพเจฐ 'เจคเฉ‡ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ Kubernetes เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เจธเจฆเจพ เจชเจฒเฉ‡เจธเจฎเฉˆเจ‚เจŸ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ API เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฆเฉ‡ เจฎเฉเฉฑเจฆเฉ‡ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ

เจšเจฒเฉ‹ เจ‡เจธเจจเฉ‚เฉฐ เจฆเฉ‚เจœเฉ‡ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ‡ เจ•เฉ‡เจธ เจตเจœเฉ‹เจ‚ เจ‰เจœเจพเจ—เจฐ เจ•เจฐเฉ€เจ - เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจฒเฉ‚เจช เจตเจฟเฉฑเจš เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ CI/CD เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพเฅค

Apache Livy เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ - เจ‡เจน เจ‡เฉฑเจ• HTTP เจธเจฐเจตเจฐ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจ…เจคเฉ‡ เจ‡เฉฑเจ• RESTful API เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจชเจพเจธ เจ•เจฐเจ•เฉ‡ เจฐเจฟเจฎเฉ‹เจŸเจฒเฉ€ เจธเจชเจพเจฐเจ•-เจธเจฌเจฎเจฟเจŸ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจฐเจตเจพเจ‡เจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• HDP เจตเฉฐเจก เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ เจญเฉ‡เจœเจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจชเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจ‰เจšเจฟเจค เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจ…เจคเฉ‡ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ OKD เจœเจพเจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ Kubernetes เจธเจฅเจพเจชเจจเจพ เจฒเจˆ เจตเฉ€ เจคเฉˆเจจเจพเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เจน - github.com/ttauveron/k8s-big-data-experiments/tree/master/livy-spark-2.3. เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจฒเจˆ, เจ‡เฉฑเจ• เจธเจฎเจพเจจ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€, เจœเจฟเจธ เจตเจฟเฉฑเจš เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจกเฉŒเจ•เจฐเจซเจพเจˆเจฒ เจคเฉ‹เจ‚ เจธเจชเจพเจฐเจ• เจธเฉฐเจธเจ•เจฐเจฃ 2.4.5 เจธเจผเจพเจฎเจฒ เจนเฉˆ:

FROM java:8-alpine

ENV SPARK_HOME=/opt/spark
ENV LIVY_HOME=/opt/livy
ENV HADOOP_CONF_DIR=/etc/hadoop/conf
ENV SPARK_USER=spark

WORKDIR /opt

RUN apk add --update openssl wget bash && 
    wget -P /opt https://downloads.apache.org/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz && 
    tar xvzf spark-2.4.5-bin-hadoop2.7.tgz && 
    rm spark-2.4.5-bin-hadoop2.7.tgz && 
    ln -s /opt/spark-2.4.5-bin-hadoop2.7 /opt/spark

RUN wget http://mirror.its.dal.ca/apache/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip && 
    unzip apache-livy-0.7.0-incubating-bin.zip && 
    rm apache-livy-0.7.0-incubating-bin.zip && 
    ln -s /opt/apache-livy-0.7.0-incubating-bin /opt/livy && 
    mkdir /var/log/livy && 
    ln -s /var/log/livy /opt/livy/logs && 
    cp /opt/livy/conf/log4j.properties.template /opt/livy/conf/log4j.properties

ADD livy.conf /opt/livy/conf
ADD spark-defaults.conf /opt/spark/conf/spark-defaults.conf
ADD entrypoint.sh /entrypoint.sh

ENV PATH="/opt/livy/bin:${PATH}"

EXPOSE 8998

ENTRYPOINT ["/entrypoint.sh"]
CMD ["livy-server"]

เจคเจฟเจ†เจฐ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจกเฉŒเจ•เจฐ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจฌเจฃเจพเจ‡เจ† เจ…เจคเฉ‡ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ OKD เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เฅค เจ‡เจธ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ, เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹ ({เจฐเจœเจฟเจธเจŸเจฐเฉ€-url} - เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจฆเจพ URL, {image-name} - เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฆเจพ เจจเจพเจฎ, {tag} - เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจŸเฉˆเจ—, {livy-url} - เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ URL เจœเจฟเฉฑเจฅเฉ‡ เจธเจฐเจตเจฐ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจฒเจฟเจตเฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพ; โ€œเจฐเฉ‚เจŸโ€ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจœเฉ‡เจ•เจฐ Red Hat OpenShift เจจเฉ‚เฉฐ Kubernetes เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจจเฉ‹เจกเจชเฉ‹เจฐเจŸ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ เจชเฉเจฐเจตเฉ‡เจธเจผ เจœเจพเจ‚ เจธเจฐเจตเจฟเจธ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ):

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    component: livy
  name: livy
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      component: livy
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        component: livy
    spec:
      containers:
        - command:
            - livy-server
          env:
            - name: K8S_API_HOST
              value: localhost
            - name: SPARK_KUBERNETES_IMAGE
              value: 'gnut3ll4/spark:v1.0.14'
          image: '{registry-url}/{image-name}:{tag}'
          imagePullPolicy: Always
          name: livy
          ports:
            - containerPort: 8998
              name: livy-rest
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /var/log/livy
              name: livy-log
            - mountPath: /opt/.livy-sessions/
              name: livy-sessions
            - mountPath: /opt/livy/conf/livy.conf
              name: livy-config
              subPath: livy.conf
            - mountPath: /opt/spark/conf/spark-defaults.conf
              name: spark-config
              subPath: spark-defaults.conf
        - command:
            - /usr/local/bin/kubectl
            - proxy
            - '--port'
            - '8443'
          image: 'gnut3ll4/kubectl-sidecar:latest'
          imagePullPolicy: Always
          name: kubectl
          ports:
            - containerPort: 8443
              name: k8s-api
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: spark
      serviceAccountName: spark
      terminationGracePeriodSeconds: 30
      volumes:
        - emptyDir: {}
          name: livy-log
        - emptyDir: {}
          name: livy-sessions
        - configMap:
            defaultMode: 420
            items:
              - key: livy.conf
                path: livy.conf
            name: livy-config
          name: livy-config
        - configMap:
            defaultMode: 420
            items:
              - key: spark-defaults.conf
                path: spark-defaults.conf
            name: livy-config
          name: spark-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: livy-config
data:
  livy.conf: |-
    livy.spark.deploy-mode=cluster
    livy.file.local-dir-whitelist=/opt/.livy-sessions/
    livy.spark.master=k8s://http://localhost:8443
    livy.server.session.state-retain.sec = 8h
  spark-defaults.conf: 'spark.kubernetes.container.image        "gnut3ll4/spark:v1.0.14"'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: livy
  name: livy
spec:
  ports:
    - name: livy-rest
      port: 8998
      protocol: TCP
      targetPort: 8998
  selector:
    component: livy
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: route.openshift.io/v1
kind: Route
metadata:
  labels:
    app: livy
  name: livy
spec:
  host: {livy-url}
  port:
    targetPort: livy-rest
  to:
    kind: Service
    name: livy
    weight: 100
  wildcardPolicy: None

เจ‡เจธเจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจ…เจคเฉ‡ เจชเฉŒเจก เจจเฉ‚เฉฐ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจฒเจพเจ‚เจš เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฒเจฟเจตเฉ€ เจ—เฉเจฐเจพเจซเจฟเจ•เจฒ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฒเจฟเฉฐเจ• 'เจคเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉˆ: http://{livy-url}/ui. เจฒเจฟเจตเฉ€ เจฆเฉ‡ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจจเฉ‚เฉฐ REST เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจชเฉ‹เจธเจŸเจฎเฉˆเจจเฅค เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเฉฐเจ—เฉเจฐเจนเจฟ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจนเฉ‡เจ เจพเจ‚ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ (เจฒเฉฐเจš เจ•เฉ€เจคเฉ‡ เจ•เจพเจฐเจœ เจฆเฉ‡ เจธเฉฐเจšเจพเจฒเจจ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจธเฉฐเจฐเจšเจจเจพ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจธ เจจเฉ‚เฉฐ "args" เจเจฐเฉ‡ เจตเจฟเฉฑเจš เจชเจพเจธ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ):

{
    "info": {
        "_postman_id": "be135198-d2ff-47b6-a33e-0d27b9dba4c8",
        "name": "Spark Livy",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "1 Submit job with jar",
            "request": {
                "method": "POST",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/json"
                    }
                ],
                "body": {
                    "mode": "raw",
                    "raw": "{nt"file": "local:///opt/spark/examples/target/scala-2.11/jars/spark-examples_2.11-2.4.5.jar", nt"className": "org.apache.spark.examples.SparkPi",nt"numExecutors":1,nt"name": "spark-test-1",nt"conf": {ntt"spark.jars.ivy": "/tmp/.ivy",ntt"spark.kubernetes.authenticate.driver.serviceAccountName": "spark",ntt"spark.kubernetes.namespace": "{project}",ntt"spark.kubernetes.container.image": "{docker-registry-url}/{repo}/{image-name}:{tag}"nt}n}"
                },
                "url": {
                    "raw": "http://{livy-url}/batches",
                    "protocol": "http",
                    "host": [
                        "{livy-url}"
                    ],
                    "path": [
                        "batches"
                    ]
                }
            },
            "response": []
        },
        {
            "name": "2 Submit job without jar",
            "request": {
                "method": "POST",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/json"
                    }
                ],
                "body": {
                    "mode": "raw",
                    "raw": "{nt"file": "hdfs://{host}:{port}/{path-to-file-on-hdfs}", nt"className": "{class-name}",nt"numExecutors":1,nt"name": "spark-test-2",nt"proxyUser": "0",nt"conf": {ntt"spark.jars.ivy": "/tmp/.ivy",ntt"spark.kubernetes.authenticate.driver.serviceAccountName": "spark",ntt"spark.kubernetes.namespace": "{project}",ntt"spark.kubernetes.container.image": "{docker-registry-url}/{repo}/{image-name}:{tag}"nt},nt"args": [ntt"HADOOP_CONF_DIR=/opt/spark/hadoop-conf",ntt"MASTER=k8s://https://kubernetes.default.svc:8443"nt]n}"
                },
                "url": {
                    "raw": "http://{livy-url}/batches",
                    "protocol": "http",
                    "host": [
                        "{livy-url}"
                    ],
                    "path": [
                        "batches"
                    ]
                }
            },
            "response": []
        }
    ],
    "event": [
        {
            "listen": "prerequest",
            "script": {
                "id": "41bea1d0-278c-40c9-ad42-bf2e6268897d",
                "type": "text/javascript",
                "exec": [
                    ""
                ]
            }
        },
        {
            "listen": "test",
            "script": {
                "id": "3cdd7736-a885-4a2d-9668-bd75798f4560",
                "type": "text/javascript",
                "exec": [
                    ""
                ]
            }
        }
    ],
    "protocolProfileBehavior": {}
}

เจšเจฒเฉ‹ เจธเฉฐเจ—เฉเจฐเจนเจฟ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเฉ€เจ, OKD เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ 'เจคเฉ‡ เจœเจพเจ“ เจ…เจคเฉ‡ เจœเจพเจ‚เจš เจ•เจฐเฉ‹ เจ•เจฟ เจ•เฉฐเจฎ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจฒเจพเจ‚เจš เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆ - https://{OKD-WEBUI-URL}/console/project/{project}/browse/podsเฅค เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจฒเจฟเจตเฉ€ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ (http://{livy-url}/ui) เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉˆเจธเจผเจจ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจœเจฟเจธ เจตเจฟเฉฑเจš, Livy API เจœเจพเจ‚ เจ—เฉเจฐเจพเจซเจฟเจ•เจฒ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡, เจคเฉเจธเฉ€เจ‚ เจ•เจพเจฐเจœ เจฆเฉ€ เจชเฉเจฐเจ—เจคเฉ€ เจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ• เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจธเฉˆเจธเจผเจจ เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจฒเฉŒเจ—

เจ†เจ“ เจนเฉเจฃ เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจฒเจฟเจตเฉ€ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ†เจ“ เจฒเจฟเจตเฉ€ เจธเจฐเจตเจฐ เจจเจพเจฒ เจชเฉŒเจก เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจฒเจฟเจตเฉ€ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจฆเฉ‡ เจฒเฉŒเจ—เจธ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ - https://{OKD-WEBUI-URL}/console/project/{project}/browse/pods/{livy-pod-name }?tab=logs. เจ‰เจนเจจเจพเจ‚ เจคเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจœเจฆเฉ‹เจ‚ "livy" เจจเจพเจฎ เจฆเฉ‡ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจตเจฟเฉฑเจš Livy REST API เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ‡เฉฑเจ• เจธเจชเจพเจฐเจ•-เจธเจฌเจฎเจฟเจŸ เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ‰เฉฑเจชเจฐ เจตเจฐเจคเจฟเจ† เจนเฉˆ (เจ‡เฉฑเจฅเฉ‡ {livy-pod-name} เจฌเจฃเจพเจ เจ—เจ เจชเฉŒเจก เจฆเจพ เจจเจพเจฎ เจนเฉˆเฅค เจฒเจฟเจตเฉ€ เจธเจฐเจตเจฐ เจจเจพเจฒ)เฅค เจธเฉฐเจ—เฉเจฐเจนเจฟ เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ€ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจตเฉ€ เจชเฉ‡เจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• Livy เจธเจฐเจตเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฐเจฟเจฎเฉ‹เจŸเจฒเฉ€ เจ‡เฉฑเจ• เจธเจชเจพเจฐเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจนเฉ‹เจธเจŸ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

เจคเฉ€เจœเจพ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ‡เจธ - เจธเจชเจพเจฐเจ• เจ†เจชเจฐเฉ‡เจŸเจฐ

เจนเฉเจฃ เจœเจฆเฉ‹เจ‚ เจ•เฉฐเจฎ เจฆเฉ€ เจœเจพเจ‚เจš เจนเฉ‹ เจšเฉเฉฑเจ•เฉ€ เจนเฉˆ, เจ‡เจธ เจจเฉ‚เฉฐ เจจเจฟเจฏเจฎเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฆเจพ เจธเจตเจพเจฒ เจ‰เฉฑเจ เจฆเจพ เจนเฉˆเฅค เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจฏเจฎเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฆเจพ เจฎเฉ‚เจฒ เจคเจฐเฉ€เจ•เจพ เจ•เฉเจฐเฉ‹เจจเจœเฉŒเจฌ เจ‡เจ•เจพเจˆ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจจ เจฒเจˆ เจ†เจชเจฐเฉ‡เจŸเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฌเจนเฉเจค เจฎเจธเจผเจนเฉ‚เจฐ เจนเฉˆ เจ…เจคเฉ‡ เจธเจชเจพเจฐเจ• เจฒเจˆ เจ‡เฉฑเจ• เจ•เจพเจซเจผเฉ€ เจชเจฐเจฟเจชเฉฑเจ• เจ“เจชเจฐเฉ‡เจŸเจฐ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ‡เจน เจตเฉ€ เจนเฉˆเฅค เจเจ‚เจŸเจฐเจชเฉเจฐเจพเจˆเจœเจผ-เจชเฉฑเจงเจฐ เจฆเฉ‡ เจนเฉฑเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, Lightbend FastData เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ)เฅค เจ…เจธเฉ€เจ‚ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ - เจธเจชเจพเจฐเจ• (2.4.5) เจฆเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจฅเจฟเจฐ เจธเฉฐเจธเจ•เจฐเจฃ เจตเจฟเฉฑเจš เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจธเฉ€เจฎเจค เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเจ•เจฒเจช เจนเจจ, เจœเจฆเฉ‹เจ‚ เจ•เจฟ เจ…เจ—เจฒเจพ เจชเฉเจฐเจฎเฉเฉฑเจ– เจธเฉฐเจธเจ•เจฐเจฃ (3.0.0) เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฒเจˆ เจชเฉ‚เจฐเจพ เจธเจฎเจฐเจฅเจจ เจ˜เฉ‹เจธเจผเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เจธเจฆเฉ€ เจฐเจฟเจฒเฉ€เจœเจผ เจฎเจฟเจคเฉ€ เจ…เจฃเจœเจพเจฃ เจนเฉˆเฅค . เจธเจชเจพเจฐเจ• เจ†เจชเจฐเฉ‡เจŸเจฐ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเจ•เจฒเจชเจพเจ‚ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจธเจชเจพเจฐเจ• เจชเฉŒเจกเจœเจผ เจตเจฟเฉฑเจš เจนเฉˆเจกเฉ‚เจช เจเจ•เจธเฉˆเจธ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ•เฉŒเจจเจซเจฟเจ—เจฎเฉˆเจช เจจเฉ‚เฉฐ เจฎเจพเจŠเจ‚เจŸ เจ•เจฐเจจเจพ) เจ…เจคเฉ‡ เจจเจฟเจฏเจฎเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจฏเจค เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจœเฉ‹เฉœ เจ•เฉ‡ เจ‡เจธ เจ•เจฎเฉ€ เจฆเฉ€ เจญเจฐเจชเจพเจˆ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ เจ…เจชเจพเจšเฉ‡ เจธเจชเจพเจฐเจ• เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉˆ
เจšเจฒเฉ‹ เจ‡เจธเจจเฉ‚เฉฐ เจคเฉ€เจœเฉ‡ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจœเฉ‹เจ‚ เจ‰เจœเจพเจ—เจฐ เจ•เจฐเฉ€เจ - เจ‡เฉฑเจ• เจ‰เจคเจชเจพเจฆเจจ เจฒเฉ‚เจช เจตเจฟเฉฑเจš เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ เจจเจฟเจฏเจฎเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจšเจฒเจพ เจฐเจนเฉ‡ เจนเจจเฅค

เจธเจชเจพเจฐเจ• เจ†เจชเจฐเฉ‡เจŸเจฐ เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจนเฉˆ เจ…เจคเฉ‡ เจ—เฉ‚เจ—เจฒ เจ•เจฒเจพเจ‰เจก เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจตเจฟเจ•เจธเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ - github.com/GoogleCloudPlatform/spark-on-k8s-operator. เจ‡เจธ เจฆเฉ€ เจธเจฅเจพเจชเจจเจพ 3 เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเจพเจฒ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ:

  1. เจฒเจพเจˆเจŸเจฌเฉˆเจ‚เจก เจซเจพเจธเจŸเจกเจพเจŸเจพ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ/เจ•เจฒเจพเจŠเจกเจซเจฒเฉ‹ เจธเจฅเจพเจชเจจเจพ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚;
  2. เจนเฉˆเจฒเจฎ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ:
    helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
    helm install incubator/sparkoperator --namespace spark-operator
    	

  3. เจ…เจงเจฟเจ•เจพเจฐเจค เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ (https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/tree/master/manifest) เจคเฉ‹เจ‚ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพเฅค เจ‡เจน เจนเฉ‡เจ  เจฒเจฟเจ–เจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ - Cloudflow เจตเจฟเฉฑเจš API เจธเฉฐเจธเจ•เจฐเจฃ v1beta1 เจตเจพเจฒเจพ เจ‡เฉฑเจ• เจ†เจชเจฐเฉ‡เจŸเจฐ เจธเจผเจพเจฎเจฒ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ‡เจธ เจ•เจฟเจธเจฎ เจฆเฉ€ เจธเจฅเจพเจชเจจเจพ เจตเจฐเจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจธเจชเจพเจฐเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจตเจฐเจฃเจจ Git เจตเจฟเฉฑเจš เจ‰เจšเจฟเจค API เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจ‰เจฆเจพเจนเจฐเจจ เจŸเฉˆเจ—เจพเจ‚ 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, "v1beta1-0.9.0-2.4.0". เจ†เจชเจฐเฉ‡เจŸเจฐ เจฆเจพ เจธเฉฐเจธเจ•เจฐเจฃ "เจตเจฐเจœเจจ" เจธเจผเจฌเจฆเจ•เฉ‹เจธเจผ เจตเจฟเฉฑเจš เจ†เจชเจฐเฉ‡เจŸเจฐ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ CRD เจฆเฉ‡ เจตเจฐเจฃเจจ เจตเจฟเฉฑเจš เจชเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:
    oc get crd sparkapplications.sparkoperator.k8s.io -o yaml
    	

เจœเฉ‡เจ•เจฐ เจ†เจชเจฐเฉ‡เจŸเจฐ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจคเจพเจ‚ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจธเจชเจพเจฐเจ• เจ“เจชเจฐเฉ‡เจŸเจฐ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ•เจฟเจฐเจฟเจ†เจธเจผเฉ€เจฒ เจชเฉŒเจก เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ•เจฒเจพเจ‰เจกเจซเจฒเฉ‹ เจธเจฅเจพเจชเจจเจพ เจฒเจˆ เจ•เจฒเจพเจ‰เจกเจซเจฒเฉ‹ เจธเจชเฉ‡เจธ เจตเจฟเฉฑเจš เจ•เจฒเจพเจ‰เจกเจซเจฒเฉ‹-เจเจซเจกเฉ€เจชเฉ€-เจธเจชเจพเจฐเจ•เจ“เจชเจฐเฉ‡เจŸเจฐ) เจ…เจคเฉ‡ "เจธเจชเจพเจฐเจ•เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจœเจผ" เจจเจพเจฎเจ• เจ‡เฉฑเจ• เจ…เจจเฉเจธเจพเจฐเฉ€ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจธเจฐเฉ‹เจค เจ•เจฟเจธเจฎ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€เฅค . เจคเฉเจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจ‰เจชเจฒเจฌเจง เจธเจชเจพเจฐเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

oc get sparkapplications -n {project}

เจธเจชเจพเจฐเจ• เจ†เจชเจฐเฉ‡เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉฐเจฎ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ 3 เจšเฉ€เจœเจผเจพเจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

  • เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจ“ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚, เจจเจพเจฒ เจนเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ…เจคเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒเจพเจ‚ เจธเจผเจพเจฎเจฒ เจนเฉ‹เจฃเฅค เจจเจฟเจธเจผเจพเจจเจพ เจคเจธเจตเฉ€เจฐ เจตเจฟเฉฑเจš, เจ‡เจน เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจนเฉˆ เจœเฉ‹ CI/CD เจชเฉœเจพเจ… 'เจคเฉ‡ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจ•เจฒเฉฑเจธเจŸเจฐ 'เจคเฉ‡ เจŸเฉˆเจธเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ;
  • เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจคเฉ‹เจ‚ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจฒเจˆ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเฉ‹;
  • "เจธเจชเจพเจฐเจ•เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ" เจ•เจฟเจธเจฎ เจ…เจคเฉ‡ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจ•เจพเจฐเจœ เจฆเฉ‡ เจตเฉ‡เจฐเจตเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจคเจฟเจ†เจฐ เจ•เจฐเฉ‹เฅค เจ‰เจฆเจพเจนเจฐเจจ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจ…เจงเจฟเจ•เจพเจฐเจค เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเจจ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ. github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/v1beta1-0.9.0-2.4.0/examples/spark-pi.yaml). เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸเฉ‹ เจฌเจพเจฐเฉ‡ เจจเฉ‹เจŸ เจ•เจฐเจจ เจฒเจˆ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจจเฉเจ•เจคเฉ‡ เจนเจจ:
    1. "apiVersion" เจธเจผเจฌเจฆเจ•เฉ‹เจธเจผ เจจเฉ‚เฉฐ เจ“เจชเจฐเฉ‡เจŸเจฐ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ API เจธเฉฐเจธเจ•เจฐเจฃ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ;
    2. โ€œmetadata.namespaceโ€ เจกเจฟเจ•เจธเจผเจจเจฐเฉ€ เจตเจฟเฉฑเจš เจ‰เจธ เจจเจพเจฎ-เจธเจชเฉ‡เจธ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€;
    3. "spec.image" เจธเจผเจฌเจฆเจ•เฉ‹เจธเจผ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจฌเจฃเจพเจ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจฆเจพ เจชเจคเจพ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ;
    4. โ€œspec.mainClassโ€ เจกเจฟเจ•เจธเจผเจจเจฐเฉ€ เจตเจฟเฉฑเจš เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจ•เจฒเจพเจธ เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ เจœเจฟเจธเจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃ 'เจคเฉ‡ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ;
    5. โ€œspec.mainApplicationFileโ€ เจกเจฟเจ•เจธเจผเจจเจฐเฉ€ เจตเจฟเฉฑเจš เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจœเจพเจฐ เจซเจพเจˆเจฒ เจฆเจพ เจฎเจพเจฐเจ— เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ;
    6. โ€œspec.sparkVersionโ€ เจกเจฟเจ•เจธเจผเจจเจฐเฉ€ เจตเจฟเฉฑเจš เจตเจฐเจคเฉ‡ เจœเจพ เจฐเจนเฉ‡ เจธเจชเจพเจฐเจ• เจฆเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ;
    7. โ€œspec.driver.serviceAccountโ€ เจกเจฟเจ•เจธเจผเจจเจฐเฉ€ เจจเฉ‚เฉฐ เจธเฉฐเจฌเฉฐเจงเจฟเจค Kubernetes เจจเฉ‡เจฎเจธเจชเฉ‡เจธ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจธเฉ‡เจตเจพ เจ–เจพเจคเจพ เจจเจฟเจฐเจงเจพเจฐเจฟเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจœเฉ‹ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ;
    8. "spec.executor" เจกเจฟเจ•เจธเจผเจจเจฐเฉ€ เจจเฉ‚เฉฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจˆ เจจเจฟเจฐเจงเจพเจฐเจค เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจฆเจฐเจธเจพเจ‰เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ;
    9. "spec.volumeMounts" เจกเจฟเจ•เจธเจผเจจเจฐเฉ€ เจตเจฟเฉฑเจš เจธเจฅเจพเจจเจ• เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจฅเจพเจจเจ• เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจซเจพเจˆเจฒเจพเจ‚ เจฌเจฃเจพเจˆเจ†เจ‚ เจœเจพเจฃเจ—เฉ€เจ†เจ‚เฅค

เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ (เจ‡เฉฑเจฅเฉ‡ {spark-service-account} เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจ–เจพเจคเจพ เจนเฉˆ):

apiVersion: "sparkoperator.k8s.io/v1beta1"
kind: SparkApplication
metadata:
  name: spark-pi
  namespace: {project}
spec:
  type: Scala
  mode: cluster
  image: "gcr.io/spark-operator/spark:v2.4.0"
  imagePullPolicy: Always
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.11-2.4.0.jar"
  sparkVersion: "2.4.0"
  restartPolicy:
    type: Never
  volumes:
    - name: "test-volume"
      hostPath:
        path: "/tmp"
        type: Directory
  driver:
    cores: 0.1
    coreLimit: "200m"
    memory: "512m"
    labels:
      version: 2.4.0
    serviceAccount: {spark-service-account}
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"
  executor:
    cores: 1
    instances: 1
    memory: "512m"
    labels:
      version: 2.4.0
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"

เจ‡เจน เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจ–เจพเจคเจพ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจธเจฆเฉ‡ เจฒเจˆ, เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจœเจผเจฐเฉ‚เจฐเฉ€ เจฐเฉ‹เจฒ เจฌเจพเจˆเจกเจฟเฉฐเจ—เจธ เจฌเจฃเจพเจ‰เจฃเฉ€เจ†เจ‚ เจšเจพเจนเฉ€เจฆเฉ€เจ†เจ‚ เจนเจจ เจœเฉ‹ เจธเจชเจพเจฐเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ API (เจœเฉ‡เจ•เจฐ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉ‹เจตเฉ‡) เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจจ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจชเจนเฉเฉฐเจš เจ…เจงเจฟเจ•เจพเจฐ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจชเฉŒเจก เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ†เจ“ เจœเจผเจฐเฉ‚เจฐเฉ€ เจฐเฉ‹เจฒ เจฌเจพเจˆเจกเจฟเฉฐเจ— เจฌเจฃเจพเจˆเจ:

oc adm policy add-role-to-user edit system:serviceaccount:{project}:{spark-service-account} -n {project}

เจ‡เจน เจตเฉ€ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ เจ•เจฟ เจ‡เจธ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจจเจฟเจฐเจงเจพเจฐเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• "hadoopConfigMap" เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจธเจผเจพเจฎเจฒ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจธเฉฐเจฌเฉฐเจงเจฟเจค เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจฐเฉฑเจ–เฉ‡ เจฌเจฟเจจเจพเจ‚ Hadoop เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• ConfigMap เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจจเจฟเจฏเจฎเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉฐเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจตเฉ€ เจขเฉเจ•เจตเจพเจ‚ เจนเฉˆ - "เจธเจผเจกเจฟเจŠเจฒ" เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจ•เจพเจฐเจœ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฎเจพเจ‚-เจธเจพเจฐเจฃเฉ€ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจ‰เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ เจจเฉ‚เฉฐ spark-pi.yaml เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจธเฉ‡เจต เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจธเจพเจกเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

oc apply -f spark-pi.yaml

เจ‡เจน "เจธเจชเจพเจฐเจ•เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจœเจผ" เจ•เจฟเจธเจฎ เจฆเจพ เจ‡เฉฑเจ• เจตเจธเจคเฉ‚ เจฌเจฃเจพเจเจ—เจพ:

oc get sparkapplications -n {project}
> NAME       AGE
> spark-pi   22h

เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจชเฉŒเจก เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ, เจœเจฟเจธเจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฌเจฃเจพเจˆเจ†เจ‚ เจ—เจˆเจ†เจ‚ "เจธเจชเจพเจฐเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚" เจตเจฟเฉฑเจš เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ€ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹:

oc get sparkapplications spark-pi -o yaml -n {project}

เจ•เฉฐเจฎ เจฆเฉ‡ เจชเฉ‚เจฐเจพ เจนเฉ‹เจฃ 'เจคเฉ‡, POD "เจฎเฉเจ•เฉฐเจฎเจฒ" เจธเจฅเจฟเจคเฉ€ 'เจคเฉ‡ เจšเจฒเฉ‡ เจœเจพเจตเฉ‡เจ—เจพ, เจœเฉ‹ เจ•เจฟ "เจธเจชเจพเจฐเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚" เจตเจฟเฉฑเจš เจตเฉ€ เจ…เฉฑเจชเจกเฉ‡เจŸ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฟเฉฑเจš เจœเจพเจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ (เจ‡เฉฑเจฅเฉ‡ {sparkapplications-pod-name} เจšเฉฑเจฒ เจฐเจนเฉ‡ เจ•เฉฐเจฎ เจฆเฉ‡ เจชเฉŒเจก เจฆเจพ เจจเจพเจฎ เจนเฉˆ):

oc logs {sparkapplications-pod-name} -n {project}

เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฟเจธเจผเฉ‡เจธเจผ เจธเจชเจพเจฐเจ•เจŸเฉ€เจเจฒ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจตเฉ€ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจธเจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจจเจพเจฒ เจ•เจฒเฉ‹เจจ เจ•เจฐเฉ‹, เจ—เฉ‹ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ‡เจธ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ“:

git clone https://github.com/GoogleCloudPlatform/spark-on-k8s-operator.git
cd spark-on-k8s-operator/
wget https://dl.google.com/go/go1.13.3.linux-amd64.tar.gz
tar -xzf go1.13.3.linux-amd64.tar.gz
sudo mv go /usr/local
mkdir $HOME/Projects
export GOROOT=/usr/local/go
export GOPATH=$HOME/Projects
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
go -version
cd sparkctl
go build -o sparkctl
sudo mv sparkctl /usr/local/bin

เจ†เจ‰ เจšเฉฑเจฒ เจฐเจนเฉ‡ เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ:

sparkctl list -n {project}

เจ†เจ‰ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจฒเจˆ เจ‡เฉฑเจ• เจตเจฐเจฃเจจ เจ•เจฐเฉ€เจ:

vi spark-app.yaml

apiVersion: "sparkoperator.k8s.io/v1beta1"
kind: SparkApplication
metadata:
  name: spark-pi
  namespace: {project}
spec:
  type: Scala
  mode: cluster
  image: "gcr.io/spark-operator/spark:v2.4.0"
  imagePullPolicy: Always
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.11-2.4.0.jar"
  sparkVersion: "2.4.0"
  restartPolicy:
    type: Never
  volumes:
    - name: "test-volume"
      hostPath:
        path: "/tmp"
        type: Directory
  driver:
    cores: 1
    coreLimit: "1000m"
    memory: "512m"
    labels:
      version: 2.4.0
    serviceAccount: spark
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"
  executor:
    cores: 1
    instances: 1
    memory: "512m"
    labels:
      version: 2.4.0
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"

เจ†เจ‰ sparkctl เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจตเจฐเจฃเจฟเจค เจ•เจพเจฐเจœ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:

sparkctl create spark-app.yaml -n {project}

เจ†เจ‰ เจšเฉฑเจฒ เจฐเจนเฉ‡ เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ:

sparkctl list -n {project}

เจ†เจ‰ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ‡ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจฆเฉ€เจ†เจ‚ เจ˜เจŸเจจเจพเจตเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ:

sparkctl event spark-pi -n {project} -f

เจšเจฒเฉ‹ เจšเฉฑเจฒ เจฐเจนเฉ‡ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ:

sparkctl status spark-pi -n {project}

เจธเจฟเฉฑเจŸเฉ‡ เจตเจœเฉ‹เจ‚, เจฎเฉˆเจ‚ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจธเจชเจพเจฐเจ• (2.4.5) เจฆเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจฅเจฟเจฐ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจ–เฉ‹เจœเฉ‡ เจ—เจ เจจเฉเจ•เจธเจพเจจเจพเจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐเจจเจพ เจšเจพเจนเจพเจ‚เจ—เจพ:

  1. เจชเจนเจฟเจฒเจพ เจ…เจคเฉ‡, เจธเจผเจพเจ‡เจฆ, เจฎเฉเฉฑเจ– เจจเฉเจ•เจธเจพเจจ เจกเฉ‡เจŸเจพ เจธเจฅเจพเจจ เจฆเฉ€ เจ˜เจพเจŸ เจนเฉˆเฅค YARN เจฆเฉ€เจ†เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจ•เจฎเฉ€เจ†เจ‚ เจฆเฉ‡ เจฌเจพเจตเจœเฉ‚เจฆ, เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจซเจพเจ‡เจฆเฉ‡ เจตเฉ€ เจธเจจ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ•เฉ‹เจก เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเจพ เจธเจฟเจงเจพเจ‚เจค (เจกเจพเจŸเจพ เจคเฉ‹เจ‚ เจ•เฉ‹เจก เจฆเฉ€ เจฌเจœเจพเจ)เฅค เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจงเฉฐเจจเจตเจพเจฆ, เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจจเฉ‹เจกเจพเจ‚ 'เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ เจœเจฟเฉฑเจฅเฉ‡ เจ—เจฃเจจเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจกเฉ‡เจŸเจพ เจธเจฅเจฟเจค เจธเฉ€, เจ…เจคเฉ‡ เจจเฉˆเจŸเจตเจฐเจ• เจ‰เฉฑเจคเฉ‡ เจกเฉ‡เจŸเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฒเฉฑเจ—เจฃ เจตเจพเจฒเจพ เจธเจฎเจพเจ‚ เจ•เจพเจซเจผเฉ€ เจ˜เฉฑเจŸ เจ—เจฟเจ† เจธเฉ€เฅค Kubernetes เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจธเจพเจจเฉ‚เฉฐ เจชเฉ‚เจฐเฉ‡ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจตเจฟเฉฑเจš เจ•เจฟเจธเฉ‡ เจ•เฉฐเจฎ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฒเจฟเจœเจพเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจ•เจฐเจจเจพ เจชเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ‰เจน เจ•เจพเจซเจผเฉ€ เจตเฉฑเจกเฉ‡ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจคเจพเจ‚ เจŸเจพเจธเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจŸเจพเจˆเจฎ เจ•เจพเจซเจผเฉ€ เจตเฉฑเจง เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจ…เจธเจฅเจพเจˆ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฒเจˆ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ€ เจกเจฟเจธเจ• เจธเจชเฉ‡เจธ เจฆเฉ€ เจ•เจพเจซเจผเฉ€ เจตเฉฑเจกเฉ€ เจฎเจพเจคเจฐเจพ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจจเฉเจ•เจธเจพเจจ เจจเฉ‚เฉฐ เจตเจฟเจธเจผเฉ‡เจธเจผ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ˜เจŸเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ (เจ‰เจฆเจพเจนเจฐเจฃ เจตเจœเฉ‹เจ‚, เจ…เจฒเฉ‚เจ•เจธเฉ€เจ“) เจตเจฟเฉฑเจš เจกเจพเจŸเจพ เจธเจฅเจพเจจเจฟเจ•เจคเจพ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เจธเจฆเจพ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ‡ เจจเฉ‹เจกเจพเจ‚ 'เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ€ เจ•เจพเจชเฉ€ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค
  2. เจฆเฉ‚เจœเจพ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจจเฉเจ•เจธเจพเจจ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจนเฉˆ. เจกเจฟเจซเฉŒเจฒเจŸ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจธเฉฐเจฌเฉฐเจงเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ†-เจธเจฌเฉฐเจงเจค เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจ…เจธเจฎเจฐเฉฑเจฅ เจนเจจ, เจ•เจฐเจฌเฉ‡เจฐเฉ‹เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ…เจงเจฟเจ•เจพเจฐเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ (เจนเจพเจฒเจพเจ‚เจ•เจฟ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจตเจฟเจ•เจฒเจชเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฐเจœเจจ 3.0.0 เจตเจฟเฉฑเจš เจชเฉ‡เจธเจผ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจœเจฟเจธ เจฒเจˆ เจตเจพเจงเฉ‚ เจ•เฉฐเจฎ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€), เจ…เจคเฉ‡ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจธเจชเจพเจฐเจ• (https://spark.apache.org/docs/2.4.5/security.html) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจฟเจฐเจซเจผ YARN, Mesos เจ…เจคเฉ‡ เจธเจŸเฉˆเจ‚เจกเจ…เจฒเฉ‹เจจ เจ•เจฒเฉฑเจธเจŸเจฐ เจนเฉ€ เจฎเฉเฉฑเจ– เจธเจŸเฉ‹เจฐเจพเจ‚ เจตเจœเฉ‹เจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจเฅค เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจœเจฟเจธ เจฆเฉ‡ เจ…เจงเฉ€เจจ เจธเจชเจพเจฐเจ• เจŸเจพเจธเจ• เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ, เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ - เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซ เจ‰เจน เจธเฉ‡เจตเจพ เจ–เจพเจคเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจฆเฉ‡ เจคเจนเจฟเจค เจ‡เจน เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจจเฉ€เจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจšเฉเจฃเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจธเจฌเฉฐเจง เจตเจฟเฉฑเจš, เจœเจพเจ‚ เจคเจพเจ‚ เจฐเฉ‚เจŸ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ‰เจคเจชเจพเจฆเจ• เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจจเจนเฉ€เจ‚ เจนเฉˆ, เจœเจพเจ‚ เจ‡เฉฑเจ• เจฌเฉ‡เจคเจฐเจคเฉ€เจฌ UID เจตเจพเจฒเจพ เจ‰เจชเจญเฉ‹เจ—เจคเจพ, เจœเฉ‹ เจกเฉ‡เจŸเจพ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฃ เจตเฉ‡เจฒเฉ‡ เจ…เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉเฉฐเจฆเจพ เจนเฉˆ (เจ‡เจธ เจจเฉ‚เฉฐ PodSecurityPolicies เจฌเจฃเจพ เจ•เฉ‡ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจฟเฉฐเจ• เจ•เจฐเจ•เฉ‡ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ…เจจเฉเจธเจพเจฐเฉ€ เจธเฉ‡เจตเจพ เจ–เจพเจคเฉ‡)เฅค เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš, เจนเฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจœเจพเจ‚ เจคเจพเจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เฉ‹, เจœเจพเจ‚ เจคเฉเจนเจพเจกเฉ€ เจธเฉฐเจธเจฅเจพ เจตเจฟเฉฑเจš เจ…เจชเจฃเจพเจ เจ—เจ เจฐเจพเจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจ…เจคเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจตเจฟเจงเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ เจธเจชเจพเจฐเจ• เจฒเจพเจ‚เจš เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจธเฉ‹เจงเฉ‹เฅค
  3. เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจชเจพเจฐเจ• เจจเฉŒเจ•เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพ เจ…เจงเจฟเจ•เจพเจฐเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ…เจœเฉ‡ เจตเฉ€ เจชเฉเจฐเจฏเฉ‹เจ—เจพเจคเจฎเจ• เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจนเฉˆ เจ…เจคเฉ‡ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจตเจฐเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจ•เจฒเจพเจ•เฉเจฐเจฟเจคเฉ€เจ†เจ‚ (เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒเจพเจ‚, เจกเฉŒเจ•เจฐ เจฌเฉ‡เจธ เจšเจฟเฉฑเจคเจฐ, เจ…เจคเฉ‡ เจฒเจพเจ‚เจš เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚) เจตเจฟเฉฑเจš เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจเฅค เจ…เจคเฉ‡ เจตเจพเจธเจคเจต เจตเจฟเฉฑเจš, เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจธเฉฐเจธเจ•เจฐเจฃ 2.3.0 เจ…เจคเฉ‡ 2.4.5 เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€, เจตเจฟเจนเจพเจฐ เจ•เจพเจซเจผเฉ€ เจตเฉฑเจ–เจฐเจพ เจธเฉ€เฅค

เจ†เจ‰ เจ…เจชเจกเฉ‡เจŸเจธ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเฉ€เจ - เจธเจชเจพเจฐเจ• (3.0.0) เจฆเจพ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจนเจพเจฒ เจนเฉ€ เจตเจฟเฉฑเจš เจœเจพเจฐเฉ€ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจœเจฟเจธ เจจเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ‰เฉฑเจคเฉ‡ เจธเจชเจพเจฐเจ• เจฆเฉ‡ เจ•เฉฐเจฎ เจตเจฟเฉฑเจš เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฒเจฟเจ†เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ, เจชเจฐ เจ‡เจธ เจธเจฐเฉ‹เจค เจชเฉเจฐเจฌเฉฐเจงเจ• เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจฆเฉ€ เจชเฉเจฐเจฏเฉ‹เจ—เจพเจคเจฎเจ• เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจฌเจฐเจ•เจฐเจพเจฐ เจฐเฉฑเจ–เจฟเจ† เจนเฉˆเฅค เจธเจผเจพเจ‡เจฆ เจ…เจ—เจฒเฉ‡ เจ…เฉฑเจชเจกเฉ‡เจŸ เจคเฉเจนเจพเจกเฉ‡ เจธเจฟเจธเจŸเจฎ เจฆเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฒเจˆ เจกเจฐเฉ‡ เจฌเจฟเจจเจพเจ‚ เจ…เจคเฉ‡ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจญเจพเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจธเฉเจคเฉฐเจคเจฐ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเฉ‹เจงเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ 'เจคเฉ‡ YARN เจจเฉ‚เฉฐ เจ›เฉฑเจกเจฃ เจ…เจคเฉ‡ เจธเจชเจพเจฐเจ• เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจจเจพเจฒ เจธเจฟเจซเจผเจพเจฐเจธเจผ เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจ‰เจฃเจ—เฉ‡เฅค

เจ…เฉฐเจค.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹