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

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

推薦する

ハイブリッド クラウドが普及する: 2013 年のクラウドに関する 10 の予測

クラウド コンピューティングは、2012 年に最も話題になったテクノロジー用語です。クラウド コンピ...

「一人一ホームページ」の秘密 百度の新ホームページの便利さを体験

「一人一ホームページ」は百度の新しいホームページを作る秘訣と方法です。ここ数日、私たちは百度の新しい...

Huayun Data が VMware と提携して VCPP を推進し、新しいハイブリッド クラウド モデルを構築

テクノロジーが成熟し、その用途がますます多様化するにつれて、今日のクラウドコンピューティングは実体経...

必須のクラウド インフラストラクチャ自動化ツール 7 つ

現代のワークロードと厳しい配信スケジュールにより、組織は IT 運用とアプリケーション配信の効率化に...

ウェブマスターによるブログに関する考えや議論 ブログは孤立した島になるのでしょうか?

この記事は私のブログのSEO日記第23弾です。最近はお店の経営が忙しくて本当に疲れていますが、面白い...

ローカルウェブサイトの不正確な詳細を避け、ローカルウェブサイトの重量の損失を防ぐ

ローカルウェブサイト間の競争は非常に激しく、一部の県では数十のローカルウェブサイトがあります。そのた...

アルゴリズムは電子商取引をサポートできない

興味関心に基づく電子商取引の概念が提案されてからしばらく経ちますが、Douyin は単純な短編ビデオ...

香港の格安VPSをいくつか集めて推奨します。信頼できる格安香港VPSを多数紹介します。

VPS の使用経験が 10 年以上あるので、香港の安価な VPS をまとめて皆さんにご紹介したいと思...

WeChat Momentsに広告を掲載している携帯電話ブランド、ゲーム、観光産業の例!

1. 携帯電話ブランドケーススタディ: WeChat モーメント広告は、WeChat パブリックアカ...

テクノロジー企業が半導体のデジタル変革に向けた新たな力の構築に貢献

近年、半導体業界は急成長を遂げていますが、開発プロセスは順調ではありません。世界経済の成長鈍化、技術...

中国におけるSEOの持続的発展について

中国の SEO が直面している問題:プロのSEO専門家の不足SEOチームの不足SEOガイダンスの概念...

SEOの観点から見た360度旅行

今日、偶然、360 Travelのウェブサイトが注目を集める形で立ち上げられたことを発見しました。一...

ウェブサイトによって検索エンジンマーケティングのニーズは異なります

SEM(検索エンジンマーケティング)とは、ユーザーが情報を検索する機会を活用し、ユーザーの検索エンジ...

ケース分析: Baidu スナップショットが空白の場合の対処方法

今年の冬は特に寒く、Baidu のランキングの浮き沈みは、あらゆる規模のウェブマスターの心を常に揺さ...

Kubernetes VPA (Pod Vertical Autoscaling) を 1 つの記事でマスターする

導入前回の記事では、HPA(Horizo​​ntal Pod Autoscaler)の実装について紹...