เดชเตเดฐเดฟเดฏ เดตเดพเดฏเดจเดเตเดเดพเดฐเต, เดถเตเดญ เดธเดพเดฏเดพเดนเตเดจเด. เดเดจเตเดจเต เดจเดฎเตเดฎเตพ เด เดชเตเดชเดพเดเตเดเต เดธเตเดชเดพเตผเดเตเดเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเตเด เด เดคเดฟเดจเตเดฑเต เดตเดฟเดเดธเดจ เดธเดพเดงเตเดฏเดคเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเตเด เดเตเดฑเดเตเดเต เดธเดเดธเดพเดฐเดฟเดเตเดเตเด.
เดฌเดฟเดเต เดกเดพเดฑเตเดฑเดฏเตเดเต เดเดงเตเดจเดฟเด เดฒเตเดเดคเตเดคเต, เดฌเดพเดเตเดเต เดกเดพเดฑเตเดฑ เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต เดเดพเดธเตโเดเตเดเตเดเตพ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฏเดฅเดพเตผเดคเตเดฅ เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเดพเดฃเต เด
เดชเตเดชเดพเดเตเดเต เดธเตเดชเดพเตผเดเตเดเต. เดเตเดเดพเดคเต, เดฎเตเดเตเดฐเต เดฌเดพเดเตเดเต เดเดถเดฏเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดธเตเดเตเดฐเตเดฎเดฟเดเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเด เดเตเดฑเดฟเดฏ เดญเดพเดเดเตเดเดณเดฟเตฝ เดกเดพเดฑเตเดฑ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด เดทเดฟเดชเตเดชเดฟเดเดเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด เดเดคเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต (เดธเตเดชเดพเตผเดเตเดเต เดธเตเดเตเดฐเดเตเดเตเตผเดกเต เดธเตเดเตเดฐเตเดฎเดฟเดเดเต). เดเตเดเดพเดคเต เดชเดฐเดฎเตเดชเดฐเดพเดเดคเดฎเดพเดฏเดฟ เดเดคเต เดฎเตเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เดนเดกเตเดชเตเดชเต เดธเตเดฑเตเดฑเดพเดเตเดเดฟเดจเตเดฑเต เดญเดพเดเดฎเดพเดฃเต, เดฑเดฟเดธเตเดดเตโเดธเต เดฎเดพเดจเตเดเดฐเดพเดฏเดฟ 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 เดเตปเดธเตเดฑเตเดฑเดพเดณเตเดทเดจเดฟเดฒเตเดเตเดเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเดพเดจเตเด เดเดดเดฟเดฏเตเด -
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 เดเตเดฒเตเดกเต เดชเตเดฒเดพเดฑเตเดฑเตเดซเตเดฎเดฟเตฝ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเดคเดพเดฃเต -
- Lightbend FastData เดชเตเดฒเดพเดฑเตเดฑเตเดซเตเด/Cloudflow เดเตปเดธเตเดฑเตเดฑเดฒเตเดทเดจเตเดฑเต เดญเดพเดเดฎเดพเดฏเดฟ;
- เดนเตเตฝเดฎเดฟเดจเตเดฑเต เดเดชเดฏเตเดเด:
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator helm install incubator/sparkoperator --namespace spark-operator
- เดเดฆเตเดฏเตเดเดฟเด เดถเตเดเดฐเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฎเดพเดจเดฟเดซเตเดธเตเดฑเตเดฑเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต (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 ). เดชเตเดฐเดเดเดจเดชเดคเตเดฐเดฟเดเดฏเดฟเตฝ เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดฃเตเด เดชเตเดฐเดงเดพเดจ เดเดพเดฐเตเดฏเดเตเดเดณเตเดฃเตเดเต:- "apiVersion" เดจเดฟเดเดฃเตเดเต เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดชเดคเดฟเดชเตเดชเดฟเดจเต เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดฏ API เดชเดคเดฟเดชเตเดชเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเดฃเด;
- "metadata.namespace" เดจเดฟเดเดฃเตเดเต, เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดฒเตเดเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจ เดจเตเดฏเดฟเดเดธเตเดชเตเดธเดฟเดจเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเดฃเด;
- "spec.image" เดจเดฟเดเดฃเตเดเตเดตเดฟเตฝ เดเดเตเดธเดธเต เดเตเดฏเตเดฏเดพเดตเตเดจเตเดจ เดเดฐเต เดฐเดเดฟเดธเตเดเตเดฐเดฟเดฏเดฟเตฝ เดธเตเดทเตเดเดฟเดเตเด เดกเตเดเตเดเตผ เดเดฎเตเดเดฟเดจเตเดฑเต เดตเดฟเดฒเดพเดธเด เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเดฃเด;
- "spec.mainClass" เดจเดฟเดเดฃเตเดเตเดตเดฟเตฝ เดชเตเดฐเดเตเดฐเดฟเดฏ เดเดฐเดเดญเดฟเดเตเดเตเดฎเตเดชเตเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดฃเตเด เดธเตเดชเดพเตผเดเตเดเต เดเดพเดธเตโเดเต เดเตเดฒเดพเดธเต เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเดฃเด;
- "spec.mainApplicationFile" เดจเดฟเดเดฃเตเดเตเดตเดฟเตฝ เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเดฌเดฟเตพ เดเดพเตผ เดซเดฏเดฒเดฟเดฒเตเดเตเดเตเดณเตเดณ เดชเดพเดค เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเดฃเด;
- "spec.sparkVersion" เดจเดฟเดเดฃเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดธเตเดชเดพเตผเดเตเดเดฟเดจเตเดฑเต เดชเดคเดฟเดชเตเดชเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเดฃเด;
- โspec.driver.serviceAccountโ เดจเดฟเดเดฃเตเดเต, เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดฑเตบ เดเตเดฏเตเดฏเดพเตป เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เด เดจเตเดฌเดจเตเดง เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเดฟเดฒเต เดธเตเดตเดจ เด เดเตเดเตเดฃเตเดเต เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฃเด;
- "spec.executor" เดจเดฟเดเดฃเตเดเต, เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเต เด เดจเตเดตเดฆเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดตเดฟเดญเดตเดเตเดเดณเตเดเต เดเดฃเตเดฃเด เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเดฃเด;
- "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) เดจเดฟเดฒเดตเดฟเดฒเต เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดฑเต เดเดฃเตเดเตเดคเตเดคเดฟเดฏ เดฆเตเดทเดเตเดเตพ เดชเดฐเดฟเดเดฃเดฟเดเตเดเดพเตป เดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเต:
- เดเดฆเตเดฏเดคเตเดคเตเดคเตเด, เดเดฐเตเดชเดเตเดทเต, เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดพเดฏเตเดฎเดฏเตเด เดกเดพเดฑเตเดฑ เดฒเตเดเตเดเดพเดฒเดฟเดฑเตเดฑเดฟเดฏเตเดเต เด เดญเดพเดตเดฎเดพเดฃเต. YARN-เดจเตเดฑเต เดเดฒเตเดฒเดพ เดชเตเดฐเดพเดฏเตเดฎเดเดณเตเด เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดเตเดเตเด, เด เดคเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเตเดฃเดเตเดเดณเตเด เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดกเดพเดฑเตเดฑเดฏเดฟเดฒเตเดเตเดเต เดเตเดกเต เดกเตเดฒเดฟเดตเตผ เดเตเดฏเตเดฏเตเดจเตเดจ เดคเดคเตเดตเด (เดเตเดกเดฟเดฒเตเดเตเดเตเดณเตเดณ เดกเดพเดฑเตเดฑเดฏเตเดเตเดเต เดชเดเดฐเด). เดเดคเดฟเดจเต เดจเดจเตเดฆเดฟ, เดเดฃเดเตเดเตเดเตเดเตเดเดฒเตเดเดณเดฟเตฝ เดเตพเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดกเดพเดฑเตเดฑ เดธเตเดฅเดฟเดคเดฟเดเตเดฏเตเดฏเตเดจเตเดจ เดจเตเดกเตเดเดณเดฟเตฝ เดธเตเดชเดพเตผเดเตเดเต เดเดพเดธเตเดเตเดเตเดเตพ เดจเดฟเตผเดตเตเดตเดนเดฟเดเตเดเต, เดเตเดเดพเดคเต เดจเตเดฑเตเดฑเตเดตเตผเดเตเดเดฟเดฒเตเดเต เดกเดพเดฑเตเดฑ เดเตเดฎเดพเดฑเดพเตป เดเดเตเดคเตเดค เดธเดฎเดฏเด เดเดฃเตเดฏเดฎเดพเดฏเดฟ เดเตเดฑเดเตเดเต. Kubernetes เดเดชเดฏเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดเดฐเต เดเดพเดธเตโเดเตเดเดฟเตฝ เดเตพเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดกเดพเดฑเตเดฑ เดจเตเดฑเตเดฑเตโเดตเตผเดเตเดเดฟเดฒเตเดเดจเตเดณเด เดจเตเดเตเดเตเดฃเตเดเดคเดฟเดจเตเดฑเต เดเดตเดถเตเดฏเดเดค เดเดเตเดเตพ เด เดญเดฟเดฎเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต. เด เดต เดเดตเดถเตเดฏเดคเตเดคเดฟเดจเต เดตเดฒเตเดคเดพเดฃเตเดเตเดเดฟเตฝ, เดเดพเดธเตโเดเต เดเดเตโเดธเดฟเดเตเดฏเตเดทเตป เดธเดฎเดฏเด เดเดฃเตเดฏเดฎเดพเดฏเดฟ เดตเตผเดฆเตเดงเดฟเดเตเดเตเด, เดเตเดเดพเดคเต เดธเตโเดชเดพเตผเดเตเดเต เดเดพเดธเตโเดเต เดเตปเดธเตโเดฑเตเดฑเตปเดธเตเดเตพเดเตเดเต เด เดตเดฏเตเดเต เดคเดพเดคเตเดเดพเดฒเดฟเด เดธเดเดญเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดจเตเดเตเดเดฟเดตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดกเดฟเดธเตโเดเต เดธเตโเดชเตเดธเต เดเดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด. Kubernetes-เตฝ (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, Alluxio) เดกเดพเดฑเตเดฑเดพ เดชเตเดฐเดฆเตเดถเด เดเดฑเดชเตเดชเดพเดเตเดเตเดจเตเดจ เดชเตเดฐเดคเตเดฏเตเด เดธเตเดซเตโเดฑเตเดฑเตโเดตเตเดฏเตผ เดเดชเดฏเตเดเดฟเดเตเดเต เด เดชเตเดฐเดพเดฏเตเดฎ เดฒเดเตเดเดฐเดฟเดเตเดเดพเดจเดพเดเตเด, เดเดจเตเดจเดพเตฝ เดเดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต เดจเตเดกเตเดเดณเดฟเตฝ เดกเดพเดฑเตเดฑเดฏเตเดเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏ เดชเดเตผเดชเตเดชเต เดธเดเดญเดฐเดฟเดเตเดเตเดฃเตเดเดคเดฟเดจเตเดฑเต เดเดตเดถเตเดฏเดเดคเดฏเต เด เตผเดคเตเดฅเดฎเดพเดเตเดเตเดจเตเดจเต.
- เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดพเดฏเตเดฎ เดธเตเดฐเดเตเดทเดฏเดพเดฃเต. เดกเดฟเดซเตเตพเดเตเดเดพเดฏเดฟ, เดธเตเดชเดพเตผเดเตเดเต เดเดพเดธเตเดเตเดเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดธเตเดฐเดเตเดทเดพ เดธเดเดฌเดจเตเดงเดฟเดฏเดพเดฏ เดธเดตเดฟเดถเตเดทเดคเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเตเตผเดฌเดฑเตเดธเดฟเดจเตเดฑเต เดเดชเดฏเตเดเด เดเดฆเตเดฏเตเดเดฟเด เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเดจเดฟเตฝ เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดเตเดเดฟเดฒเตเดฒ (เด เดจเตเดฌเดจเตเดง เดเดชเตเดทเดจเตเดเตพ เดชเดคเดฟเดชเตเดชเต 3.0.0-เตฝ เด เดตเดคเดฐเดฟเดชเตเดชเดฟเดเตเดเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเดฒเตเด, เดเดคเดฟเดจเต เด เดงเดฟเด เดเตเดฒเดฟ เดเดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด), เดเตเดเดพเดคเต เดธเตเดฐเดเตเดทเดพ เดกเตเดเตเดฏเตเดฎเตเดจเตเดฑเตเดทเดจเตเด Spark (https://spark.apache.org/docs/2.4.5/security.html) เดเดชเดฏเตเดเดฟเดเตเดเต YARN, Mesos, Standalone Cluster เดเดจเตเดจเดฟเดต เดฎเดพเดคเตเดฐเดฎเต เดชเตเดฐเดงเดพเดจ เดธเตเดฑเตเดฑเตเดฑเตเดเดณเดพเดฏเดฟ เดฆเตเดถเตเดฏเดฎเดพเดเต. เด เดคเต เดธเดฎเดฏเด, เดธเตเดชเดพเตผเดเตเดเต เดเดพเดธเตโเดเตเดเตเดเตพ เดฒเตเดเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเต เดจเตเดฐเดฟเดเตเดเต เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ - เด เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดธเตเดตเดจ เด เดเตเดเตเดฃเตเดเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดเดเตเดเตพ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเดคเต, เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตโเดค เดธเตเดฐเดเตเดทเดพ เดจเดฏเดเตเดเดณเต เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเดพเดฃเต เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเต เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเดจเตเดจเดคเต. เดเดเตเดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดจเตเดจเตเดเดฟเตฝ เดฑเตเดเตเดเต เดเดชเดฏเตเดเตเดคเดพเดตเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เด เดคเต เดเตฝเดชเตเดชเดพเดฆเดจเดชเดฐเดฎเดพเดฏ เด เดจเตเดคเดฐเตเดเตเดทเดคเตเดคเดฟเตฝ เดธเตเดฐเดเตเดทเดฟเดคเดฎเดฒเตเดฒ, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดฑเดพเตปเดกเด เดฏเตเดเดกเดฟ เดเดณเตเดณ เดเดฐเต เดเดชเดฏเตเดเตเดคเดพเดตเต, เดกเดพเดฑเตเดฑเดฏเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเดเตเดธเดธเต เด เดตเดเดพเดถเดเตเดเตพ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดเดคเต เด เดธเตเดเดฐเตเดฏเดฎเตเดฃเตเดเดพเดเตเดเตเดจเตเดจเต (PodSecurityPolicies เดธเตเดทเตเดเดฟเดเตเดเต เด เดตเดฏเต เดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเต เดเดคเต เดชเดฐเดฟเดนเดฐเดฟเดเตเดเดพเดจเดพเดเตเด. เด เดจเตเดฌเดจเตเดง เดธเตเดตเดจ เด เดเตเดเตเดฃเตเดเตเดเตพ). เดจเดฟเดฒเดตเดฟเตฝ, เดเดจเตเดจเตเดเดฟเตฝ เดเดตเดถเตเดฏเดฎเดพเดฏ เดเดฒเตเดฒเดพ เดซเดฏเดฒเตเดเดณเตเด เดกเตเดเตเดเตผ เดเดฎเตเดเดฟเดฒเตเดเตเดเต เดจเตเดฐเดฟเดเตเดเต เดธเตเดฅเดพเดชเดฟเดเตเดเตเด เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดจเดฟเดเตเดเดณเตเดเต เดธเตเดฅเดพเดชเดจเดคเตเดคเดฟเตฝ เดธเตเดตเตเดเดฐเดฟเดเตเด เดฐเดนเดธเตเดฏเดเตเดเตพ เดธเดเดญเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเด เดตเตเดฃเตเดเตเดเตเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดธเดเดตเดฟเดงเดพเดจเด เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดธเตเดชเดพเตผเดเตเดเต เดฒเตเดเตเดเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเดฐเดฟเดทเตเดเตเดเดฐเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เดชเดฐเดฟเดนเดพเดฐเด.
- Kubernetes เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตเดชเดพเตผเดเตเดเต เดเตเดฒเดฟเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฆเตเดฏเตเดเดฟเดเดฎเดพเดฏเดฟ เดเดชเตเดชเตเดดเตเด เดชเดฐเตเดเตเดทเดฃเดพเดคเตเดฎเด เดฎเตเดกเดฟเดฒเดพเดฃเต, เดญเดพเดตเดฟเดฏเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดเตผเดเตเดเดฟเดซเดพเดเตเดฑเตเดฑเตเดเดณเดฟเตฝ (เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดซเดฏเดฒเตเดเตพ, เดกเตเดเตเดเตผ เดฌเตเดธเต เดเดฎเตเดเตเดเตพ, เดฒเตเดเตเดเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเดเตพ) เดเดพเดฐเตเดฏเดฎเดพเดฏ เดฎเดพเดฑเตเดฑเดเตเดเตพ เดเดฃเตเดเดพเดฏเตเดเตเดเดพเด. เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดฎเตเดฑเตเดฑเตเดฐเดฟเดฏเตฝ เดคเดฏเตเดฏเดพเดฑเดพเดเตเดเตเดฎเตเดชเตเตพ, 2.3.0, 2.4.5 เดชเดคเดฟเดชเตเดชเตเดเตพ เดชเดฐเตเดเตเดทเดฟเดเตเดเต, เดธเตเดตเดญเดพเดตเด เดตเดณเดฐเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต.
เด เดชเตโเดกเตเดฑเตเดฑเตเดเตพเดเตเดเดพเดฏเดฟ เดจเดฎเตเดเตเดเต เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเดพเด - เดธเตเดชเดพเตผเดเตเดเดฟเดจเตเดฑเต (3.0.0) เดเดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เด เดเตเดคเตเดคเดฟเดเต เดชเตเดฑเดคเตเดคเดฟเดฑเดเตเดเดฟ, เดเดคเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเดฟเดฒเต เดธเตเดชเดพเตผเดเตเดเดฟเดจเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดเดพเดฐเตเดฏเดฎเดพเดฏ เดฎเดพเดฑเตเดฑเดเตเดเตพ เดตเดฐเตเดคเตเดคเดฟ, เดเดจเตเดจเดพเตฝ เด เดฑเดฟเดธเตเดดเตเดธเต เดฎเดพเดจเตเดเดฑเดฟเดจเตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเต เดชเดฐเตเดเตเดทเดฃเดพเดคเตเดฎเด เดจเดฟเดฒ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดฟ. เดเดฐเตเดชเดเตเดทเต เด เดเตเดคเตเดค เด เดชเตโเดกเตเดฑเตเดฑเตเดเตพ เดจเดฟเดเตเดเดณเตเดเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต เดธเตเดฐเดเตเดทเดฏเต เดญเดฏเดชเตเดชเตเดเดพเดคเตเดฏเตเด เดชเตเดฐเดตเตผเดคเตเดคเดจ เดเดเดเดเตเดเดณเต เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏเดฟ เดชเดฐเดฟเดทเตโเดเตเดเดฐเดฟเดเตเดเตเดฃเตเดเดคเดฟเดฒเตเดฒเดพเดคเตเดฏเตเด เดจเตเตฝ เดเดชเตเดเตเดทเดฟเดเตเดเดพเดจเตเด เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเดฟเตฝ เดธเตเดชเดพเตผเดเตเดเต เดเดพเดธเตโเดเตเดเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเดพเดจเตเด เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดถเตเดชเดพเตผเดถ เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเดเตเดเตเด.
เดซเดฟเตป.
เด
เดตเดฒเดเดฌเด: www.habr.com