【クラウドネイティブ】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 jsnotallow="{.spec.ports[0].nodePort}" services livy)
NODE_IP をエクスポートします $ ( kubectl get nodes --namespace livy -o jsnotallow="{.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

<<:  エッジツークラウドがデジタル変革の次の段階をどのように推進するか

>>:  Terraform を使用して Azure 仮想マシンを作成する

推薦する

ウェブサイトのランキングを上げたいなら、外部リンクをしっかり張ってください。

私の友人の多くは、「ランキングは外部リンクを作ることだ」という一文を聞いたことがあるか、見たことがあ...

sharktech-24g メモリ/4t ハードディスク/32ip/無制限ギガビット ポート/無料 cpanel または directadmin/無料 windows/月額 199 ドル

Sharktech は、ホスト キャットが評判を上げるたびに「米国で最も耐性のあるサーバー サプライ...

シェア:5つの主要な運用戦略を通じて、インターネット上で携帯電話修理の好印象を築く

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

Kubernetes を成功させるための 5 つのヒント

Kubernetes を使い始めて、これらの専門家のヒントを活用してコンテナ オーケストレーションを...

Adobe はついにクラウド テクノロジーをオンラインで利用するための大きな動きを起こすのでしょうか?

Adobe MAXカンファレンスが水曜日にラスベガスで開催されました。 Adobe はソフトウェアア...

分散データベースとキャッシュの二重書き込み一貫性ソリューションの分析

なぜこの記事を書くのですか?まず、キャッシュは、その高い同時実行性と高いパフォーマンスにより、プロジ...

徹底分析: AWS やその他のクラウド コンピューティング大手は 2018 年にどのような計画を立てるのでしょうか?

最近では、企業規模は企業がクラウド サービス プロバイダーを選択する上で重要な要素ではなくなり、市場...

エッジコンピューティングと量子コンピューティングの違い

テクノロジーの世界が進化し続ける中、エッジ コンピューティングと量子コンピューティングという 2 つ...

クラウドと DevOps は、企業のデジタル変革の加速にどのように役立ちますか?

クラウド + DevOps = より迅速なデジタル変革。クラウドはスケーラビリティと柔軟性を提供し、...

キーワードランキングの停滞に影響を与える理由

あなたのウェブサイトのキーワードランキングは停滞していますか?しかし、その理由がわかりません。今日は...

新しい B2B ウェブサイトの成長ストーリーの簡単な分析: 鶏が先か、卵が先か?

今では誰もが B2C や O2Q について語っていますが、B2B については誰もが忘れ始めているよう...

SAP SuccessFactorsとCapgemini Chinaの人材開発ソリューション合同カンファレンスが11月15日に開催されます

[[208274]]魔法の箱が開かれ、人材管理はかつてないほどシンプルになりましたSAP Succe...

ブランドウェブサイトのフレンドリーなリンク方法からどのような反映が得られるでしょうか?

フレンドリーリンクについての記事はたくさんあるので、今日はその詳細についてお話します。これが、大規模...

Xiaoshuo5200.comの責任者はShanda Literatureの著作権を侵害したとして有罪判決を受けた

本紙記者の呂立紅は、昨日、山大文学が「小説5200」ウェブサイトの著作権侵害事件が鎮江中級人民法院で...

internetbrothers: 韓国最古のホスティング会社、韓国VPS\韓国専用サーバー

InternetBrothers (別名「Jafarnet」) は、韓国の非常に古いブランドです。2...