「クラウドネイティブ」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の原理

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

推薦する

将来の検索エンジンの唯一の道

今後の検索エンジンの避けられない道。インターネットを見ると、日々新たな変化が起きていますが、検索エン...

Alpharacks-Simple レビュー: 1g メモリ KVM/年間 28 ドル/ロサンゼルス

退屈だったので、Alpharacks にアフィリエイト報酬 36 ドルを請求したところ、お金を引き出...

bilibili: ブランドマーケティングマニュアル

ビリビリは2018年7月、最新の「2018年ブランドマーケティングマニュアル」を発表し、Z世代はイン...

ラリー・エリソンがクラウド開発の未来を語る

Oracle OpenWorld のオープニング基調講演で、Oracle 会長兼 CTO の Lar...

スナップショットがキーワードクリックランキングを終わらせる日はそう遠くない

6月末以降、Baiduの数回の大型アップデートは、言うまでもなく、多くのウェブサイトに大きな痛みをも...

検索エンジンがスパムコメントを識別する方法

昨日はブロガーがスパムコメントを嫌う理由について話しました。今日は、検索エンジンがスパムコメントを識...

Baidu Webmaster Platform: プレッシャーフィードバックツールの名前が変更され、一時的なサイト閉鎖機能が追加されました

多くのウェブマスターは、「プレッシャーフィードバック」の意味を理解していないと述べました。現在は「ク...

ブランドプロモーション+ユーザー集客+企画スタッフの旅行サイト開発「鉄のトライアングル」

ルールがなければ秩序は生まれません。この発言はまさに正しいです。私たちは何をするにも根拠を持たなけれ...

ソフト記事プロモーション:「ジェット・リー」と「スティーブン・チョウ」から、IPマーケティングの正しい遊び方を解説!

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています認めるかど...

宝峰ビデオの3つの大きな恥辱:ポジショニング、業界の変化、モバイルインターネット

【Kanchai.com 推薦】Baofeng Video は投資家の注目に値するか?注目すべき点は...

プロモーションのヒント: 新規ユーザーをどのように定義しますか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来です諸葛軍は次のように語りました。「...

httpzoom-3.48 ポンド/4g メモリ/4g スワップ/50g ハードディスク/2T トラフィック/英国

httpzoom は 2009 年に VPS の運営を開始しました。割引や宣伝も比較的少なかったので...

インターネット戦争の前半はまだ終わっていない、さらに残酷になるだろう

[[252192]]私たちが暮らす環境が根本的に変化したことは間違いありません。記事「なぜ 2018...

モバイル検索大手のレイアウト:商業化は有料ランキングに限定されており、複数の方法で前進する必要がある

モバイル検索大手のレイアウト: 商業化は有料ランキングに限定されており、複数の足でより速く動く必要が...