「クラウドネイティブ」Apache Livy on k8s 解説と実践的な運用

「クラウドネイティブ」Apache Livy on k8s 解説と実践的な運用

1. 概要

Livy は、Spark クラスターと対話するための REST インターフェイスを提供するサービスです。 Spark ジョブまたは Spark コードを送信し、同期的または非同期的に結果を返すことができます。また、Restful インターフェースまたは RPC クライアント ライブラリを介して Sparkcontext 管理も提供します。 Livy は Spark およびアプリケーション サービスとのやり取りも簡素化し、Web/モバイル経由で Spark の使用とやり取りできるようにします。

公式サイト: https://livy.incubator.apache.org/GitHub アドレス: https://github.com/apache/incubator-livy Apache Livy の詳細については、私の記事「Spark Open Source REST Service - Apache Livy (Spark Client)」も参照してください。

2. オーケストレーションとデプロイメントを開始する

1. 展開パッケージの準備

コンパイルされた livy デプロイメント パッケージもここに提供されます。必要な場合は、自分でダウンロードできます。

リンク: https://pan.baidu.com/s/1pPCbe0lUJ6ji8rvQYsVw9A?pwd=qn7i 抽出コード: qn7i

1) イメージを構築する

Dockerファイル

 myharbor.com/bigdata/centosより: 7.9.2009

RUN rm -f / etc / localtime && ln -sv / usr / share / zoneinfo / Asia / Shanghai / etc / localtime && echo "アジア/上海" > / etc / timezone
実行エクスポート LANG = zh_CN .UTF - 8

### ツールをインストールする
yum install -y vim tar wget curl less telnet net -tools lsof を実行します。

実行 groupadd --system --gid=9999 admin && useradd --system -m /home/admin --uid=9999 --gid=admin admin

mkdir -p / opt / apacheを実行します

apache-livy-0.8.0-incubating-SNAPSHOT-bin.zip/opt/apache/​​​​​​​​​​​​ を追加します。
ENV LIVY_HOME =/ opt / apache / apache - livy
RUN ln - s / opt / apache / apache - livy - 0.8 .0 - incubating - SNAPSHOT - bin $LIVY_HOME

ADD hadoop - 3.3 .2 .tar .gz / opt / apache /
ENV HADOOP_HOME =/ opt / apache / hadoop
実行ln -s / opt / apache / hadoop - 3.3 .2 $HADOOP_HOME
ENV HADOOP_CONFIG_DIR = $ { HADOOP_HOME } / etc / hadoop

ADD spark - 3.3.0 - bin - hadoop3.tar.gz / opt / apache /
ENV SPARK_HOME =/ opt / apache / spark
実行 ln -s / opt / apache / spark - 3.3.0 - bin - hadoop3 $SPARK_HOME

環境変数PATH = $ { LIVY_HOME } / bin : $ { HADOOP_HOME } / bin : $ { SPARK_HOME } / bin : $PATH

chown - R admin を実行します: admin / opt / apache

ワークディレクトリ $LIVY_HOME

ENTRYPOINT $ { LIVY_HOME } / bin / livy - server start ; tail -f $ { LIVY_HOME } /ログ/ livy -ルート-サーバー.out

[注記] hadoop パッケージ内の core-site.xml、hdfs-site.xml、yarn-site.xml

イメージの構築を開始する

 docker build -t myharbor .com / bigdata / livy : 0.8.0  --キャッシュなし

### パラメータの説明
# - t: 画像名を指定する
# . : 現在のディレクトリ Dockerfile
# - f: Dockerfileのパスを指定する
# --no-cache: キャッシュなし

# 港へ向かう
docker push myharbor .com / bigdata / livy : 0.8 .0

2) リヴィチャートテンプレートを作成する

ヘルムクリエイトリヴィ

3) YAMLレイアウトを変更する

livy/values.yaml

レプリカ数: 1

画像
リポジトリ: myharbor.com/bigdata/livy
プルポリシー: IfNotPresent
# デフォルトがチャートの appVersionあるイメージ タグをオーバーライドします。
タグ: "0.8.0"

セキュリティコンテキスト:
実行ユーザー: 9999
実行グループ: 9999
特権 true

サービス
タイプ: NodePort
ポート: 8998
ノードポート: 31998

livy/テンプレート/configmap.yaml

 APIバージョン: v1
種類: ConfigMap
メタデータ:
名前: { { "livy.fullname"を含めます。 } }
ラベル:
{ { - "livy.labels"を含めます。 |ニンデント4 } }
データ
livy.conf : |-
livy .spark .master =
livy .spark .deploy -モード=クライアント
livy .environment =生産
リヴィ.impersonation .enabled = true
livy .server .csrf_protection .enabled = false
livy .server .port = { { .Values ​​.service .port } }
livy .server .session .timeout = 3600000
livy .server .recovery .mode =リカバリ
livy .server .recovery .state -ストア=ファイルシステム
livy .server .recovery .state - store .url = / tmp / livy
livy .repl .enable - hive - context = true
livy-env.sh : | -
JAVA_HOME =/ opt / apache / jdk1.8.0_212をエクスポートします。
HADOOP_HOME をエクスポートします=/ opt / apache / hadoop
HADOOP_CONF_DIR をエクスポートします=/ opt / apache / hadoop / etc / hadoop
SPARK_HOME をエクスポートします=/ opt / apache / spark
SPARK_CONF_DIR =/ opt / apache / spark / conf をエクスポートします。
LIVY_LOG_DIR =/ opt / apache / livy / logs をエクスポートします
エクスポート LIVY_PID_DIR =/ opt / apache / livy / pid - dir
エクスポート LIVY_SERVER_JAVA_OPTS = "-Xmx512m"
spark -ブラックリスト.conf : |-
スパーク.マスター
spark.submit.deployMode

# Spark のキャッシュされた jar の場所の上書きを禁止します。
スパーク.ヤーン.jar
スパーク.yarn .jar
スパーク.ヤーン.アーカイブ

#ユーザーが RSC タイムアウトを上書きすることを許可しません。
livy.rsc.server.アイドルタイムアウト

livy/テンプレート/デプロイメント.yaml

 apiバージョン:アプリ/ v1
種類:デプロイメント
メタデータ:
名前: { { "livy.fullname"を含めます。 } }
ラベル:
{ { - "livy.labels"を含めます。 |ニンデント4 } }
仕様:
{ { - .Values ​​.autoscaling .enabledでない場合} }
レプリカ: { { .Values ​​.replicaCount } }
{ { -終わり} }
セレクター:
マッチラベル:
{ { - "livy.selectorLabels"を含めます。 |ニンデント6 } }
テンプレート
メタデータ:
{ { - .Values ​​.podAnnotationsを使用} }
注釈:
{ { - toYaml 。 |ニンデント8 } }
{ { -終わり} }
ラベル:
{ { - "livy.selectorLabels"を含めます。 |ニンデント8 } }
仕様:
{ { - .Values ​​.imagePullSecretsを使用} }
イメージプルシークレット:
{ { - toYaml 。 |ニンデント8 } }
{ { -終わり} }
serviceAccountName : { { "livy.serviceAccountName"を含めます。 } }
セキュリティコンテキスト:
{ { - toYaml .Values ​​.podSecurityContext |ニンデント8 } }
コンテナ:
-名前: { { .Chart .Name } }
セキュリティコンテキスト:
{ { - toYaml .Values ​​.securityContext |ニンデント12 } }
画像: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
イメージプルポリシー: { { .Values ​​.image .pullPolicy } }
ポート:
-名前: http
コンテナポート: 8998
プロトコル: TCP
ライブネスプローブ:
httpGet :取得:
パス /
ポート: http
準備状況プローブ:
httpGet :取得:
パス /
ポート: http
リソース
{ { - toYaml .Values ​​.resources |ニンデント12 } }
{ { - .Values ​​.securityContextを使用} }
セキュリティコンテキスト:
実行ユーザー: { { .runAsUser } }
実行グループ: { { .runAsGroup } }
特権: { { .privileged } }
{ { -終わり} }
ボリュームマウント:
-名前: { { .Release .Name } } - livy - conf
マウントパス: /opt/apache/livy/conf/livy.conf
サブパス: livy.conf
-名前: { { .Release .Name } } - livy - env
マウントパス: /opt/apache/livy/conf/livy-env.sh
サブパス: livy-env.sh
-名前: { { .Release .Name } } - spark -ブラックリスト- conf
マウントパス: /opt/apache/livy/conf/spark-blacklist.conf
サブパス: spark - blacklist.conf
{ { - .Values ​​.nodeSelectorを使用} }
ノードセレクタ:
{ { - toYaml 。 |ニンデント8 } }
{ { -終わり} }
{ { - .Values ​​.affinityを使用} }
親和性:
{ { - toYaml 。 |ニンデント8 } }
{ { -終わり} }
{ { - .Values ​​.tolerationsを使用} }
許容範囲:
{ { - toYaml 。 |ニンデント8 } }
{ { -終わり} }
巻数:
-名前: { { .Release .Name } } - livy - conf
構成マップ:
名前: { { "livy.fullname"を含めます。 } }
-名前: { { .Release .Name } } - livy - env
構成マップ:
名前: { { "livy.fullname"を含めます。 } }
-名前: { { .Release .Name } } - spark -ブラックリスト- conf
構成マップ:
名前: { { "livy.fullname"を含めます。 } }

4) 展開を開始する

 helm で livy をインストールします。/livy -n livy --create-namespace

注記

注記:
1.次のコマンドを実行しアプリケーション URL を取得します
NODE_PORT をエクスポートします $ ( kubectl get --namespace livy -o jsonpath="{.spec.ports[0].nodePort}" services livy)
NODE_IP をエクスポートします $ ( kubectl get nodes --namespace livy -o jsonpath="{.items[0].status.addresses[0].address}")
httpをエコー: // $NODE_IP : $NODE_PORT

チェック

 kubectl get pods  svc - n livy - wide を実行します。

ウェブアドレス: http://192.168.182.110:31998/ui

5) テスト検証

 curl -s - ​​​​​​​​​​110 : 31998 /バッチ| python - mjson.tool 

6) アンインストール

 helm アンインストール livy -n livy

Git アドレス: https://gitee.com/hadoop-bigdata/livy-on-k8s​

<<:  図 |監視システムPrometheusの原理

>>:  現代の製造業におけるクラウドコンピューティングベースのテクノロジーの重要性

推薦する

デジタルマーケティングは死んだのか?ブランドマーケティングにおける「形式」の重要性

「デジタルマーケティングの時代は終わった」とプロクター・アンド・ギャンブルのグローバルマーケティング...

ソウルもビリビリから「悪循環を断ち切る」方法を学びたい?

ソウルのソーシャルネットワーキングの本来の目的は、商業化の道に逆らう運命にある。ユーザー数の伸び悩み...

dedipath - メモリアルデー、Windows を含む VPS が 50% オフ

アメリカ版「墓参りの日」(戦没者追悼記念日)が近づいており、dedipath はすべての VPS 製...

ブランドワールドカップマーケティングの進化

4年に一度のワールドカップが近づいています。ワールドカップのたびに、多くのブランドが実際の資金でワー...

#おすすめ# sharktech: 10Gbps 帯域幅無制限専用サーバー、月額 588 ドル、ロサンゼルス/シカゴ/デンバー

ダウンロード サーバー、スライシング サーバー、CDN サーバー、ストリーミング メディア サーバー...

注文は理由もなく何度もキャンセルされ、Zouxiu.comは「違法な資金調達」の疑いをかけられた。

関連ニュース:高級B2Cファッションウェブサイト北京ステーションは、新年後に従業員を解雇し、深センに...

根本原因の追跡: 外部リンクの不安定性の根本原因について話す

外部リンクを作成する際、外部リンクの品質と範囲だけでなく、外部リンクの安定性も追求します。もちろん、...

モバイル インターネットの導入を早めてはいかがでしょうか。ウェブマスターが販売を開始しなければ、彼らは古くなります。

先日開催された中国インターネットウェブマスター年次会議で、DCCI の創設者である胡延平氏は、聴衆の...

ウェブサイト分析: 主要なデジタル E コマース コンテンツのオンライン最適化 (パート 2)

【1号につき1文】イノベーションを効果的に保護しなければ、イノベーションは生まれません。私たちにはス...

おすすめ:backupsy-1周年記念/生涯50%割引コード/超大容量ハードドライブ

1 周年を記念して、backupsy は永久半額割引を開始しました。担当者はメールで説明しましたが、...

滴滴出行と快滴行は過去2ヶ月で15億ドルを燃やした。彼らのゴッドファーザーであるテンセントとアリババは補助金を完全に停止しようと共謀した

滴滴出行と快滴行は過去2ヶ月で15億ドルを燃やした。彼らのゴッドファーザーであるテンセントとアリババ...

dataplugs - イースター、香港専用サーバー、最大 1000 香港ドルの割引

Duoxiantong のイースター イベントが始まりました: 2020 年 3 月 22 日から ...

HuyaとDouyuは収益化に困難に直面

ゲームライセンスの発行は再開されたが、ゲームライブストリーミングの春はまだ到来していない。 Douy...

企業Weiboマーケティング戦略の共有

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスインターネットは急速に発...

医療ステーションのGoogleトラフィックがBaiduを上回る理由の詳細分析

少し前に、私のサイトに毎日バイドゥを超えているのは、彼のコードをチェックした後、私は彼のコードが1日...