เชชเซเชฐเชฟเชฏ เชตเชพเชเชเซ, เชถเซเชญ เชฌเชชเซเชฐ. เชเชเซ เชเชชเชฃเซ เช เชชเชพเชเซ เชธเซเชชเชพเชฐเซเช เช เชจเซ เชคเซเชจเชพ เชตเชฟเชเชพเชธเชจเซ เชธเชเชญเชพเชตเชจเชพเช เชตเชฟเชถเซ เชฅเซเชกเซ เชตเชพเชค เชเชฐเซเชถเซเช.
เชฌเชฟเช เชกเซเชเชพเชจเชพ เชเชงเซเชจเชฟเช เชตเชฟเชถเซเชตเชฎเชพเช, เช
เชชเชพเชเซ เชธเซเชชเชพเชฐเซเช เช เชฌเซเช เชกเซเชเชพ เชชเซเชฐเซเชธเซเชธเชฟเชเช เชเชพเชฐเซเชฏเซ เชตเชฟเชเชธเชพเชตเชตเชพ เชฎเชพเชเซเชจเซเช เชตเชพเชธเซเชคเชตเชฟเช เชงเซเชฐเชฃ เชเซ. เชตเชงเซเชฎเชพเช, เชคเซเชจเซ เชเชชเชฏเซเช เชธเซเชเซเชฐเซเชฎเชฟเชเช เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชชเชฃ เชฅเชพเชฏ เชเซ เชเซ เชฎเชพเชเชเซเชฐเซ เชฌเซเช เชเซเชจเซเชธเซเชชเซเชเชฎเชพเช เชเชพเชฎ เชเชฐเซ เชเซ, เชจเชพเชจเชพ เชญเชพเชเซเชฎเชพเช เชกเซเชเชพ เชชเซเชฐเซเชธเซเชธเชฟเชเช เช
เชจเซ เชถเชฟเชชเชฟเชเช เชเชฐเซ เชเซ (เชธเซเชชเชพเชฐเซเช เชธเซเชเซเชฐเชเซเชเชฐเซเชก เชธเซเชเซเชฐเซเชฎเชฟเชเช). เช
เชจเซ เชชเชฐเชเชชเชฐเชพเชเชค เชฐเซเชคเซ เชคเซ เชธเชเชธเชพเชงเชจ เชธเชเชเชพเชฒเช เชคเชฐเซเชเซ YARN (เช
เชฅเชตเชพ เชเซเชเชฒเชพเช เชเชฟเชธเซเชธเชพเชเชฎเชพเช Apache Mesos) เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชเชเชฆเชฐ Hadoop เชธเซเชเซเชเชจเซ เชญเชพเช เชฐเชนเซเชฏเซ เชเซ. 2020 เชธเซเชงเซเชฎเชพเช, เชคเซเชจเชพ เชชเชฐเชเชชเชฐเชพเชเชค เชธเซเชตเชฐเซเชชเชฎเชพเช เชคเซเชจเซ เชเชชเชฏเซเช เชฏเซเชเซเชฏ Hadoop เชตเชฟเชคเชฐเชฃเชจเชพ เช
เชญเชพเชตเชจเซ เชเชพเชฐเชฃเซ เชฎเซเชเชพเชญเชพเชเชจเซ เชเชเชชเชจเซเช เชฎเชพเชเซ เชชเซเชฐเชถเซเชจเชฎเชพเช เชเซ - HDP เช
เชจเซ CDHเชจเซ เชตเชฟเชเชพเชธ เช
เชเชเซ เชเชฏเซ เชเซ, CDH เชธเชพเชฐเซ เชฐเซเชคเซ เชตเชฟเชเชธเชฟเชค เชจเชฅเซ เช
เชจเซ เชคเซเชจเซ เชเชฟเชเชฎเชค เชเชเชเซ เชเซ, เช
เชจเซ เชฌเชพเชเซเชจเชพ Hadoop เชธเชชเซเชฒเชพเชฏเชฐเซเชธ เชชเชพเชธเซ เชเซ. เชเซเชฏเชพเช เชคเซ เช
เชธเซเชคเชฟเชคเซเชต เชฌเชเชง เชฅเช เชเชฏเซเช เชเซ เช
เชฅเชตเชพ เชงเซเชเชงเชณเซเช เชญเชตเชฟเชทเซเชฏ เชเซ. เชคเซเชฅเซ, เชเซเชฌเชฐเชจเซเชเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช
เชชเชพเชเซ เชธเซเชชเชพเชฐเซเชเชจเซเช เชฒเซเชจเซเชเชฟเชเช เชธเชฎเซเชฆเชพเชฏ เช
เชจเซ เชฎเซเชเซ เชเชเชชเชจเซเชเชฎเชพเช เชตเชงเซ เชฐเชธ เชงเชฐเชพเชตเซ เชเซ - เชเชพเชจเชเซ เช
เชจเซ เชเชพเชนเซเชฐ เชตเชพเชฆเชณเซเชฎเชพเช เชเชจเซเชเซเชจเชฐ เชเชฐเซเชเซเชธเซเชเซเชฐเซเชถเชจ เช
เชจเซ เชธเชเชธเชพเชงเชจ เชธเชเชเชพเชฒเชจเชฎเชพเช เชฎเชพเชจเช เชฌเชจเซเชจเซ, เชคเซ YARN เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซเชจเชพ เช
เชธเซเชตเชฟเชงเชพเชเชจเช เชธเชเชธเชพเชงเชจ เชถเซเชกเซเชฏเซเชฒเชฟเชเชเชจเซ เชธเชฎเชธเซเชฏเชพเชจเซ เชนเชฒ เชเชฐเซ เชเซ เช
เชจเซ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชคเชฎเชพเชฎ เชเชฆ เช
เชจเซ เชชเชเซเชเชพเชเชจเซ เชเชเชชเชจเซเช เชฎเชพเชเซ เชเชฃเชพ เชตเซเชฏเชตเชธเชพเชฏเชฟเช เช
เชจเซ เชเซเชฒเซเชฒเชพ เชตเชฟเชคเชฐเชฃเซ เชธเชพเชฅเซ เชธเชคเชค เชตเชฟเชเชพเชธเชถเซเชฒ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ. เชตเชงเซเชฎเชพเช, เชฒเซเชเชชเซเชฐเชฟเชฏเชคเชพเชจเซ เชชเชเชฒเซ, เชฎเซเชเชพ เชญเชพเชเชจเชพเช เชชเชนเซเชฒเซเชฅเซ เช เชคเซเชฎเชจเชพ เชชเซเชคเชพเชจเชพ เชเซเชเชฒเชพเช เชธเซเชฅเชพเชชเชจเซ เชนเชธเซเชคเชเชค เชเชฐเซ เชฒเซเชงเชพ เชเซ เช
เชจเซ เชคเซเชจเชพ เชเชชเชฏเซเชเชฎเชพเช เชคเซเชฎเชจเซ เชเซเชถเชณเชคเชพ เชตเชงเชพเชฐเซ เชเซ, เชเซ เชเชพเชฒเชจเซ เชธเชฐเชณ เชฌเชจเชพเชตเซ เชเซ.
เชตเชฐเซเชเชจ 2.3.0 เชฅเซ เชถเชฐเซ เชเชฐเซเชจเซ, Apache Spark เช Kubernetes เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชเชพเชฒเชคเชพ เชเชพเชฐเซเชฏเซ เชฎเชพเชเซ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเชฎเชฐเซเชฅเชจ เชฎเซเชณเชตเซเชฏเซเช เชเซ เช
เชจเซ เชเชเซ, เช
เชฎเซ เช เช
เชญเชฟเชเชฎเชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชชเชฐเชฟเชชเชเซเชตเชคเชพ, เชคเซเชจเชพ เชเชชเชฏเซเช เชฎเชพเชเซเชจเชพ เชตเชฟเชตเชฟเชง เชตเชฟเชเชฒเซเชชเซ เช
เชจเซ เช
เชฎเชฒเซเชเชฐเชฃ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเชตเชคเซ เชฎเซเชถเซเชเซเชฒเซเช เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซเชถเซเช.
เชธเซ เชชเซเชฐเชฅเชฎ, เชเชพเชฒเซ Apache Spark เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเชพเชฐเซเชฏเซ เช
เชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชตเชฟเชเชธเชพเชตเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเซเชเช เช
เชจเซ เชฒเชพเชเซเชทเชฃเชฟเช เชเซเชธเซเชจเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซเช เชเซเชฎเชพเช เชคเชฎเชพเชฐเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชเชพเชฐเซเชฏ เชเชฒเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชชเซเชธเซเชเชจเซ เชคเซเชฏเชพเชฐเซเชฎเชพเช, OpenShift เชจเซ เชเชชเชฏเซเช เชตเชฟเชคเชฐเชฃ เชคเชฐเซเชเซ เชฅเชพเชฏ เชเซ เช
เชจเซ เชคเซเชจเซ เชเชฎเชพเชจเซเชก เชฒเชพเชเชจ เชฏเซเชเชฟเชฒเชฟเชเซ (oc) เชจเซ เชธเชเชฌเชเชงเชฟเชค เชเชฆเซเชถเซ เชเชชเชตเชพเชฎเชพเช เชเชตเชถเซ. เช
เชจเซเชฏ Kubernetes เชตเชฟเชคเชฐเชฃเซ เชฎเชพเชเซ, เชชเซเชฐเชฎเชพเชฃเชญเซเชค Kubernetes เชเชฎเชพเชจเซเชก เชฒเชพเชเชจ เชฏเซเชเชฟเชฒเชฟเชเซ (kubectl) เช
เชฅเชตเชพ เชคเซเชฎเชจเชพ เชเชจเชพเชฒเซเช (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, oc adm เชจเซเชคเชฟ เชฎเชพเชเซ) เชจเชพ เช
เชจเซเชฐเซเชช เชเชฆเซเชถเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชชเซเชฐเชฅเชฎ เชเชชเชฏเซเช เชเซเชธ - เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช
เชเชพเชฐเซเชฏเซ เช เชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซเชจเชพ เชตเชฟเชเชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเช เชกเซเชเชพ เชเซเชฐเชพเชจเซเชธเชซเซเชฐเซเชฎเซเชถเชจเชจเซ เชกเซเชฌเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชธเซเชฆเซเชงเชพเชเชคเชฟเช เชฐเซเชคเซ, เช เชนเซเชคเซเช เชฎเชพเชเซ เชธเซเชเชฌเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชชเชฐเชเชคเซ เช เชเชคเชฟเชฎ เชชเซเชฐเชฃเชพเชฒเซเชเชจเชพ เชตเชพเชธเซเชคเชตเชฟเช (เชชเชฐเซเชเซเชทเชฃ เชเชคเชพเช) เชเชฆเชพเชนเชฐเชฃเซเชจเซ เชญเชพเชเซเชฆเชพเชฐเซ เชธเชพเชฅเซ เชตเชฟเชเชพเชธ เช เชตเชฐเซเชเชจเชพ เชเชพเชฐเซเชฏเซเชฎเชพเช เชเชกเชชเซ เช เชจเซ เชฌเชนเซเชคเชฐ เชธเชพเชฌเชฟเชค เชฅเชฏเซ เชเซ. เชเชฟเชธเซเชธเชพเชฎเชพเช เชเซเชฏเชพเชฐเซ เชเชชเชฃเซ เช เชเชคเชฟเชฎ เชธเชฟเชธเซเชเชฎเซเชจเชพ เชตเชพเชธเซเชคเชตเชฟเช เชเชฆเชพเชนเชฐเชฃเซ เชชเชฐ เชกเซเชฌเช เชเชฐเซเช เชเซเช, เชคเซเชฏเชพเชฐเซ เชฌเซ เชฆเซเชถเซเชฏเซ เชถเชเซเชฏ เชเซ:
- เชกเซเชตเชฒเชชเชฐ เชธเซเชเซเชจเซเชกเช
เชฒเซเชจ เชฎเซเชกเชฎเชพเช เชธเซเชฅเชพเชจเชฟเช เชฐเซเชคเซ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏ เชเชฒเชพเชตเซ เชเซ;
- เชกเซเชตเชฒเชชเชฐ เชเซเชธเซเช เชฒเซเชชเชฎเชพเช เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเชพเชธเซเช เชเชฒเชพเชตเซ เชเซ.
เชชเซเชฐเชฅเชฎ เชตเชฟเชเชฒเซเชชเชจเซ เช เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชฐเชนเซเชตเชพเชจเซ เช เชงเชฟเชเชพเชฐ เชเซ, เชชเชฐเชเชคเซ เชคเซเชฎเชพเช เชธเชเชเซเชฏเชพเชฌเชเชง เชเซเชฐเชซเชพเชฏเชฆเชพ เชถเชพเชฎเซเชฒ เชเซ:
- เชฆเชฐเซเช เชกเซเชตเชฒเชชเชฐเชจเซ เชเชพเชฐเซเชฏเชธเซเชฅเชณเชฅเซ เชคเซเชจเซ เชเชฐเซเชฐเซ เช เชเชคเชฟเชฎ เชธเชฟเชธเซเชเชฎเซเชธเชจเชพ เชคเชฎเชพเชฎ เชเชฆเชพเชนเชฐเชฃเซเชจเซ เชเชเซเชธเซเชธ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเซ เชเชตเชถเซเชฏเช เชเซ;
- เชเชพเชฐเซเชฏเชเชพเชฐเซ เชฎเชถเซเชจ เชชเชฐ เชตเชฟเชเชธเชฟเชค เชเชพเชฐเซเชฏเชจเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชธเชเชธเชพเชงเชจเซเชจเซ เชเชฐเซเชฐ เชเซ.
เชฌเซเชเชพ เชตเชฟเชเชฒเซเชชเชฎเชพเช เช เชเซเชฐเชซเชพเชฏเชฆเชพเช เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐเชจเซ เชเชชเชฏเซเช เชคเชฎเชจเซ เชเชพเชฐเซเชฏ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชธเชเชธเชพเชงเชจ เชชเซเชฒ เชซเชพเชณเชตเชตเชพ เช เชจเซ เชคเซเชจเซ เช เชเชคเชฟเชฎ เชธเชฟเชธเซเชเชฎ เชฆเชพเชเชฒเชพเช เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเชเซเชธเซเชธ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ, เชเซเชฌเชฐเชจเซเชเซเชธ เชฐเซเชฒ เชฎเซเชกเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฒเชตเชเซเช เชฐเซเชคเซ เชคเซเชจเซ เชเชเซเชธเซเชธ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชตเชฟเชเชพเชธ เชเซเชฎเชจเชพ เชคเชฎเชพเชฎ เชธเชญเซเชฏเซ. เชเชพเชฒเซ เชคเซเชจเซ เชชเซเชฐเชฅเชฎ เชเชชเชฏเซเชเชจเชพ เชเซเชธ เชคเชฐเซเชเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซเช - เชเซเชธเซเช เชฒเซเชชเชฎเชพเช เชเซเชฌเชฐเชจเซเชเชธ เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชธเซเชฅเชพเชจเชฟเช เชกเซเชตเชฒเชชเชฐ เชฎเชถเซเชจเชฎเชพเชเชฅเซ เชธเซเชชเชพเชฐเซเช เชเชพเชธเซเช เชฒเซเชเช เชเชฐเชตเซเช.
เชเชพเชฒเซ เชธเซเชฅเชพเชจเชฟเช เชฐเซเชคเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชธเซเชชเชพเชฐเซเช เชธเซเช เชเชฐเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชตเชฟเชถเซ เชตเชงเซ เชตเชพเชค เชเชฐเซเช. เชธเซเชชเชพเชฐเซเชเชจเซ เชเชชเชฏเซเช เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชคเซเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
mkdir /opt/spark
cd /opt/spark
wget http://mirror.linux-ia64.org/apache/spark/spark-2.4.5/spark-2.4.5.tgz
tar zxvf spark-2.4.5.tgz
rm -f spark-2.4.5.tgz
เช เชฎเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชชเซเชเซเชเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเซเช เชเซเช:
cd spark-2.4.5/
./build/mvn -Pkubernetes -DskipTests clean package
เชธเชเชชเซเชฐเซเชฃ เชฌเชฟเชฒเซเชกเชฎเชพเช เชเชฃเซ เชธเชฎเชฏ เชฒเชพเชเซ เชเซ, เช เชจเซ เชกเซเชเชฐ เชเชฎเซเช เชฌเชจเชพเชตเชตเชพ เช เชจเซ เชคเซเชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเชฐเซเชเชฐ เชซเชเซเชค "เชเชธเซเชฎเซเชฌเชฒเซ/" เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเชเชฅเซ เชเชพเชฐ เชซเชพเชเชฒเซเชจเซ เชเชฐเซเชฐ เชเซ, เชเซเชฅเซ เชคเชฎเซ เชซเชเซเชค เช เชธเชฌเชชเซเชฐเซเชเซเชเซเช เชฌเชจเชพเชตเซ เชถเชเซ:
./build/mvn -f ./assembly/pom.xml -Pkubernetes -DskipTests clean package
เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเซเชฌเซเชธ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชฌเซเช เชเชฎเซเช เชคเชฐเซเชเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชกเซเชเชฐ เชเชฎเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชนเซเช 2 เชธเชเชญเชตเชฟเชค เช เชญเชฟเชเชฎเซ เชเซ:
- เชเชจเชฐเซเช เชเชฐเซเชฒ เชกเซเชเชฐ เชเชฎเซเชเชฎเชพเช เชเชเซเชเชฟเชเซเชฏเซเชเซเชฌเชฒ เชธเซเชชเชพเชฐเซเช เชเชพเชธเซเช เชเซเชกเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ;
- เชฌเชจเชพเชตเซเชฒ เชเชฎเซเชเชฎเชพเช เชซเชเซเชค เชธเซเชชเชพเชฐเซเช เช เชจเซ เชเชฐเซเชฐเซ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชถเชพเชฎเซเชฒ เชเซ, เชเชเซเชเชฟเชเซเชฏเซเชเซเชฌเชฒ เชเซเชก เชฐเชฟเชฎเซเชเชฒเซ เชนเซเชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, HDFS เชฎเชพเช).
เชชเซเชฐเชฅเชฎ, เชเชพเชฒเซ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฆเชพเชนเชฐเชฃ เชงเชฐเชพเชตเชคเซ เชกเซเชเชฐ เชเชฎเซเช เชฌเชจเชพเชตเซเช. เชกเซเชเชฐ เชเชฎเซเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เชธเซเชชเชพเชฐเซเช เชชเชพเชธเซ "เชกเซเชเชฐ-เชเชฎเซเช-เชเซเชฒ" เชจเชพเชฎเชจเซ เชเชชเชฏเซเชเชฟเชคเชพ เชเซ. เชเชพเชฒเซ เชคเซเชจเชพ เชชเชฐ เชฎเชฆเชฆเชจเซ เช เชญเซเชฏเชพเชธ เชเชฐเซเช:
./bin/docker-image-tool.sh --help
เชคเซเชจเซ เชฎเชฆเชฆ เชตเชกเซ, เชคเชฎเซ เชกเซเชเชฐ เชเชฎเซเช เชฌเชจเชพเชตเซ เชถเชเซ เชเซ เช เชจเซ เชคเซเชจเซ เชฐเชฟเชฎเซเช เชฐเชเชฟเชธเซเชเซเชฐเซเชเชฎเชพเช เช เชชเชฒเซเชก เชเชฐเซ เชถเชเซ เชเซ, เชชเชฐเชเชคเซ เชกเชฟเชซเซเชฒเซเช เชฐเซเชชเซ เชคเซเชจเชพ เชเชฃเชพ เชเซเชฐเชซเชพเชฏเชฆเชพ เชเซ:
- เชจเชฟเชทเซเชซเชณ เชตเชฟเชจเชพ เชเช เช เชธเชฎเชฏเซ 3 เชกเซเชเชฐ เชเชฌเซเช เชฌเชจเชพเชตเซ เชเซ - เชธเซเชชเชพเชฐเซเช, เชชเชพเชฏเชธเซเชชเชพเชฐเซเช เช เชจเซ เชเชฐ เชฎเชพเชเซ;
- เชคเชฎเชจเซ เชเชฌเซเชจเซเช เชจเชพเชฎ เชธเซเชชเชทเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชคเซเช เชจเชฅเซ.
เชคเซเชฅเซ, เช เชฎเซ เชจเซเชเซ เชเชชเซเชฒ เช เชเชชเชฏเซเชเชฟเชคเชพเชจเชพ เชธเชเชถเซเชงเชฟเชค เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช:
vi bin/docker-image-tool-upd.sh
#!/usr/bin/env bash
function error {
echo "$@" 1>&2
exit 1
}
if [ -z "${SPARK_HOME}" ]; then
SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi
. "${SPARK_HOME}/bin/load-spark-env.sh"
function image_ref {
local image="$1"
local add_repo="${2:-1}"
if [ $add_repo = 1 ] && [ -n "$REPO" ]; then
image="$REPO/$image"
fi
if [ -n "$TAG" ]; then
image="$image:$TAG"
fi
echo "$image"
}
function build {
local BUILD_ARGS
local IMG_PATH
if [ ! -f "$SPARK_HOME/RELEASE" ]; then
IMG_PATH=$BASEDOCKERFILE
BUILD_ARGS=(
${BUILD_PARAMS}
--build-arg
img_path=$IMG_PATH
--build-arg
datagram_jars=datagram/runtimelibs
--build-arg
spark_jars=assembly/target/scala-$SPARK_SCALA_VERSION/jars
)
else
IMG_PATH="kubernetes/dockerfiles"
BUILD_ARGS=(${BUILD_PARAMS})
fi
if [ -z "$IMG_PATH" ]; then
error "Cannot find docker image. This script must be run from a runnable distribution of Apache Spark."
fi
if [ -z "$IMAGE_REF" ]; then
error "Cannot find docker image reference. Please add -i arg."
fi
local BINDING_BUILD_ARGS=(
${BUILD_PARAMS}
--build-arg
base_img=$(image_ref $IMAGE_REF)
)
local BASEDOCKERFILE=${BASEDOCKERFILE:-"$IMG_PATH/spark/docker/Dockerfile"}
docker build $NOCACHEARG "${BUILD_ARGS[@]}"
-t $(image_ref $IMAGE_REF)
-f "$BASEDOCKERFILE" .
}
function push {
docker push "$(image_ref $IMAGE_REF)"
}
function usage {
cat <<EOF
Usage: $0 [options] [command]
Builds or pushes the built-in Spark Docker image.
Commands:
build Build image. Requires a repository address to be provided if the image will be
pushed to a different registry.
push Push a pre-built image to a registry. Requires a repository address to be provided.
Options:
-f file Dockerfile to build for JVM based Jobs. By default builds the Dockerfile shipped with Spark.
-p file Dockerfile to build for PySpark Jobs. Builds Python dependencies and ships with Spark.
-R file Dockerfile to build for SparkR Jobs. Builds R dependencies and ships with Spark.
-r repo Repository address.
-i name Image name to apply to the built image, or to identify the image to be pushed.
-t tag Tag to apply to the built image, or to identify the image to be pushed.
-m Use minikube's Docker daemon.
-n Build docker image with --no-cache
-b arg Build arg to build or push the image. For multiple build args, this option needs to
be used separately for each build arg.
Using minikube when building images will do so directly into minikube's Docker daemon.
There is no need to push the images into minikube in that case, they'll be automatically
available when running applications inside the minikube cluster.
Check the following documentation for more information on using the minikube Docker daemon:
https://kubernetes.io/docs/getting-started-guides/minikube/#reusing-the-docker-daemon
Examples:
- Build image in minikube with tag "testing"
$0 -m -t testing build
- Build and push image with tag "v2.3.0" to docker.io/myrepo
$0 -r docker.io/myrepo -t v2.3.0 build
$0 -r docker.io/myrepo -t v2.3.0 push
EOF
}
if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then
usage
exit 0
fi
REPO=
TAG=
BASEDOCKERFILE=
NOCACHEARG=
BUILD_PARAMS=
IMAGE_REF=
while getopts f:mr:t:nb:i: option
do
case "${option}"
in
f) BASEDOCKERFILE=${OPTARG};;
r) REPO=${OPTARG};;
t) TAG=${OPTARG};;
n) NOCACHEARG="--no-cache";;
i) IMAGE_REF=${OPTARG};;
b) BUILD_PARAMS=${BUILD_PARAMS}" --build-arg "${OPTARG};;
esac
done
case "${@: -1}" in
build)
build
;;
push)
if [ -z "$REPO" ]; then
usage
exit 1
fi
push
;;
*)
usage
exit 1
;;
esac
เชคเซเชจเซ เชฎเชฆเชฆเชฅเซ, เช เชฎเซ เชธเซเชชเชพเชฐเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ Pi เชจเซ เชเชฃเชคเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชชเชฐเซเชเซเชทเชฃ เชเชพเชฐเซเชฏ เชงเชฐเชพเชตเชคเซ เชฎเซเชณเชญเซเชค เชธเซเชชเชพเชฐเซเช เชเชฎเซเชเชจเซ เชเชธเซเชฎเซเชฌเชฒ เชเชฐเซเช เชเซเช (เช เชนเซเช {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 เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช เชเชฆเซเชถ เชเชฒเชพเชตเซเช, เชฌเชจเชพเชตเซเชฒ เชธเชฐเซเชตเชฟเชธ เชเชเชพเชเชจเซเช เช เชจเซ เชกเซเชเชฐ เชเชฎเซเชเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเช:
/opt/spark/bin/spark-submit --name spark-test --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=3 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.kubernetes.namespace={project} --conf spark.submit.deployMode=cluster --conf spark.kubernetes.container.image={docker-registry-url}/{repo}/{image-name}:{tag} --conf spark.master=k8s://https://{OKD-API-URL} local:///opt/spark/examples/target/scala-2.11/jars/spark-examples_2.11-2.4.5.jar
เช เชนเซเช:
โเชจเชพเชฎ โ เชเชพเชฐเซเชฏเชจเซเช เชจเชพเชฎ เชเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชถเซเชเชเซเชจเชพ เชจเชพเชฎเชจเซ เชฐเชเชจเชพเชฎเชพเช เชญเชพเช เชฒเซเชถเซ;
โเชเซเชฒเชพเชธ โ เชเชเซเชเชฟเชเซเชฏเซเชเซเชฌเชฒ เชซเชพเชเชฒเชจเซ เชตเชฐเซเช, เชเซเชฏเชพเชฐเซ เชเชพเชฐเซเชฏ เชถเชฐเซ เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ เชเชนเซเชตเชพเชฏ เชเซ;
โconf โ เชธเซเชชเชพเชฐเซเช เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชชเชฐเชฟเชฎเชพเชฃเซ;
spark.executor.instances โ เชฒเซเชจเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชชเชพเชฐเซเช เชเชเซเชเชฟเชเซเชฏเซเชเชฐเซเชธเชจเซ เชธเชเชเซเชฏเชพ;
spark.kubernetes.authenticate.driver.serviceAccountName - เชชเซเชกเซเชธ เชฒเซเชจเซเช เชเชฐเชคเซ เชตเชเชคเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเชพ เชเซเชฌเชฐเชจเซเชเซเชธ เชธเชฐเซเชตเชฟเชธ เชเชเชพเชเชจเซเชเชจเซเช เชจเชพเชฎ (เชเซเชฌเชฐเชจเซเชเซเชธ API เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเชคเซ เชตเชเชคเซ เชธเซเชฐเชเซเชทเชพ เชธเชเชฆเชฐเซเชญ เช เชจเซ เชเซเชทเชฎเชคเชพเชเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพ);
spark.kubernetes.namespace โ Kubernetes เชจเซเชฎเชธเซเชชเซเชธ เชเซเชฎเชพเช เชกเซเชฐเชพเชเชตเชฐ เช เชจเซ เชเชเซเชเชฟเชเซเชฏเซเชเชฐ เชชเซเชกเซเชธ เชฒเซเชจเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ;
spark.submit.deployMode โ เชธเซเชชเชพเชฐเซเช เชฒเซเชจเซเช เชเชฐเชตเชพเชจเซ เชชเชฆเซเชงเชคเชฟ (เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช โเชเซเชฒเชธเซเชเชฐโ เชฎเชพเชเซ, เชธเซเชชเชพเชฐเซเช เชเชชเชฐเซเชเชฐ เช เชจเซ เชธเซเชชเชพเชฐเซเช โเชเซเชฒเชพเชฏเชจเซเชโเชจเชพ เชชเชเซเชจเชพ เชธเชเชธเซเชเชฐเชฃเซ เชฎเชพเชเซ เชตเชชเชฐเชพเชฏ เชเซ);
spark.kubernetes.container.image - เชกเซเชเชฐ เชเชฎเซเชเชจเซ เชเชชเชฏเซเช เชชเซเชกเซเชธ เชฒเซเชจเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ;
spark.master โ Kubernetes API URL (เชฌเชพเชนเซเชฏ เชเชฒเซเชฒเซเชเชฟเชค เชเซ เชคเซเชฅเซ เชเชเซเชธเซเชธ เชธเซเชฅเชพเชจเชฟเช เชฎเชถเซเชจเชฅเซ เชฅเชพเชฏ เชเซ);
local:// เช เชกเซเชเชฐ เชเชฎเซเชเชจเซ เช เชเชฆเชฐ เชเชเซเชเซเชเซเชฏเซเชเซเชฌเชฒ เชธเซเชชเชพเชฐเซเชเชจเซ เชฎเชพเชฐเซเช เชเซ.
เช เชฎเซ เชธเชเชฌเชเชงเชฟเชค OKD เชชเซเชฐเซเชเซเชเซเช เชชเชฐ เชเชเช เชเซเช เช เชจเซ เชฌเชจเชพเชตเซเชฒ เชชเซเชกเซเชธเชจเซ เช เชญเซเชฏเชพเชธ เชเชฐเซเช เชเซเช - https://{OKD-WEBUI-URL}/console/project/{project}/browse/pods.
เชตเชฟเชเชพเชธ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เช เชจเซเชฏ เชตเชฟเชเชฒเซเชชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชเซเชฎเชพเช เชธเซเชชเชพเชฐเซเชเชจเซ เชเช เชธเชพเชฎเชพเชจเซเชฏ เชฌเซเช เชเชฎเซเช เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซเชจเชพ เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเซ เชฆเซเชตเชพเชฐเชพ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซ เชเชเซเชเชฟเชเซเชฏเซเชเซเชฌเชฒ เชซเชพเชเชฒเซเชจเชพ เชธเซเชจเซเชชเชถเซเชเชจเซ เชฌเชพเชนเซเชฏ เชธเซเชเซเชฐเซเช (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, Hadoop) เชชเชฐ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชเซเชฒ เชเชฐเชคเซ เชตเชเชคเซ เชเชฒเซเชฒเซเชเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเช เชฒเชฟเชเช เชคเชฐเซเชเซ เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช เชเชฐเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชคเชฎเซ เชกเซเชเชฐ เชเชฎเซเชเซเชธเชจเซ เชชเซเชจเชเชจเชฟเชฐเซเชฎเชพเชฃ เชเชฐเซเชฏเชพ เชตเชฟเชจเชพ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซเชจเชพ เชตเชฟเชตเชฟเชง เชตเชฐเซเชเชจ เชเชฒเชพเชตเซ เชถเชเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชฌเซเช เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ WebHDFS เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ. เช เชฎเซ เชซเชพเชเชฒ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชตเชฟเชจเชเชคเซ เชฎเซเชเชฒเซเช เชเซเช (เช เชนเซเช {host} เช WebHDFS เชธเซเชตเชพเชจเซเช เชนเซเชธเซเช เชเซ, {port} เช WebHDFS เชธเซเชตเชพเชจเซเช เชชเซเชฐเซเช เชเซ, {path-to-file-on-hdfs} เชซเชพเชเชฒเชจเซ เชเชเซเชเชฟเชค เชฎเชพเชฐเซเช เชเซ HDFS เชชเชฐ):
curl -i -X PUT "http://{host}:{port}/webhdfs/v1/{path-to-file-on-hdfs}?op=CREATE
เชคเชฎเชจเซ เชเชจเชพ เชเซเชตเซ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ (เช เชนเซเช {location} เช URL เชเซ เชเซเชจเซ เชเชชเชฏเซเช เชซเชพเชเชฒ เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ):
HTTP/1.1 307 TEMPORARY_REDIRECT
Location: {location}
Content-Length: 0
เชธเซเชชเชพเชฐเซเช เชเชเซเชเซเชเซเชฏเซเชเซเชฌเชฒ เชซเชพเชเชฒเชจเซ HDFS เชฎเชพเช เชฒเซเชก เชเชฐเซ (เช เชนเซเช {path-to-local-file} เชตเชฐเซเชคเชฎเชพเชจ เชนเซเชธเซเช เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเชเซเชเชฟเชเซเชฏเซเชเซเชฌเชฒ เชซเชพเชเชฒเชจเซ เชชเชพเชฅ เชเซ):
curl -i -X PUT -T {path-to-local-file} "{location}"
เช เชชเชเซ, เช เชฎเซ HDFS เชชเชฐ เช เชชเชฒเซเชก เชเชฐเซเชฒเซ เชธเซเชชเชพเชฐเซเช เชซเชพเชเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช เชเชฐเซ เชถเชเซเช เชเซเช (เช เชนเซเช {class-name} เช เชตเชฐเซเชเชจเซเช เชจเชพเชฎ เชเซ เชเซเชจเซ เชเชพเชฐเซเชฏ เชชเซเชฐเซเชฃ เชเชฐเชตเชพ เชฎเชพเชเซ เชถเชฐเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ):
/opt/spark/bin/spark-submit --name spark-test --class {class-name} --conf spark.executor.instances=3 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.kubernetes.namespace={project} --conf spark.submit.deployMode=cluster --conf spark.kubernetes.container.image={docker-registry-url}/{repo}/{image-name}:{tag} --conf spark.master=k8s://https://{OKD-API-URL} hdfs://{host}:{port}/{path-to-file-on-hdfs}
เช เชจเซเชเชงเชตเซเช เชเซเชเช เชเซ HDFS เชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพ เช เชจเซ เชเชพเชฐเซเชฏ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซเชจเซ เชเชพเชคเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ Dockerfile เช เชจเซ entrypoint.sh เชธเซเชเซเชฐเชฟเชชเซเช เชฌเชฆเชฒเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเซ เชถเชเซ เชเซ - /opt/spark/jars เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เชเชถเซเชฐเชฟเชค เชฒเชพเชเชฌเซเชฐเซเชฐเซเชเชจเซ เชจเชเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ Dockerfile เชฎเชพเช เชเช เชจเชฟเชฐเซเชฆเซเชถ เชเชฎเซเชฐเซ เช เชจเซ เชเชจเซเชเซเชฐเซเชชเซเชเชจเซเชเชฎเชพเช SPARK_CLASSPATH เชฎเชพเช HDFS เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเชจเซ เชธเชฎเชพเชตเซเชถ เชเชฐเซ.
เชฌเซเชเซ เชเชชเชฏเซเช เชเซเชธ - เช เชชเชพเชเซ เชฒเชฟเชตเซ
เชตเชงเซเชฎเชพเช, เชเซเชฏเชพเชฐเซ เชเซเช เชเชพเชฐเซเชฏ เชตเชฟเชเชธเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชคเซเชจเซ CI/CD เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชญเชพเช เชฐเซเชชเซ เชถเชฐเซ เชเชฐเชตเชพเชจเซ เช เชจเซ เชคเซเชจเชพ เช เชฎเชฒเชจเซ เชธเซเชฅเชฟเชคเชฟเชจเซ เชเซเชฐเซ เช เชเชฐเชตเชพเชจเซ เชชเซเชฐเชถเซเชจ เชเชญเซ เชฅเชพเชฏ เชเซ. เช เชฒเชฌเชคเซเชค, เชคเชฎเซ เชคเซเชจเซ เชธเซเชฅเชพเชจเชฟเช เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฒเชพเชตเซ เชถเชเซ เชเซ, เชชเชฐเชเชคเซ เช CI/CD เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชเชเชฟเชฒ เชฌเชจเชพเชตเซ เชเซ เชเชพเชฐเชฃ เชเซ เชคเซเชจเซ CI เชธเชฐเซเชตเชฐ เชเชเชจเซเชเซเชธ/เชฐเชจเชฐเซเชธ เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเชจเซเชธเซเชเซเชฒ เช เชจเซ เชเซเช เชตเชตเชพเชจเซ เช เชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ API เชจเซ เชเชเซเชธเซเชธ เชธเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชฒเชเซเชทเซเชฏ เช เชฎเชฒเซเชเชฐเชฃเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐเชจเซ เช เชเชฆเชฐ เชนเซเชธเซเช เชเชฐเซเชฒเชพ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซเชจเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ REST API เชคเชฐเซเชเซ Apache Livy เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชชเชธเชเชฆ เชเชฐเซเชฏเซเช เชเซ. เชคเซเชจเซ เชฎเชฆเชฆ เชตเชกเซ, เชคเชฎเซ เชจเชฟเชฏเชฎเชฟเชค เชเชฐเซเชเชฒ เชตเชฟเชจเชเชคเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเซ เชถเชเซ เชเซ, เชเซ เชเซเชเชชเชฃ CI เชธเซเชฒเซเชฏเซเชถเชจเชจเชพ เชเชงเชพเชฐเซ เชธเชฐเชณเชคเชพเชฅเซ เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐเชจเซ เช เชเชฆเชฐ เชคเซเชจเซเช เชชเซเชฒเซเชธเชฎเซเชจเซเช เชเซเชฌเชฐเชจเซเชเซเชธ API เชธเชพเชฅเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเชคเซ เชตเชเชคเซ เชชเซเชฐเชฎเชพเชฃเซเชเชฐเชฃเชจเซ เชธเชฎเชธเซเชฏเชพเชจเซ เชนเชฒ เชเชฐเซ เชเซ.
เชเชพเชฒเซ เชคเซเชจเซ เชฌเซเชเชพ เชเชชเชฏเซเชเชจเชพ เชเซเชธ เชคเชฐเซเชเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซเช - เชเซเชธเซเช เชฒเซเชชเชฎเชพเช เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐ เชชเชฐ CI/CD เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชญเชพเช เชฐเซเชชเซ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเซเช.
Apache Livy เชตเชฟเชถเซ เชฅเซเชกเซเช - เชคเซ เชเช HTTP เชธเชฐเซเชตเชฐ เชคเชฐเซเชเซ เชเชพเชฎ เชเชฐเซ เชเซ เชเซ เชตเซเชฌ เชเชจเซเชเชฐเชซเซเชธ เช
เชจเซ RESTful API เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ เชเซ เชคเชฎเชจเซ เชเชฐเซเชฐเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชชเชธเชพเชฐ เชเชฐเซเชจเซ เชฐเชฟเชฎเซเชเชฒเซ เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช เชถเชฐเซ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชชเชฐเชเชชเชฐเชพเชเชค เชฐเซเชคเซ เชคเซ HDP เชตเชฟเชคเชฐเชฃเชจเชพ เชญเชพเช เชฐเซเชชเซ เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ, เชชเชฐเชเชคเซ เชฏเซเชเซเชฏ เชฎเซเชจเชฟเชซเซเชธเซเช เช
เชจเซ เชกเซเชเชฐ เชเชฎเซเชเซเชจเชพ เชธเชฎเซเชนเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ OKD เช
เชฅเชตเชพ เช
เชจเซเชฏ เชเซเชเชชเชฃ เชเซเชฌเชฐเชจเซเชเซเชธ เชเชจเซเชธเซเชเซเชฒเซเชถเชจเชฎเชพเช เชชเชฃ เชเชฎเชพเชตเซ เชถเชเชพเชฏ เชเซ, เชเซเชฎ เชเซ เช เชเช -
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} - Docker เชเชฎเซเช เชเซ เช, {livy-url} - เชเชเซเชเชฟเชค URL เชเซเชฏเชพเช เชธเชฐเซเชตเชฐ เชธเซเชฒเชญ Livy เชนเชถเซ; เชเซ Red Hat OpenShift เชจเซ เชเชชเชฏเซเช Kubernetes เชตเชฟเชคเชฐเชฃ เชคเชฐเซเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชคเซ โเชฐเซเชโ เชฎเซเชจเชฟเชซเซเชธเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซเชฏเชฅเชพ เชจเซเชกเชชเซเชฐเซเช เชชเซเชฐเชเชพเชฐเชจเชพ เช เชจเซเชฐเซเชช เชชเซเชฐเชตเซเชถ เช เชฅเชตเชพ เชธเซเชตเชพ เชฎเซเชจเชฟเชซเซเชธเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ):
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
component: livy
name: livy
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
component: livy
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
component: livy
spec:
containers:
- command:
- livy-server
env:
- name: K8S_API_HOST
value: localhost
- name: SPARK_KUBERNETES_IMAGE
value: 'gnut3ll4/spark:v1.0.14'
image: '{registry-url}/{image-name}:{tag}'
imagePullPolicy: Always
name: livy
ports:
- containerPort: 8998
name: livy-rest
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/log/livy
name: livy-log
- mountPath: /opt/.livy-sessions/
name: livy-sessions
- mountPath: /opt/livy/conf/livy.conf
name: livy-config
subPath: livy.conf
- mountPath: /opt/spark/conf/spark-defaults.conf
name: spark-config
subPath: spark-defaults.conf
- command:
- /usr/local/bin/kubectl
- proxy
- '--port'
- '8443'
image: 'gnut3ll4/kubectl-sidecar:latest'
imagePullPolicy: Always
name: kubectl
ports:
- containerPort: 8443
name: k8s-api
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: spark
serviceAccountName: spark
terminationGracePeriodSeconds: 30
volumes:
- emptyDir: {}
name: livy-log
- emptyDir: {}
name: livy-sessions
- configMap:
defaultMode: 420
items:
- key: livy.conf
path: livy.conf
name: livy-config
name: livy-config
- configMap:
defaultMode: 420
items:
- key: spark-defaults.conf
path: spark-defaults.conf
name: livy-config
name: spark-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: livy-config
data:
livy.conf: |-
livy.spark.deploy-mode=cluster
livy.file.local-dir-whitelist=/opt/.livy-sessions/
livy.spark.master=k8s://http://localhost:8443
livy.server.session.state-retain.sec = 8h
spark-defaults.conf: 'spark.kubernetes.container.image "gnut3ll4/spark:v1.0.14"'
---
apiVersion: v1
kind: Service
metadata:
labels:
app: livy
name: livy
spec:
ports:
- name: livy-rest
port: 8998
protocol: TCP
targetPort: 8998
selector:
component: livy
sessionAffinity: None
type: ClusterIP
---
apiVersion: route.openshift.io/v1
kind: Route
metadata:
labels:
app: livy
name: livy
spec:
host: {livy-url}
port:
targetPort: livy-rest
to:
kind: Service
name: livy
weight: 100
wildcardPolicy: None
เชคเซเชจเซ เชฒเชพเชเซ เชเชฐเซเชฏเชพ เชชเชเซ เช เชจเซ เชธเชซเชณเชคเชพเชชเซเชฐเซเชตเช เชชเซเชก เชฒเซเชจเซเช เชเชฐเซเชฏเชพ เชชเชเซ, เชฒเชฟเชตเซ เชเซเชฐเชพเชซเชฟเชเชฒ เชเชจเซเชเชฐเชซเซเชธ เชฒเชฟเชเช เชชเชฐ เชเชชเชฒเชฌเซเชง เชเซ: http://{livy-url}/ui. เชฒเชฟเชตเซ เชธเชพเชฅเซ, เช เชฎเซ เช เชฎเชพเชฐเชพ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเชจเซ REST เชตเชฟเชจเชเชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซ เชถเชเซเช เชเซเช, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชชเซเชธเซเชเชฎเซเชจ. เชตเชฟเชจเชเชคเซเช เชธเชพเชฅเซเชจเชพ เชธเชเชเซเชฐเชนเชจเซเช เชเชฆเชพเชนเชฐเชฃ เชจเซเชเซ เชฐเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ (เชฒเซเชจเซเช เชเชฐเซเชฒเชพ เชเชพเชฐเซเชฏเชจเชพ เชเชชเชฐเซเชถเชจ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเชฒเซ เชธเชพเชฅเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชฆเชฒเซเชฒเซ "args" เชเชฐเซเชฎเชพเช เชชเชธเชพเชฐ เชเชฐเซ เชถเชเชพเชฏ เชเซ):
{
"info": {
"_postman_id": "be135198-d2ff-47b6-a33e-0d27b9dba4c8",
"name": "Spark Livy",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "1 Submit job with jar",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{nt"file": "local:///opt/spark/examples/target/scala-2.11/jars/spark-examples_2.11-2.4.5.jar", nt"className": "org.apache.spark.examples.SparkPi",nt"numExecutors":1,nt"name": "spark-test-1",nt"conf": {ntt"spark.jars.ivy": "/tmp/.ivy",ntt"spark.kubernetes.authenticate.driver.serviceAccountName": "spark",ntt"spark.kubernetes.namespace": "{project}",ntt"spark.kubernetes.container.image": "{docker-registry-url}/{repo}/{image-name}:{tag}"nt}n}"
},
"url": {
"raw": "http://{livy-url}/batches",
"protocol": "http",
"host": [
"{livy-url}"
],
"path": [
"batches"
]
}
},
"response": []
},
{
"name": "2 Submit job without jar",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{nt"file": "hdfs://{host}:{port}/{path-to-file-on-hdfs}", nt"className": "{class-name}",nt"numExecutors":1,nt"name": "spark-test-2",nt"proxyUser": "0",nt"conf": {ntt"spark.jars.ivy": "/tmp/.ivy",ntt"spark.kubernetes.authenticate.driver.serviceAccountName": "spark",ntt"spark.kubernetes.namespace": "{project}",ntt"spark.kubernetes.container.image": "{docker-registry-url}/{repo}/{image-name}:{tag}"nt},nt"args": [ntt"HADOOP_CONF_DIR=/opt/spark/hadoop-conf",ntt"MASTER=k8s://https://kubernetes.default.svc:8443"nt]n}"
},
"url": {
"raw": "http://{livy-url}/batches",
"protocol": "http",
"host": [
"{livy-url}"
],
"path": [
"batches"
]
}
},
"response": []
}
],
"event": [
{
"listen": "prerequest",
"script": {
"id": "41bea1d0-278c-40c9-ad42-bf2e6268897d",
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"id": "3cdd7736-a885-4a2d-9668-bd75798f4560",
"type": "text/javascript",
"exec": [
""
]
}
}
],
"protocolProfileBehavior": {}
}
เชเชพเชฒเซ เชธเชเชเซเชฐเชนเชฎเชพเชเชฅเซ เชชเซเชฐเชฅเชฎ เชตเชฟเชจเชเชคเซเชจเซ เช เชฎเชฒ เชเชฐเซเช, OKD เชเชจเซเชเชฐเชซเซเชธ เชชเชฐ เชเชพเช เช เชจเซ เชคเชชเชพเชธเซ เชเซ เชเชพเชฐเซเชฏ เชธเชซเชณเชคเชพเชชเซเชฐเซเชตเช เชถเชฐเซ เชฅเชฏเซเช เชเซ - https://{OKD-WEBUI-URL}/console/project/{project}/browse/pods. เชคเซ เช เชธเชฎเชฏเซ, เชฒเชฟเชตเซ เชเชจเซเชเชฐเชซเซเชธ (http://{livy-url}/ui) เชฎเชพเช เชเช เชธเชคเซเชฐ เชฆเซเชเชพเชถเซ, เชเซเชฎเชพเช เชฒเชฟเชตเซ API เช เชฅเชตเชพ เชเซเชฐเชพเชซเชฟเชเชฒ เชเชจเซเชเชฐเชซเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชคเชฎเซ เชเชพเชฐเซเชฏเชจเซ เชชเซเชฐเชเชคเชฟเชจเซ เชเซเชฐเซ เช เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชธเชคเซเชฐเชจเซ เช เชญเซเชฏเชพเชธ เชเชฐเซ เชถเชเซ เชเซ. เชฒเซเช
เชนเชตเซ เชเชพเชฒเซ เชฌเชคเชพเชตเซเช เชเซ เชฒเชฟเชตเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ เชฒเชฟเชตเซ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชชเซเชกเชจเซ เช เชเชฆเชฐ เชฒเชฟเชตเซ เชเชจเซเชเซเชจเชฐเชจเชพ เชฒเซเชเชจเซ เชคเชชเชพเชธ เชเชฐเซเช - https://{OKD-WEBUI-URL}/console/project/{project}/browse/pods/{livy-pod-name }?tab=logs. เชคเซเชฎเชพเชเชฅเซ เชเชชเชฃเซ เชเซเช เชถเชเซเช เชเซเช เชเซ เชเซเชฏเชพเชฐเซ โlivyโ เชจเชพเชฎเชจเชพ เชเชจเซเชเซเชจเชฐเชฎเชพเช Livy REST API เชจเซ เชเซเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชเช เชธเซเชชเชพเชฐเซเช-เชธเชฌเชฎเชฟเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซเชฎ เชเซ เชเชชเชฃเซ เชเชชเชฐ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชเซ (เช เชนเซเช {livy-pod-name} เช เชฌเชจเชพเชตเซเชฒ เชชเซเชกเชจเซเช เชจเชพเชฎ เชเซ. เชฒเชฟเชตเซ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ). เชธเชเชเซเชฐเชน เชเช เชฌเซเชเซ เชเซเชตเซเชฐเซ เชชเชฃ เชฐเชเซ เชเชฐเซ เชเซ เชเซ เชคเชฎเชจเซ เชเชตเชพ เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ เชเซ เชฒเชฟเชตเซ เชธเชฐเซเชตเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเชชเชพเชฐเซเช เชเชเซเชเชฟเชเซเชฏเซเชเซเชฌเชฒเชจเซ เชฐเชฟเชฎเซเชเชฒเซ เชนเซเชธเซเช เชเชฐเซ เชเซ.
เชคเซเชฐเซเชเซ เชเชชเชฏเซเช เชเซเชธ - เชธเซเชชเชพเชฐเซเช เชเชชเชฐเซเชเชฐ
เชนเชตเซ เชเซเชฏเชพเชฐเซ เชเชพเชฐเซเชฏเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ, เชคเซเชฏเชพเชฐเซ เชคเซเชจเซ เชจเชฟเชฏเชฎเชฟเชคเชชเชฃเซ เชเชฒเชพเชตเชตเชพเชจเซ เชชเซเชฐเชถเซเชจ เชเชญเซ เชฅเชพเชฏ เชเซ. เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชจเชฟเชฏเชฎเชฟเชคเชชเชฃเซ เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเชพเชจเซ เชฎเซเชณ เชฐเซเชค เช เชเซเชฐเซเชจเชเซเชฌ เชเชจเซเชเชฟเชเซ เชเซ เช เชจเซ เชคเชฎเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ, เชชเชฐเชเชคเซ เช เชเซเชทเชฃเซ เชเซเชฌเชฐเชจเซเชเซเชธเชฎเชพเช เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชชเชฐเซเชเชฐเซเชธเชจเซ เชเชชเชฏเซเช เชเซเชฌ เช เชฒเซเชเชชเซเชฐเชฟเชฏ เชเซ เช เชจเซ เชธเซเชชเชพเชฐเซเช เชฎเชพเชเซ เชเชเชฆเชฎ เชชเชฐเชฟเชชเชเซเชต เชเชชเชฐเซเชเชฐ เชเซ, เชเซ เชชเชฃ เชเซ. เชเชจเซเชเชฐเชชเซเชฐเชพเชเช-เชฒเซเชตเชฒ เชธเซเชฒเซเชฏเซเชถเชจเซเชธเชฎเชพเช เชตเชชเชฐเชพเชฏ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฒเชพเชเชเชฌเซเชจเซเชก เชซเชพเชธเซเชเชกเซเชเชพ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ). เช เชฎเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชญเชฒเชพเชฎเชฃ เชเชฐเซเช เชเซเช - เชธเซเชชเชพเชฐเซเชเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชฐ เชธเชเชธเซเชเชฐเชฃ (2.4.5)เชฎเชพเช เชเซเชฌเชฐเชจเซเชเซเชธเชฎเชพเช เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชตเชฟเชเชฒเซเชชเซ เชเซ, เชเซเชฏเชพเชฐเซ เชเชเชพเชฎเซ เชฎเซเชเซเชฏ เชธเชเชธเซเชเชฐเชฃ (3.0.0) เชเซเชฌเชฐเชจเซเชเซเชธ เชฎเชพเชเซ เชธเชเชชเซเชฐเซเชฃ เชธเชฎเชฐเซเชฅเชจ เชเชพเชนเซเชฐ เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชคเซเชจเซ เชชเซเชฐเชเชพเชถเชจ เชคเชพเชฐเซเช เช เชเชพเชฃ เชเซ. . เชธเซเชชเชพเชฐเซเช เชเชชเชฐเซเชเชฐ เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชตเชฟเชเชฒเซเชชเซ เชเชฎเซเชฐเซเชจเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชธเซเชชเชพเชฐเซเช เชชเซเชกเซเชธเชฎเชพเช Hadoop เชเชเซเชธเซเชธ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชธเชพเชฅเซ เชเซเชจเซเชซเชฟเชเชฎเซเชชเชจเซ เชฎเชพเชเชจเซเช เชเชฐเซเชจเซ) เช เชจเซ เชจเชฟเชฏเชฎเชฟเชค เชฐเซเชคเซ เชธเซเชจเชฟเชถเซเชเชฟเชค เชเชพเชฐเซเชฏ เชเชฒเชพเชตเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชเชฎเซเชฐเซเชจเซ เช เชเชพเชฎเซเชจเซ เชตเชณเชคเชฐ เชเชชเซ เชเซ.
เชเชพเชฒเซ เชคเซเชจเซ เชคเซเชฐเซเชเชพ เชเชชเชฏเซเชเชจเชพ เชเซเชธ เชคเชฐเซเชเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซเช - เชเชคเซเชชเชพเชฆเชจ เชฒเซเชชเชฎเชพเช เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซ เชจเชฟเชฏเชฎเชฟเชคเชชเชฃเซ เชเชฒเชพเชตเซ.
เชธเซเชชเชพเชฐเซเช เชเชชเชฐเซเชเชฐ เชเชชเชจ เชธเซเชฐเซเชธ เชเซ เช
เชจเซ เชเซเชเชฒ เชเซเชฒเชพเชเชก เชชเซเชฒเซเชเชซเซเชฐเซเชฎเชจเซ เช
เชเชฆเชฐ เชตเชฟเชเชธเชฟเชค เชเซ -
- เชฒเชพเชเชเชฌเซเชจเซเชก เชซเชพเชธเซเชเชกเซเชเชพ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ/เชเซเชฒเชพเชเชกเชซเซเชฒเซเชจเชพ เชเชจเซเชธเซเชเซเชฒเซเชถเชจเชจเชพ เชญเชพเช เชฐเซเชชเซ;
- เชนเซเชฒเซเชฎเชจเซ เชเชชเชฏเซเช:
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" เชถเชฌเซเชฆเชเซเชทเชฎเชพเช เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเชพ Sparkเชจเชพ เชธเชเชธเซเชเชฐเชฃเชจเซ เชฆเชฐเซเชถเชพเชตเชตเซเช เชเชตเชถเซเชฏเช เชเซ;
- โ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 เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชธเชพเชฅเซ ConfigMap เชจเซ เชเชฒเซเชฒเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชคเซ เชจเชฟเชฏเชฎเชฟเชคเชชเชฃเซ เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชชเชฃ เชฏเซเชเซเชฏ เชเซ - "เชถเซเชกเซเชฏเซเชฒ" เชชเชฐเชฟเชฎเชพเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชเชชเซเชฒ เชเชพเชฐเซเชฏ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซเชจเซเช เชถเซเชกเซเชฏเซเชฒ เชจเชฟเชฐเซเชฆเชฟเชทเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชคเซ เชชเชเซ, เช เชฎเซ เช เชฎเชพเชฐเชพ เชฎเซเชจเชฟเชซเซเชธเซเชเชจเซ spark-pi.yaml เชซเชพเชเชฒเชฎเชพเช เชธเชพเชเชตเซเช เชเซเช เช เชจเซ เชคเซเชจเซ เช เชฎเชพเชฐเชพ Kubernetes เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชฒเชพเชเซ เชเชฐเซเช เชเซเช:
oc apply -f spark-pi.yaml
เช "sparkapplications" เชชเซเชฐเชเชพเชฐเชจเซเช เชเชฌเซเชเซเชเซเช เชฌเชจเชพเชตเชถเซ:
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 เชจเซ เชคเชฎเชพเชฎ เชเชพเชฎเซเช เชนเซเชตเชพ เชเชคเชพเช, เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเชพ เชซเชพเชฏเชฆเชพ เชชเชฃ เชนเชคเชพ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชกเซเชเชพเชจเซ เชเซเชก เชชเชนเซเชเชเชพเชกเชตเชพเชจเซ เชธเชฟเชฆเซเชงเชพเชเชค (เชกเซเชเชพเชฅเซ เชเซเชกเชจเซ เชฌเชฆเชฒเซ). เชคเซเชจเชพ เชฎเชพเชเซ เชเชญเชพเชฐ, เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซ เชจเซเชกเซเชธ เชชเชฐ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเชคเชพ เชเซเชฏเชพเช เชเชฃเชคเชฐเซเชฎเชพเช เชธเชพเชฎเซเชฒ เชกเซเชเชพ เชธเซเชฅเชฟเชค เชนเชคเซ, เช เชจเซ เชจเซเชเชตเชฐเซเช เชชเชฐ เชกเซเชเชพ เชชเชนเซเชเชเชพเชกเชตเชพเชฎเชพเช เชเซ เชธเชฎเชฏ เชฒเชพเชเซเชฏเซ เชนเชคเซ เชคเซ เชจเซเชเชงเชชเชพเชคเซเชฐ เชฐเซเชคเซ เชเชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ. เชเซเชฌเชฐเชจเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชตเชเชคเซ, เช เชฎเชจเซ เชธเชฎเชเซเชฐ เชจเซเชเชตเชฐเซเช เชชเชฐ เชเชพเชฐเซเชฏเชฎเชพเช เชธเชพเชฎเซเชฒ เชกเซเชเชพเชจเซ เชเชธเซเชกเชตเชพเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเชจเซ เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเซ เชเซ. เชเซ เชคเซเช เชชเซเชฐเชคเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชฎเซเชเชพ เชนเซเชฏ, เชคเซ เชเชพเชฐเซเชฏ เช เชฎเชฒเซเชเชฐเชฃเชจเซ เชธเชฎเชฏ เชจเซเชเชงเชชเชพเชคเซเชฐ เชฐเซเชคเซ เชตเชงเซ เชถเชเซ เชเซ, เช เชจเซ เชคเซเชฎเชจเชพ เชเชพเชฎเชเชฒเชพเช เชธเซเชเซเชฐเซเช เชฎเชพเชเซ เชธเซเชชเชพเชฐเซเช เชเชพเชธเซเช เชเชจเซเชธเซเชเชจเซเชธเชจเซ เชซเชพเชณเชตเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชกเชฟเชธเซเช เชธเซเชชเซเชธเชจเซ เชชเชฃ เชเชฐเซเชฐ เชชเชกเซ เชเซ. เช เชเซเชฐเชฒเชพเชญเชจเซ เชตเชฟเชถเชฟเชทเซเช เชธเซเชซเซเชเชตเซเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชเชพเชกเซ เชถเชเชพเชฏ เชเซ เชเซ เชเซเชฌเชฐเชจเซเชเซเชธ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชฒเซเชเซเชธเชฟเชฏเซ) เชฎเชพเช เชกเซเชเชพ เชธเซเชฅเชพเชจเชจเซ เชเชพเชคเชฐเซ เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชเชจเซ เช เชฐเซเชฅ เช เชเซ เชเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐเชจเชพ เชจเซเชกเซเชธ เชชเชฐ เชกเซเชเชพเชจเซ เชธเชเชชเซเชฐเซเชฃ เชจเชเชฒ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชค เชเซ.
- เชฌเซเชเซ เชฎเชนเชคเซเชตเชจเซ เชเซเชฐเชฒเชพเชญ เช เชธเซเชฐเชเซเชทเชพ เชเซ. เชฎเซเชณเชญเซเชค เชฐเซเชคเซ, เชเชพเชฒเชคเชพ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซเชจเซ เชฒเชเชคเซ เชธเซเชฐเชเซเชทเชพ-เชธเชเชฌเชเชงเชฟเชค เชธเซเชตเชฟเชงเชพเช เช เชเซเชทเชฎ เชเซ, เชเชฐเซเชฌเซเชฐเซเชธเชจเซ เชเชชเชฏเซเช เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซเชเซเชฎเชพเช เชเชตเชฐเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชจเชฅเซ (เชเซเชเซ เช เชจเซเชฐเซเชช เชตเชฟเชเชฒเซเชชเซ เชธเชเชธเซเชเชฐเชฃ 3.0.0 เชฎเชพเช เชฐเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเชคเชพ, เชเซเชจเซ เชตเชงเชพเชฐเชพเชจเชพ เชเชพเชฐเซเชฏเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ), เช เชจเซ เชธเซเชฐเชเซเชทเชพ เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชฎเชพเชเซ Spark (https://spark.apache.org/docs/2.4.5/security.html) เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชซเชเซเชค เชฏเชพเชฐเซเชจ, เชฎเซเชธเซเชธ เช เชจเซ เชธเซเชเซเชจเซเชกเช เชฒเซเชจ เชเซเชฒเชธเซเชเชฐ เชเซ เชธเซเชเซเชฐ เชคเชฐเซเชเซ เชฆเซเชเชพเชฏ เชเซ. เชคเซ เช เชธเชฎเชฏเซ, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเซ เชเซเชจเชพ เชนเซเช เชณ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซ เชถเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ เชคเซเชจเซ เชธเซเชงเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชถเชเชพเชคเซ เชจเชฅเซ - เช เชฎเซ เชซเชเซเชค เชคเซ เชธเซเชตเชพ เชเชเชพเชเชจเซเชเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเช เชเซเช เชเซ เชเซเชจเชพ เชนเซเช เชณ เชคเซ เชเชพเชฐเซเชฏ เชเชฐเชถเซ, เช เชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชเซเช เชตเซเชฒ เชธเซเชฐเชเซเชทเชพ เชจเซเชคเชฟเชเชจเชพ เชเชงเชพเชฐเซ เชชเชธเชเชฆ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เช เชธเชเชฆเชฐเซเชญเซ, เชเชพเช เชคเซ เชฐเซเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซ เชเชคเซเชชเชพเชฆเช เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช เชธเชฒเชพเชฎเชค เชจเชฅเซ, เช เชฅเชตเชพ เชฐเซเชจเซเชกเชฎ UID เชงเชฐเชพเชตเชคเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ, เชเซ เชกเซเชเชพเชจเชพ เชเชเซเชธเซเชธ เช เชงเชฟเชเชพเชฐเซเชจเซเช เชตเชฟเชคเชฐเชฃ เชเชฐเชคเซ เชตเชเชคเซ เช เชธเซเชตเชฟเชงเชพเชเชจเช เชเซ (เช PodSecurity Policies เชฌเชจเชพเชตเซเชจเซ เช เชจเซ เชคเซเชจเซ เชฒเชฟเชเช เชเชฐเซเชจเซ เชเชเซเชฒเซ เชถเชเชพเชฏ เชเซ. เช เชจเซเชฐเซเชช เชธเซเชตเชพ เชเชเชพเชเชจเซเชเซเชธ). เชนเชพเชฒเชฎเชพเช, เชเชเซเชฒ เช เชเซ เชเซ เชเชพเช เชคเซ เชฌเชงเซ เชเชฐเซเชฐเซ เชซเชพเชเชฒเซเชจเซ เชธเซเชงเซ เชกเซเชเชฐ เชเชฎเซเชเชฎเชพเช เชฎเซเชเซ, เช เชฅเชตเชพ เชคเชฎเชพเชฐเซ เชธเชเชธเซเชฅเชพเชฎเชพเช เช เชชเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฒเชพ เชฐเชนเชธเซเชฏเซเชจเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเชพ เช เชจเซ เชชเซเชจเชเชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชชเชฆเซเชงเชคเชฟเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชชเชพเชฐเซเช เชฒเซเชจเซเช เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช เชซเซเชฐเชซเชพเชฐ เชเชฐเซ.
- เชเซเชฌเชฐเชจเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเชชเชพเชฐเซเช เชเซเชฌเซเชธ เชเชฒเชพเชตเชตเชพเชจเซเช เชธเชคเซเชคเชพเชตเชพเชฐ เชฐเซเชคเซ เชนเชเซ เชชเชฃ เชชเซเชฐเชพเชฏเซเชเชฟเช เชฎเซเชกเชฎเชพเช เชเซ เช เชจเซ เชญเชตเชฟเชทเซเชฏเชฎเชพเช เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเซ เชเชฒเชพเชเซเชคเชฟเชเชฎเชพเช เชจเซเชเชงเชชเชพเชคเซเชฐ เชซเซเชฐเชซเชพเชฐเซ เชฅเช เชถเชเซ เชเซ. เช เชจเซ เชเชฐเซเชเชฐ, เชธเชพเชฎเชเซเชฐเซ เชคเซเชฏเชพเชฐ เชเชฐเชคเซ เชตเชเชคเซ, เชธเชเชธเซเชเชฐเชฃ 2.3.0 เช เชจเซ 2.4.5 เชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, เชตเชฐเซเชคเชจ เชจเซเชเชงเชชเชพเชคเซเชฐ เชฐเซเชคเซ เช เชฒเช เชนเชคเซเช.
เชเชพเชฒเซ เช เชชเชกเซเชเซเชธเชจเซ เชฐเชพเชน เชเซเชเช - เชคเชพเชเซเชคเชฐเชฎเชพเช เชธเซเชชเชพเชฐเซเช (3.0.0) เชจเซเช เชจเชตเซเช เชธเชเชธเซเชเชฐเชฃ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, เชเซเชฃเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชธเซเชชเชพเชฐเซเชเชจเชพ เชเชพเชฐเซเชฏเชฎเชพเช เชจเซเชเชงเชชเชพเชคเซเชฐ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเซเชฏเชพ เชนเชคเชพ, เชชเชฐเชเชคเซ เช เชธเชเชธเชพเชงเชจ เชธเชเชเชพเชฒเช เชฎเชพเชเซ เชธเชฎเชฐเซเชฅเชจเชจเซ เชชเซเชฐเชพเชฏเซเชเชฟเช เชธเซเชฅเชฟเชคเชฟ เชเชพเชณเชตเซ เชฐเชพเชเซ เชนเชคเซ. เชเชฆเชพเช เชเชเชพเชฎเซ เช เชชเชกเซเชเซเชธ เชคเชฎเชพเชฐเซ เชธเชฟเชธเซเชเชฎเชจเซ เชธเซเชฐเชเซเชทเชพ เชฎเชพเชเซ เชกเชฐเซเชฏเชพ เชตเชฟเชจเชพ เช เชจเซ เชเชพเชฐเซเชฏเชพเชคเซเชฎเช เชเชเชเซเชจเซ เชธเซเชตเชคเชเชคเซเชฐ เชฐเซเชคเซ เชธเชเชถเซเชงเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชตเชฟเชจเชพ เชฏเชพเชฐเซเชจเชจเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชเซเชกเซ เชฆเซเชตเชพ เช เชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชธเซเชชเชพเชฐเซเช เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเชพเชจเซ เชญเชฒเชพเชฎเชฃ เชเชฐเชตเชพเชจเซเช เชเชฐเซเชเชฐ เชถเชเซเชฏ เชฌเชจเชพเชตเชถเซ.
เชซเชฟเชจ.
เชธเซเชฐเซเชธ: www.habr.com