I. 概要Hadoopの中核は、基盤となるシステムの詳細を透過的に把握できる分散インフラストラクチャをユーザーに提供します。HDFSの高いフォールトトレランス、スケーラビリティ、そして効率性により、ユーザーはHadoopを安価なハードウェアに導入し、分散システムを構築できます。現在の最新バージョンは3.xです。公式ドキュメント:https://hadoop.apache.org/docs/current/index.html HDFS 糸 II. 展開開始1) ソースを追加するアドレス: https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop helm リポジトリに apache-hadoop-helm を追加します https://pfisterer.github.io/apache-hadoop-helm/ helm pull apache-hadoop-helm/hadoop --version 1.2.0 tar -xf hadoop-1.2.0.tgz 2) Dockerfileを使用してDockerイメージをビルドする myharbor.com/bigdata/centos:2009年7月9日より RUN rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone 実行エクスポートLANG = zh_CN.UTF-8 実行 groupadd --system --gid = 9999 admin && useradd --system --home -dir /home/admin --uid = 9999 --gid = admin admin 実行 yum -y install sudo ; chmod 640 /etc/sudoers 実行echo "admin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 実行 yum -y install install net-tools telnet wget mkdir /opt/apache/ を実行します。 jdk-8u212-linux-x64.tar.gz /opt/apache/ を追加します。 環境変数JAVA_HOME = /opt/apache/jdk1.8.0_212 環境変数PATH = $JAVA_HOME /bin: $PATH 環境変数 HADOOP_VERSION 3.3.2 環境変数HADOOP_HOME = /opt/apache/hadoop 環境変数HADOOP_COMMON_HOME = ${HADOOP_HOME} \ HADOOP_HDFS_HOME = ${HADOOP_HOME} \ HADOOP_MAPRED_HOME = ${HADOOP_HOME} \ HADOOP_YARN_HOME = ${HADOOP_HOME} \ HADOOP_CONF_DIR = ${HADOOP_HOME} /etc/hadoop \ PATH = ${PATH} : ${HADOOP_HOME} /bin hadoop- ${HADOOP_VERSION} .tar.gz /opt/apache を追加します 実行ln -s /opt/apache/hadoop- ${HADOOP_VERSION} ${HADOOP_HOME} chown -R admin:admin /opt/apache を実行します。 ワークディレクトリ$HADOOP_HOME 露出50010 50020 50070 50075 50090 8020 9000 エクスポーズ19888 露出8030 8031 8032 8033 8040 8042 8088 エクスポーズ49707 2122 イメージの構築を開始する docker build -t myharbor.com/bigdata/hadoop:3.3.2 . --no -cache
ミラーリポジトリにプッシュ docker push myharbor.com/bigdata/hadoop:3.3.2 ディレクトリ構造を調整する hadoop/templates/hdfs を hadoop/templates/yarn にコピーします。 mv hadoop/templates/hdfs-* hadoop/templates/hdfs/ mv hadoop/templates/yarn-* hadoop/templates/yarn/ 3) 構成を変更する画像: リポジトリ: myharbor.com/bigdata/hadoop タグ: 3.3.2 プルポリシー: IfNotPresent ... 持続性: 名前ノード: 有効: true ストレージクラス: "hadoop-nn-local-storage" アクセスモード: ReadWriteOnce サイズ: 10Gi 地元: -名前: hadoop-nn-0 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/hadoop/nn/data/data1" データノード: 有効: true ストレージクラス: "hadoop-dn-local-storage" アクセスモード: ReadWriteOnce サイズ: 20Gi 地元: -名前: hadoop-dn-0 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/hadoop/dn/data/data1" -名前: hadoop-dn-1 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/hadoop/dn/data/data2" -名前: hadoop-dn-2 ホスト: "local-168-182-110" パス: "/opt/bigdata/servers/hadoop/dn/data/data3" -名前: hadoop-dn-3 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/hadoop/dn/data/data1" -名前: hadoop-dn-4 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/hadoop/dn/data/data2" -名前: hadoop-dn-5 ホスト: "local-168-182-111" パス: "/opt/bigdata/servers/hadoop/dn/data/data3" -名前: hadoop-dn-6 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/hadoop/dn/data/data1" -名前: hadoop-dn-7 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/hadoop/dn/data/data2" -名前: hadoop-dn-8 ホスト: "local-168-182-112" パス: "/opt/bigdata/servers/hadoop/dn/data/data3" ... サービス: 名前ノード: タイプ: NodePort ポート: dfs: 9000 ウェブHDFS: 9870 ノードポート: dfs: 30900 ウェブHDFS: 30870 データノード: タイプ: NodePort ポート: dfs: 9000 ウェブHDFS: 9864 ノードポート: dfs: 30901 ウェブHDFS: 30864 リソースマネージャー: タイプ: NodePort ポート: ウェブ: 8088 ノードポート: ウェブ: 30088 ... セキュリティコンテキスト: 実行ユーザー: 9999 特権: true - hadoop/テンプレート/hdfs/hdfs-nn-pv.yaml
{{- 範囲 .Values.persistence.nameNode.local }} ---- apiバージョン: v1 種類: 永続ボリューム メタデータ: 名前: {{.name}} ラベル: 名前: {{.name}} 仕様: ストレージクラス名: {{ $.Values .persistence.nameNode.storageClass }} 容量: ストレージ: {{ $.Values .persistence.nameNode.size }} アクセスモード: -一度だけ読み書き可能 地元: パス: {{.path}} ノードアフィニティ: 必須: ノードセレクタ用語: -一致表現: -キー: kubernetes.io/hostname 演算子: In 値: - {{ 。ホスト }} ---- {{- 終わり }}- hadoop/テンプレート/hdfs/hdfs-dn-pv.yaml
{{- 範囲 .Values.persistence.dataNode.local }} ---- apiバージョン: v1 種類: 永続ボリューム メタデータ: 名前: {{.name}} ラベル: 名前: {{.name}} 仕様: ストレージクラス名: {{ $.Values .persistence.dataNode.storageClass }} 容量: ストレージ: {{ $.Values .persistence.dataNode.size }} アクセスモード: -一度だけ読み書き可能 地元: パス: {{.path}} ノードアフィニティ: 必須: ノードセレクタ用語: -一致表現: -キー: kubernetes.io/hostname 演算子: In 値: - {{ 。ホスト }} ---- {{- 終わり }} mv hadoop/templates/hdfs/hdfs-nn-svc.yaml hadoop/templates/hdfs/hdfs-nn-svc-headless.yaml mv hadoop/templates/hdfs/hdfs-dn-svc.yaml hadoop/templates/hdfs/hdfs-dn-svc-headless.yaml hadoop/テンプレート/hdfs/hdfs-nn-svc.yaml apiバージョン: v1 種類: サービス メタデータ: 名前: {{ include "hadoop.fullname" . }}-hdfs-nn ラベル: app.kubernetes.io/name: {{ "hadoop.name"を含めます。}} helm.sh/chart: {{ "hadoop.chart"を含めます。}} app.kubernetes.io/インスタンス: {{ .Release.Name }} app.kubernetes.io/コンポーネント: hdfs-nn 仕様: ポート: -名前: dfs ポート: {{ .Values.service.nameNode.ports.dfs }} プロトコル: TCP ノードポート: {{ .Values.service.nameNode.nodePorts.dfs }} -名前: webhdfs ポート: {{ .Values.service.nameNode.ports.webhdfs }} ノードポート: {{ .Values.service.nameNode.nodePorts.webhdfs }} タイプ: {{ .Values.service.nameNode.type }} セレクタ: app.kubernetes.io/name: {{ "hadoop.name"を含めます。}} app.kubernetes.io/インスタンス: {{ .Release.Name }} app.kubernetes.io/コンポーネント: hdfs-nn hadoop/テンプレート/hdfs/hdfs-dn-svc.yaml apiバージョン: v1 種類: サービス メタデータ: 名前: {{ include "hadoop.fullname" . }}-hdfs-dn ラベル: app.kubernetes.io/name: {{ "hadoop.name"を含めます。}} helm.sh/chart: {{ "hadoop.chart"を含めます。}} app.kubernetes.io/インスタンス: {{ .Release.Name }} app.kubernetes.io/コンポーネント: hdfs-nn 仕様: ポート: -名前: dfs ポート: {{ .Values.service.dataNode.ports.dfs }} プロトコル: TCP ノードポート: {{ .Values.service.dataNode.nodePorts.dfs }} -名前: webhdfs ポート: {{ .Values.service.dataNode.ports.webhdfs }} ノードポート: {{ .Values.service.dataNode.nodePorts.webhdfs }} タイプ: {{ .Values.service.dataNode.type }} セレクタ: app.kubernetes.io/name: {{ "hadoop.name"を含めます。}} app.kubernetes.io/インスタンス: {{ .Release.Name }} app.kubernetes.io/コンポーネント: hdfs-dn mv hadoop/templates/yarn/yarn-nm-svc.yaml hadoop/templates/yarn/yarn-nm-svc-headless.yaml mv hadoop/templates/yarn/yarn-rm-svc.yaml hadoop/templates/yarn/yarn-rm-svc-headless.yaml mv hadoop/templates/yarn/yarn-ui-svc.yaml hadoop/templates/yarn/yarn-rm-svc.yaml hadoop/テンプレート/yarn/yarn-rm-svc.yaml apiバージョン: v1 種類: サービス メタデータ: 名前: {{ include "hadoop.fullname" . }}-yarn-rm ラベル: app.kubernetes.io/name: {{ "hadoop.name"を含めます。}} helm.sh/chart: {{ "hadoop.chart"を含めます。}} app.kubernetes.io/インスタンス: {{ .Release.Name }} app.kubernetes.io/コンポーネント: yarn-rm 仕様: ポート: -ポート: {{ .Values.service.resourceManager.ports.web }} 名前: ウェブ ノードポート: {{ .Values.service.resourceManager.nodePorts.web }} タイプ: {{ .Values.service.resourceManager.type }} セレクタ: app.kubernetes.io/name: {{ "hadoop.name"を含めます。}} app.kubernetes.io/インスタンス: {{ .Release.Name }} app.kubernetes.io/コンポーネント: yarn-rm すべてのコントロールに以下を追加します。 コンテナ: ... セキュリティコンテキスト: 実行ユーザー: {{ .Values.securityContext.runAsUser }} 特権: {{ .Values.securityContext.privileged }} - hadoop/テンプレート/hadoop-configmap.yaml
4) インストールを開始する mkdir -p /opt/bigdata/servers/hadoop/{nn,dn}/data/data{1..3} helm で hadoop をインストールします。/hadoop -n hadoop --create -namespace 注記 名前: Hadoop 最終デプロイ日: 2022年9月24日(土) 17:00:55 名前空間: hadoop ステータス: 展開済み 改訂: 1 テストスイート: なし 注記: 1.次のコマンドを実行して、HDFS のステータスを確認できます。 kubectl exec -n hadoop -it hadoop-hadoop-hdfs-nn-0 -- /opt/hadoop/bin/hdfs dfsadmin -report 2.次のコマンドを実行すると、yarn ノードを一覧表示できます。 kubectl exec -n hadoop -it hadoop-hadoop-yarn-rm-0 -- /opt/hadoop/bin/yarn ノード-list 3. Yarn リソース マネージャー UI へのポート転送を作成します。 kubectl ポート転送-n hadoop hadoop-hadoop-yarn-rm-0 8088 :8088 次にブラウザでUI を開きます。 http://localhost:8088 を開く 4.含まれている Hadoop テストは次のように実行できます。 kubectl exec -n hadoop -it hadoop-hadoop-yarn-nm-0 -- /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.2-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB -resFile /tmp/TestDFSIOwrite.txt 5.次のようにして mapreduce ジョブを一覧表示できます。 kubectl exec -n hadoop -it hadoop-hadoop-yarn-rm-0 -- /opt/hadoop/bin/mapred ジョブ -list 6.このチャートはツェッペリンチャートでも使用できます helm インストール--namespace hadoop --set hadoop .useConfigMap = true 、hadoop .configMapName = hadoop-hadoop stable/zeppelin 7.次のようにして、yarn ノードの数を調整できます。 helm アップグレード hadoop --set yarn.nodeManager .replicas = 4 stable/hadoop これを永続的にしたい場合は、必ず values.yaml を更新してください。 チェック kubectl get pods,svc -n hadoop -wide hdfs ウェブ:http://192.168.182.110:30870/ 糸のウェブ:http://192.168.182.110:30088/ 5) テストと検証HDFSのテストと検証 kubectl exec -it hadoop-hadoop-hdfs-nn-0 -n hadoop --bash [root@local-168-182-110 hadoop] bash-4.2 $ bash-4.2 $ bash-4.2 $ hdfs dfs -mkdir /tmp bash-4.2 $ hdfs dfs -ls / 1 件のアイテムが見つかりました drwxr-xr-x - 管理者スーパーグループ0 2022-09-24 17:56 / tmp bash-4.2 $ echo "テストhadoop" >test.txt bash-4.2 $ hdfs dfs -put test.txt /tmp/ bash-4.2 $ hdfs dfs -ls /tmp/ 1 件のアイテムが見つかりました -rw -r --r -- 3管理者スーパーグループ12 2022 -09 -24 17 :57 /tmp/test.txt bash-4.2 $ hdfs dfs -cat /tmp/ cat : `/tmp ': ディレクトリです bash-4.2$ hdfs dfs -cat /tmp/test.txt Hadoopをテストする bash-4.2$ 後ほど Kubernetes 上の Hive について説明するときに、Yarn をテストして検証します。 6) アンインストール helm アンインストール hadoop -n hadoop kubectl ポッドを削除-n hadoop `kubectl ポッドを取得 -n hadoop|awk 'NR>1{print $1}' ` --force kubectl patch ns hadoop -p '{"metadata":{"finalizers":null}}' kubectl ns hadoop を削除--force Git をダウンロードするためのリンクはこちらです。ご興味があれば、ぜひダウンロードしてデプロイしてください: https://gitee.com/hadoop-bigdata/hadoop-on-k8s Kubernetes クラスターでは、YARN の重要性は徐々に低下し、YARN の代わりに Kubernetes リソース スケジューリングが直接使用されるようになります。このデプロイメントは単一障害点であり、テスト環境に限定されています。次の記事では、Kubernetes 上での Hadoop の高可用性の実装について説明しますので、しばらくお待ちください。 |