เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดชเตเดฐเดฟเดฏ เดตเดพเดฏเดจเด•เตเด•เดพเดฐเต‡, เดถเตเดญ เดธเดพเดฏเดพเดนเตเดจเด‚. เด‡เดจเตเดจเต เดจเดฎเตเดฎเตพ เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดตเดฟเด•เดธเดจ เดธเดพเดงเตเดฏเดคเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด•เตเดฑเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดฌเดฟเด—เต เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เด†เดงเตเดจเดฟเด• เดฒเต‹เด•เดคเตเดคเต, เดฌเดพเดšเตเดšเต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฏเดฅเดพเตผเดคเตเดฅ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเดพเดฃเต เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต. เด•เต‚เดŸเดพเดคเต†, เดฎเตˆเด•เตเดฐเต‹ เดฌเดพเดšเตเดšเต เด†เดถเดฏเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดšเต†เดฑเดฟเดฏ เดญเดพเด—เด™เตเด™เดณเดฟเตฝ เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดทเดฟเดชเตเดชเดฟเด‚เด—เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต (เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเด•เตเดšเต‡เตผเดกเต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต). เด•เต‚เดŸเดพเดคเต† เดชเดฐเดฎเตเดชเดฐเดพเด—เดคเดฎเดพเดฏเดฟ เด‡เดคเต เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เดนเดกเต‚เดชเตเดชเต เดธเตเดฑเตเดฑเดพเด•เตเด•เดฟเดจเตเดฑเต† เดญเดพเด—เดฎเดพเดฃเต, เดฑเดฟเดธเต‹เดดเตโ€Œเดธเต เดฎเดพเดจเต‡เดœเดฐเดพเดฏเดฟ YARN (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดšเดฟเดฒ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ Apache Mesos) เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. 2020-เด“เดŸเต†, เดฎเดพเดจเตเดฏเดฎเดพเดฏ เดนเดกเต‚เดชเตเดชเต เดตเดฟเดคเดฐเดฃเด™เตเด™เดณเตเดŸเต† เด…เดญเดพเดตเด‚ เดฎเต‚เดฒเด‚ เดฎเดฟเด•เตเด• เด•เดฎเตเดชเดจเดฟเด•เตพเด•เตเด•เตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดชเดฐเดฎเตเดชเดฐเดพเด—เดค เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด…เดคเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด‚ เดธเด‚เดถเดฏเดพเดธเตเดชเดฆเดฎเดพเดฃเต - HDP, CDH เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดตเดฟเด•เดธเดจเด‚ เดจเดฟเดฒเดšเตเดšเต, CDH เดจเดจเตเดจเดพเดฏเดฟ เดตเดฟเด•เดธเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เด‰เดฏเตผเดจเตเดจ เดšเดฟเดฒเดตเตเดฃเตเดŸเต, เดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ เดนเดกเต‚เดชเตเดชเต เดตเดฟเดคเดฐเดฃเด•เตเด•เดพเตผ เด’เดจเตเดจเตเด•เดฟเตฝ เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเด™เตเด™เดฟเดฏ เดญเดพเดตเดฟ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เด…เดคเดฟเดจเดพเตฝ, เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเตเดฑเต† เดธเดฎเดพเดฐเด‚เดญเด‚ เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเดฑเตเดฑเดฟเดฏเดฟเดฒเตเด‚ เดตเตปเด•เดฟเดŸ เด•เดฎเตเดชเดจเดฟเด•เดณเดฟเดฒเตเด‚ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเด‚ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต - เดธเตเดตเด•เดพเดฐเตเดฏ, เดชเตŠเดคเต เด•เตเดฒเต—เดกเตเด•เดณเดฟเตฝ เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เด“เตผเด•เตเด•เดธเตเดŸเตเดฐเต‡เดทเดจเดฟเดฒเตเด‚ เดฑเดฟเดธเต‹เดดเตเดธเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเดฟเดฒเตเด‚ เด’เดฐเต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด†เดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต, เด‡เดคเต 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

Kubernetes-เตฝ Spark jobs เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด…เดŸเดฟเดธเตเดฅเดพเดจ เด‡เดฎเต‡เดœเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดตเดฟเดŸเต† เดธเดพเดงเตเดฏเดฎเดพเดฏ 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}

เดจเดฎเตเด•เตเด•เต เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเดคเตเดค เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเต เดกเต‹เด•เตเด•เตผ เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเด‚ OKD:

./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 เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตเด•เตเด•เต เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดจเดฎเตเด•เตเด•เต spark-submit เด•เดฎเดพเตปเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚:

 /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

เด‡เดตเดฟเดŸเต†:

- เดชเต‡เดฐเต - เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เดชเต‹เดกเตเด•เดณเตเดŸเต† เดชเต‡เดฐเดฟเดจเตเดฑเต† เดฐเต‚เดชเต€เด•เดฐเดฃเดคเตเดคเดฟเตฝ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจ เดšเตเดฎเดคเดฒเดฏเตเดŸเต† เดชเต‡เดฐเต;

โ€”class โ€” เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เดซเดฏเดฒเดฟเดจเตเดฑเต† เด•เตเดฒเดพเดธเต, เดŸเดพเดธเตเด•เต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต;

โ€”conf โ€” เดธเตเดชเดพเตผเด•เตเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ;

spark.executor.instances โ€” เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเตเดชเดพเตผเด•เตเด•เต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเตผเดฎเดพเดฐเตเดŸเต† เดŽเดฃเตเดฃเด‚;

spark.kubernetes.authenticate.driver.serviceAccountName - เดชเต‹เดกเตเด•เตพ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ Kubernetes เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเดฟเดจเตเดฑเต† เดชเต‡เดฐเต (Kubernetes API-เดฏเตเดฎเดพเดฏเดฟ เด‡เดŸเดชเดดเด•เตเดฎเตเดชเต‹เตพ เดธเตเดฐเด•เตเดทเดพ เดธเดจเตเดฆเตผเดญเดตเตเด‚ เด•เดดเดฟเดตเตเด•เดณเตเด‚ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดพเตป);

spark.kubernetes.namespace โ€” เดกเตเดฐเตˆเดตเตผ, เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเตผ เดชเต‹เดกเตเด•เตพ เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดจเต†เดฏเดฟเด‚เดธเตเดชเต‡เดธเต;

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

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเตเดชเต‹เดฒเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚ (เดซเดฏเตฝ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸ URL เด‡เดตเดฟเดŸเต† {location} เด†เดฃเต):

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

เดธเตเดชเดพเตผเด•เตเด•เต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เดซเดฏเตฝ HDFS-เดฒเต‡เด•เตเด•เต เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด• (เด‡เดตเดฟเดŸเต† {path-to-local-file} เดŽเดจเตเดจเดคเต เดจเดฟเดฒเดตเดฟเดฒเต† เดนเต‹เดธเตเดฑเตเดฑเดฟเดฒเต† Spark เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดคเดฏเดพเดฃเต):

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 เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดชเด•เตผเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดกเต‹เด•เตเด•เตผเดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เดšเต‡เตผเด•เตเด•เตเด•. เดŽเตปเดŸเตเดฐเดฟ เดชเต‹เดฏเดฟเดจเตเดฑเดฟเตฝ SPARK_CLASSPATH-เตฝ HDFS เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•.

เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด‰เดชเดฏเต‹เด— เด•เต‡เดธเต - เด…เดชเตเดชเดพเดšเตเดšเต† เดฒเดฟเดตเดฟ

เด•เต‚เดŸเดพเดคเต†, เด’เดฐเต เดŸเดพเดธเตโ€Œเด•เต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต เดซเดฒเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดฟเดตเดฐเตเดฎเตเดชเต‹เตพ, CI/CD เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเดŸเต† เดญเดพเด—เดฎเดพเดฏเดฟ เด…เดคเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดจเดฟเตผเดตเตเดตเดนเดฃ เดจเดฟเดฒ เดŸเตเดฐเดพเด•เตเด•เตเดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดšเต‹เดฆเตเดฏเด‚ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฒเต‹เด•เตเด•เตฝ เดธเตเดชเดพเตผเด•เตเด•เต-เดธเดฌเตเดฎเดฟเดฑเตเดฑเต เด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต CI/CD เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเดฑเดฟเดจเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเด•เตเด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เด‡เดคเดฟเดจเต CI เดธเต†เตผเดตเตผ เดเดœเดจเตเดฑเตเดฎเดพเดฐเดฟเตฝ/เดฑเดฃเตเดฃเดฑเตเด•เดณเดฟเตฝ เดธเตเดชเดพเตผเด•เตเด•เต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ Kubernetes API-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด†เด•เตเดธเดธเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เดนเต‹เดธเตเดฑเตเดฑเต เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต REST API เด†เดฏเดฟ Apache Livy เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต. เด…เดคเดฟเดจเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต†, เดธเดพเดงเดพเดฐเดฃ cURL เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต Kubernetes เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ Spark เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดคเต เดเดคเต CI เดธเตŠเดฒเตเดฏเต‚เดทเดจเต†เดฏเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† Kubernetes API-เดฏเตเดฎเดพเดฏเดฟ เดธเด‚เดตเดฆเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด†เดงเดฟเด•เดพเดฐเดฟเด•เดค เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด‚ Kubernetes เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เด’เดฐเต เดฐเดฃเตเดŸเดพเด‚ เด‰เดชเดฏเต‹เด— เด•เต‡เดธเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เด‡เดคเต เดนเตˆเดฒเตˆเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚ - เด’เดฐเต เดŸเต†เดธเตเดฑเตเดฑเต เดฒเต‚เดชเตเดชเดฟเดฒเต† เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เด’เดฐเต CI/CD เดชเตเดฐเต‹เดธเดธเดฟเดจเตเดฑเต† เดญเดพเด—เดฎเดพเดฏเดฟ เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดชเตเดชเดพเดšเตเดšเต† เดฒเดฟเดตเดฟเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด…เตฝเดชเตเดชเด‚ - เด‡เดคเต เด’เดฐเต เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดชเดพเดธเดพเด•เตเด•เดฟ เดธเตเดชเดพเตผเด•เตเด•เต-เดธเดฌเตเดฎเดฟเดฑเตเดฑเต เดตเดฟเดฆเต‚เดฐเดฎเดพเดฏเดฟ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต RESTful API เดจเตฝเด•เตเดจเตเดจ เด’เดฐเต HTTP เดธเต†เตผเดตเดฑเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดชเดฐเดฎเตเดชเดฐเดพเด—เดคเดฎเดพเดฏเดฟ เด‡เดคเต เด’เดฐเต 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 เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ. เด‡เดคเต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเตป, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• ({registry-url} - เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเต เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเตเดŸเต† URL, {image-name} - เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเดฟเดจเตเดฑเต† เดชเต‡เดฐเต, {tag} - เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเต เดŸเดพเด—เต, {livy-url} - เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ URL เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต เดธเต†เตผเดตเตผ เดฒเดฟเดตเดฟ เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต; เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เดตเดฟเดคเดฐเดฃเดฎเดพเดฏเดฟ Red Hat OpenShift เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ โ€œเดฑเต‚เดŸเตเดŸเตโ€ เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดจเต‹เดกเตโ€Œเดชเต‹เตผเดŸเตเดŸเต เดคเดฐเดคเตเดคเดฟเดจเตเดฑเต† เด…เดจเตเดฌเดจเตเดง เด‡เตปเด—เตเดฐเต†เดธเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเต‡เดตเดจ เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต:

---
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. Livy เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดชเต‹เดธเตเดฑเตเดฑเตโ€Œเดฎเดพเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต 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 }?เดŸเดพเดฌเต=เดฒเต‹เด—เตเด•เตพ. "livy" เดŽเดจเตเดจเต เดชเต‡เดฐเดฟเดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเตฝ Livy REST API-เดฏเต† เดตเดฟเดณเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดฎเตเด•เดณเดฟเตฝ เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏเดฟ เด’เดฐเต เดธเตเดชเดพเตผเด•เตเด•เต-เดธเดฌเตเดฎเดฟเดฑเตเดฑเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเดคเดพเดฏเดฟ เด…เดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚ (เด‡เดตเดฟเดŸเต† {livy-pod-name} เดŽเดจเตเดจเดคเต เดธเตƒเดทเตเดŸเดฟเดšเตเดš เดชเต‹เดกเดฟเดจเตเดฑเต† เดชเต‡เดฐเดพเดฃเต. เดฒเดฟเดตเดฟ เดธเต†เตผเดตเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต). เด’เดฐเต เดฒเดฟเดตเดฟ เดธเต†เตผเดตเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เดธเตเดชเดพเตผเด•เตเด•เต เดตเดฟเดฆเต‚เดฐเดฎเดพเดฏเดฟ เดนเต‹เดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจ เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด…เดจเตเดตเต‡เดทเดฃเดตเตเด‚ เดถเต‡เด–เดฐเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เด‰เดชเดฏเต‹เด— เด•เต‡เดธเต - เดธเตเดชเดพเตผเด•เตเด•เต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ

เด‡เดชเตเดชเต‹เตพ เดŸเดพเดธเตเด•เต เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เด‡เดคเต เดชเดคเดฟเดตเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดšเต‹เดฆเตเดฏเด‚ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต. เด’เดฐเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดชเดคเดฟเดตเดพเดฏเดฟ เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเต‡เดฑเตเดฑเต€เดตเต เดฎเดพเตผเด—เด‚ เด•เตเดฐเต‹เตบเดœเต‹เดฌเต เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเดฏเดพเดฃเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดชเตเดชเต‹เตพ เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผเดฎเดพเดฐเตเดŸเต† เด‰เดชเดฏเต‹เด—เด‚ เดตเดณเดฐเต† เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเต เดตเดณเดฐเต† เดชเด•เตเดตเดคเดฏเตเดณเตเดณ เด’เดฐเต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด‰เดฃเตเดŸเต, เด…เดคเตเด‚. เดŽเดจเตเดฑเตผเดชเตเดฐเตˆเดธเต เดฒเต†เดตเตฝ เดธเตŠเดฒเตเดฏเต‚เดทเดจเตเด•เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, Lightbend FastData เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚). เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต - เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเตเดฑเต† (2.4.5) เดจเดฟเดฒเดตเดฟเดฒเต† เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเดฟเดจเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด“เดชเตเดทเดจเตเด•เดณเตเดฃเตเดŸเต, เด…เดคเต‡เดธเดฎเดฏเด‚ เด…เดŸเตเดคเตเดค เดชเตเดฐเดงเดพเดจ เดชเดคเดฟเดชเตเดชเต (3.0.0) เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดจเต เดชเต‚เตผเดฃเตเดฃ เดชเดฟเดจเตเดคเตเดฃ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เด…เดคเดฟเดจเตเดฑเต† เดฑเดฟเดฒเต€เดธเต เดคเต€เดฏเดคเดฟ เด…เดœเตเดžเดพเดคเดฎเดพเดฏเดฟ เดคเตเดŸเดฐเตเดจเตเดจเต. . เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด“เดชเตโ€Œเดทเดจเตเด•เตพ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดธเตโ€Œเดชเดพเตผเด•เตเด•เต เดชเต‹เดกเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดนเดกเต‚เดชเตเดชเต เด†เด•เตโ€Œเดธเดธเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต‹เดŸเตเด•เต‚เดŸเดฟเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดชเตเดชเต เดฎเต—เดฃเตเดŸเตเดšเต†เดฏเตเดฏเตฝ) เด•เต‚เดŸเดพเดคเต† เดชเดคเดฟเดตเดพเดฏเดฟ เดทเต†เดกเตเดฏเต‚เตพ เดšเต†เดฏเตโ€Œเดค เดŸเดพเดธเตโ€Œเด•เตเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดŽเดจเตเดจเดฟเดต เดšเต‡เตผเดคเตเดคเต เดธเตเดชเดพเตผเด•เตเด•เต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เดˆ เดชเต‹เดฐเดพเดฏเตเดฎ เดจเดฟเด•เดคเตเดคเตเดจเตเดจเต.

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต
เด’เดฐเต เดฎเต‚เดจเตเดจเดพเด‚ เด‰เดชเดฏเต‹เด— เด•เต‡เดธเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เด‡เดคเต เดนเตˆเดฒเตˆเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚ - เด’เดฐเต เดชเตเดฐเตŠเดกเด•เตเดทเตป เดฒเต‚เดชเตเดชเดฟเดฒเต† เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดชเดคเดฟเดตเดพเดฏเดฟ เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดธเตเดชเดพเตผเด•เตเด•เต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เด†เดฃเต เด•เต‚เดŸเดพเดคเต† Google เด•เตเดฒเต—เดกเต เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เดฎเดฟเตฝ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเดคเดพเดฃเต - github.com/GoogleCloudPlatform/spark-on-k8s-operator. เด…เดคเดฟเดจเตเดฑเต† เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเตป 3 เดคเดฐเดคเตเดคเดฟเตฝ เดšเต†เดฏเตเดฏเดพเด‚:

  1. Lightbend FastData เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚/Cloudflow เด‡เตปเดธเตเดฑเตเดฑเดฒเต‡เดทเดจเตเดฑเต† เดญเดพเด—เดฎเดพเดฏเดฟ;
  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). เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต - เด•เตเดฒเต—เดกเตเดซเตเดฒเต‹เดฏเดฟเตฝ API เดชเดคเดฟเดชเตเดชเต v1beta1 เด‰เดณเตเดณ เด’เดฐเต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต. เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเดจเดพเดฃเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต†เด™เตเด•เดฟเตฝ, เดธเตเดชเดพเตผเด•เตเด•เต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเต เดตเดฟเดตเดฐเดฃเด™เตเด™เตพ เด‰เดšเดฟเดคเดฎเดพเดฏ API เดชเดคเดฟเดชเตเดชเตเดณเตเดณ Git-เดฒเต† เด‰เดฆเดพเดนเดฐเดฃ เดŸเดพเด—เตเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, "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 เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸ เด’เดฐเต เดšเดฟเดคเตเดฐเดฎเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดŸเต†เดธเตเดฑเตเดฑเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต;
  • เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด’เดฐเต เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดกเต‹เด•เตเด•เตผ เดšเดฟเดคเตเดฐเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเด•;
  • "SparkApplication" เดคเดฐเดตเตเด‚ เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เดŸเดพเดธเตเด•เตเด•เดฟเดจเตเดฑเต† เดตเดฟเดตเดฐเดฃเดตเตเด‚ เด‰เดณเตเดณ เด’เดฐเต เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•. เด‰เดฆเดพเดนเดฐเดฃ เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเตเด•เตพ เด”เดฆเตเดฏเต‹เด—เดฟเด• เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เดฒเดญเตเดฏเดฎเดพเดฃเต (เด‰เดฆเดพ. 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โ€ เดจเดฟเด˜เดฃเตเดŸเต, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฑเตบ เดšเต†เดฏเตเดฏเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด…เดจเตเดฌเดจเตเดง เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดจเต†เดฏเดฟเด‚เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเดฒเต† เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฃเด‚;
    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 เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดณเตเดณ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เตเดฎเดพเดชเตเดชเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเดคเดฟเดตเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด‡เดคเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต - โ€œเดทเต†เดกเตเดฏเต‚เตพโ€ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดคเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดŸเดพเดธเตโ€Œเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดทเต†เดกเตเดฏเต‚เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเด‚.

เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† เดฎเดพเดจเดฟเดซเต†เดธเตเดฑเตเดฑเต 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}

เดชเตเดฐเดคเตเดฏเต‡เด• sparkctl เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตเด•เตเด•เตเด•เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต. เด‡เดคเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเตป, เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด…เดคเดฟเดจเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เตเดฒเต‹เตบ เดšเต†เดฏเตเดฏเตเด•, Go เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเต เดˆ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•:

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 เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด’เดฐเต เดŸเดพเดธเตโ€Œเด•เตเด•เดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเดฒเตเดŸเดจเต€เดณเด‚ เดจเต€เด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด•เดค เดžเด™เตเด™เตพ เด…เดญเดฟเดฎเตเด–เต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดต เด†เดตเดถเตเดฏเดคเตเดคเดฟเดจเต เดตเดฒเตเดคเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดŸเดพเดธเตโ€Œเด•เต เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดทเตป เดธเดฎเดฏเด‚ เด—เดฃเตเดฏเดฎเดพเดฏเดฟ เดตเตผเดฆเตเดงเดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† เดธเตโ€Œเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตโ€Œเด•เต เด‡เตปเดธเตโ€Œเดฑเตเดฑเตปเดธเตเด•เตพเด•เตเด•เต เด…เดตเดฏเตเดŸเต† เดคเดพเดคเตเด•เดพเดฒเดฟเด• เดธเด‚เดญเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดจเต€เด•เตเด•เดฟเดตเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดกเดฟเดธเตโ€Œเด•เต เดธเตโ€Œเดชเต‡เดธเต เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด‚. Kubernetes-เตฝ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, Alluxio) เดกเดพเดฑเตเดฑเดพ เดชเตเดฐเดฆเต‡เดถเด‚ เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจ เดชเตเดฐเดคเตเดฏเต‡เด• เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เดชเต‹เดฐเดพเดฏเตเดฎ เดฒเด˜เต‚เด•เดฐเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เดจเต‹เดกเตเด•เดณเดฟเตฝ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดชเด•เตผเดชเตเดชเต เดธเด‚เดญเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด•เดคเดฏเต† เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเต.
  2. เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เดชเตเดฐเดงเดพเดจ เดชเต‹เดฐเดพเดฏเตเดฎ เดธเตเดฐเด•เตเดทเดฏเดพเดฃเต. เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฏเดฟ, เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดธเตเดฐเด•เตเดทเดพ เดธเด‚เดฌเดจเตเดงเดฟเดฏเดพเดฏ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต†เตผเดฌเดฑเต‹เดธเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด‚ เด”เดฆเตเดฏเต‹เด—เดฟเด• เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ (เด…เดจเตเดฌเดจเตเดง เด“เดชเตเดทเดจเตเด•เตพ เดชเดคเดฟเดชเตเดชเต 3.0.0-เตฝ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เด‡เดคเดฟเดจเต เด…เดงเดฟเด• เดœเต‹เดฒเดฟ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด‚), เด•เต‚เดŸเดพเดคเต† เดธเตเดฐเด•เตเดทเดพ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเด‚ Spark (https://spark.apache.org/docs/2.4.5/security.html) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต YARN, Mesos, Standalone Cluster เดŽเดจเตเดจเดฟเดต เดฎเดพเดคเตเดฐเดฎเต‡ เดชเตเดฐเดงเดพเดจ เดธเตเดฑเตเดฑเต‹เดฑเตเด•เดณเดพเดฏเดฟ เดฆเตƒเดถเตเดฏเดฎเดพเด•เต‚. เด…เดคเต‡ เดธเดฎเดฏเด‚, เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดจเต‡เดฐเดฟเดŸเตเดŸเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ - เด…เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดžเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต, เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตโ€Œเดค เดธเตเดฐเด•เตเดทเดพ เดจเดฏเด™เตเด™เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเดพเดฃเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเต. เด‡เด•เตเด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด’เดจเตเดจเตเด•เดฟเตฝ เดฑเต‚เดŸเตเดŸเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เด‰เตฝเดชเตเดชเดพเดฆเดจเดชเดฐเดฎเดพเดฏ เด…เดจเตเดคเดฐเต€เด•เตเดทเดคเตเดคเดฟเตฝ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒ, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฑเดพเตปเดกเด‚ เดฏเตเดเดกเดฟ เด‰เดณเตเดณ เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต, เดกเดพเดฑเตเดฑเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด†เด•เตเดธเดธเต เด…เดตเด•เดพเดถเด™เตเด™เตพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เด‡เดคเต เด…เดธเต—เด•เดฐเตเดฏเดฎเตเดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต (PodSecurityPolicies เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต เด…เดตเดฏเต† เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เด‡เดคเต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. เด…เดจเตเดฌเดจเตเดง เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เตพ). เดจเดฟเดฒเดตเดฟเตฝ, เด’เดจเตเดจเตเด•เดฟเตฝ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดซเดฏเดฒเตเด•เดณเตเด‚ เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด• เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดฅเดพเดชเดจเดคเตเดคเดฟเตฝ เดธเตเดตเต€เด•เดฐเดฟเดšเตเดš เดฐเดนเดธเตเดฏเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดธเตเดชเดพเตผเด•เตเด•เต เดฒเต‹เดžเตเดšเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเดฐเดฟเดทเตเด•เตเด•เดฐเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดชเดฐเดฟเดนเดพเดฐเด‚.
  3. Kubernetes เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดชเดพเตผเด•เตเด•เต เดœเต‹เดฒเดฟเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เด”เดฆเตเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด‡เดชเตเดชเต‹เดดเตเด‚ เดชเดฐเต€เด•เตเดทเดฃเดพเดคเตเดฎเด• เดฎเต‹เดกเดฟเดฒเดพเดฃเต, เดญเดพเดตเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ (เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ, เดกเต‹เด•เตเด•เตผ เดฌเต‡เดธเต เด‡เดฎเต‡เดœเตเด•เตพ, เดฒเต‹เดžเตเดšเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ) เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเต‡เด•เตเด•เดพเด‚. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดฎเต†เดฑเตเดฑเต€เดฐเดฟเดฏเตฝ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ, 2.3.0, 2.4.5 เดชเดคเดฟเดชเตเดชเตเด•เตพ เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเต, เดธเตเดตเดญเดพเดตเด‚ เดตเดณเดฐเต† เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดพเด‚ - เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเตเดฑเต† (3.0.0) เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เด…เดŸเตเดคเตเดคเดฟเดŸเต† เดชเตเดฑเดคเตเดคเดฟเดฑเด™เตเด™เดฟ, เด‡เดคเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดฒเต† เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเดฟ, เดŽเดจเตเดจเดพเตฝ เดˆ เดฑเดฟเดธเต‹เดดเตเดธเต เดฎเดพเดจเต‡เดœเดฑเดฟเดจเตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃเดฏเตเดŸเต† เดชเดฐเต€เด•เตเดทเดฃเดพเดคเตเดฎเด• เดจเดฟเดฒ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดฟ. เด’เดฐเตเดชเด•เตเดทเต‡ เด…เดŸเตเดคเตเดค เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเตเด•เตพ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเดฐเด•เตเดทเดฏเต† เดญเดฏเดชเตเดชเต†เดŸเดพเดคเต†เดฏเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจ เด˜เดŸเด•เด™เตเด™เดณเต† เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏเดฟ เดชเดฐเดฟเดทเตโ€Œเด•เตเด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒเดพเดคเต†เดฏเตเด‚ เดจเต‚เตฝ เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เดพเดจเตเด‚ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เดธเตเดชเดพเตผเด•เตเด•เต เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเด‚.

เดซเดฟเตป.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•