Docker はビッグデータ プラットフォームを構築します: Hadoop、Spark、Hive

Docker はビッグデータ プラットフォームを構築します: Hadoop、Spark、Hive

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​

1. はじめに

1. 序文

  • インターネットの発展により、ネットワークが存在する世界中のあらゆる場所でデータが常に生成されるようになりました。蓄積されたデータは、人々が探索するのを待っている、目に見えない巨大な資源のようなものです。その結果、ビッグデータ処理の理論とその結果生じる技術はますます成熟しつつあります。開発者として、これを学習し、理解し、使用することで、身の回りの問題を解決できる可能性があります。
  • この記事では、クラウドネイティブ Docker をベースにしたスタンドアロンのビッグデータ プラットフォームを構築し、ビッグデータ関連テクノロジの構築と使用について説明します。

2. 関連技術

  • 動物園の飼育員
    分散クラスタ管理、マスター選出、メッセージの公開とサブスクリプション、データ ストレージ、分散ロックなど。クラスタ構成の一貫性、タスク送信のトランザクション性、クラスタ内のサービスのアドレス管理、クラスタ管理などを維持するために使用される分散調整サービス。
  • ハードウェア
    一度書き込み、複数回読み取るシナリオに適した分散ファイル システム。ファイルが作成され、書き込まれ、閉じられた後は、変更する必要はありません。

  • 同じクラスタ内のリソース(メモリなど)を管理するために使用される分散リソース管理システム
  • マップリデュース
    Hadoop のプログラミング フレームワークは、Spring と同様に、map メソッドと Reduce メソッドを使用して分散プログラミングを実装します。
  • ハイブ
    データ ウェアハウス ツール Hive がデータのオフライン バッチ処理を実行する場合、まずクエリ言語を MR タスクに変換し、MR バッチ処理で結果を返す必要があるため、Hive はリアルタイムのデータ クエリと分析のニーズを満たすことができません。
  • Hベース
    NoSQL に似た、Hadoop 上の分散データベース。
  • スクープ
    Hadoop (Hive) と従来のデータベース (mysql、postgresql など) 間でデータを転送するために使用されます。
  • ハドゥープ
    Hadoop は、ビッグデータを分析および処理するためのソフトウェア プラットフォームです。これは、Java で実装された Apache オープンソース ソフトウェア フレームワークです。多数のコンピュータで構成されたクラスター内で、膨大なデータの分散コンピューティングを実現します。
    Hadoop=HDFS+Yarn+MapReduce+Hbase+Hive+Zookeeper+Hbase+Hive+Sqoop (エコシステム)

3. ユーザーポートレート

  • ユーザープロフィール:
    ユーザー情報のラベル付け。
  • データは、ユーザーの社会的属性、消費習慣、嗜好特性などを収集することによって生成されます。
  • データを分析することで、ユーザーまたは製品の特性が特徴付けられ、カウントされ、潜在的に価値のある情報が探索されます。
  • タグ分類
  • 過去 30 日間のアクティブ日数やアクティブ期間などの統計タグ。
  • ルールベースのタグ。たとえば、ユーザーが 30 日以内に 15 日以上アクティブになると、アクティブ ユーザーとしてラベル付けされます。
  • ユーザーの購入嗜好、ユーザーの解約意図などの機械学習マイニング クラス ラベル。

2. Dockerはビッグデータプラットフォームを構築する

1. ハードウェア

  • ホストマシン: WIN10 ラップトップ 16G、VMWare 仮想マシン。
  • 仮想マシン: CentOS8、64 ビット、ブリッジ モード、割り当てメモリ 8G メモリ、ストレージ 80G。
  • この記事をビルドした後、free -h を使用して 4.6G のメモリが使用されていることを確認します。

2. 技術フレームワークのバージョンとダウンロードリンク

フレームワークパッケージ

説明する

ダウンロードパス

ハドゥープ 2.7.7

http://archive.apache.org/dist/hadoop/core/hadoop-2.7.7/

hbase-2.1.1

http://archive.apache.org/dist/hbase/1.2.1/

ハイブ2.3.4

http://archive.apache.org/dist/hive/hive-2.3.4/

1.8.0_144 より

スカラ2.11.12

https://www.scala-lang.org/download/2.11.12.html

spark-2.4.8-bin-hadoop2.7

http://archive.apache.org/dist/spark/spark-2.4.8/

動物園飼育係-3.4.8

http://archive.apache.org/dist/zookeeper/zookeeper-3.4.8/

3. 依存パッケージが天一クラウドディスク(速度無制限)にアップロードされました

https://cloud.189.cn/t/RF3YrmYb6RZv(アクセスコード:0iz2)。

4. Dockerをインストールする

Docker を使い始める - オンライン インストール、オフライン インストール、およびアンインストール。

5. Dockerは独立したネットワークセグメントを作成します

 docker ネットワーク作成--subnet = 172 .18.0.0/16 spark-net

6. コンテナ計画

ドメイン名

IP

クラウド1

172.18.0.2

クラウド2

172.18.0.3

クラウド3

172.18.0.4

7. 基本的なコンテナを作成し、SSHとパスワード不要の設定をインストールする

パラメータ

例示する

-名前

コンテナ名

-h

ドメイン名

--ホストの追加

/etc/hosts ファイル内のドメイン名と IP マッピング

-ネット

ネットワークセグメントを指定する

 # ベースイメージをプルする
docker プル Ubuntu
#基本的なコンテナを作成し、現在のコンテナのIPを設定する
docker run --name cloud1 \
--netスパークネット--ip 172 .18.0.2 \
-hクラウド1 \
--add -hostクラウド1:172.18.0.2 \
--add -hostクラウド2:172.18.0.3 \
--add -hostクラウド3:172.18.0.4 \
-それはUbuntu
 #/etc/apt/sources.list ファイルをクリアする
エコー> /etc/apt/sources.list
# Alibaba Cloudミラーアドレスを/etc/apt/sources.listファイルに書き込む
cat >> /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/ubuntu/ バイオニックメイン 制限付き宇宙 マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ バイオニックメイン 制限付き宇宙 マルチバース
deb http://mirrors.aliyun.com/ubuntu/ bionic-security メイン 制限された宇宙 マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security メイン 制限付き宇宙 マルチバース
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates メイン 制限付き宇宙 マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates メイン 制限付き宇宙 マルチバース
deb http://mirrors.aliyun.com/ubuntu/ バイオニック提案メイン制限宇宙マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main 制限付き宇宙 マルチバース
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports メイン 制限付き宇宙 マルチバース
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports メイン 制限付き宇宙 マルチバース
終了
#vimをインストールする
apt-getアップデート
apt-get install -y vim
apt-get でネットツールをインストール
#コンテナ cloud1 で apt ツールを使用して ssh をインストールします
apt-get install -y ssh
#~/.bashrc に ssh サービスの起動コマンドを追加します
vim ~/.bashrc
エクスポート LC_ALL="C.UTF-8"
/usr/sbin/sshd
#ディレクトリを作成する必要があります
mkdir -p /run/sshd
# 直接入力
ssh-keygen -t rsa -P ""
#秘密鍵 (~/.ssh/id_rsa) はクライアントが保持します
#サーバーへの公開鍵 (~/.ssh/id_rsa.pub)
#承認された公開鍵 (~/.ssh/authorized_keys) はサーバーによって保持されます。認証された公開鍵を持つクライアントのみがサーバーに接続できます。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#接続が成功したかどうかをテストする
ssh ルート@cloud1

8. ビッグデータ環境のインストール

  • ソフトウェアバージョン

ソフトウェア

バージョン

ジャワ

1.8.0_144

スカラ

2.11.12

動物園の飼育員

3.4.10

ハドゥープ

2.7.7

スパーク

2.4.8

ハイブ

2.3.4

  • インストールディレクトリ
 mkdir -p /usr/local/spark
  • 環境に必要な依存パッケージをコンテナにコピーする
 # コンテナ内にディレクトリを作成する
mkdir -p /opt/spark_tar
# 依存パッケージが/optに配置されている場合は、/optディレクトリに入り、次のコマンドを実行します。
docker cp apache-hive-2.3.4-bin.tar.gz cloud1:/opt/spark_tar
docker cp hadoop-2.7.7.ta​​r.gz cloud1:/opt/spark_tar
docker cp jdk-8u191-linux-x64.tar.gz cloud1:/opt/spark_tar
docker cp scala-2.11.12.tgz cloud1:/opt/spark_tar
Docker cp spark-2.4.8-bin-hadoop2.7.tgz cloud1:/opt/spark_tar
docker cp zookeeper-3.4.10.tar.gz cloud1:/opt/spark_tar
docker cp mysql-connector-java.jar cloud1:/opt/spark_tar
docker cp hive-site.xml cloud1:/opt/spark_tar
#または、クラウドディスクに置いたスクリプトsh cpAllToCloud1.shを実行します
#コンテナディレクトリ/opt/spark_tarに解凍します
tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /usr/local/spark/
tar -zxvf hadoop-2.7.7.ta​​r.gz -C /usr/local/spark/
tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/local/spark/
tar -zxvf scala-2.11.12.tgz -C /usr/local/spark/
tar -zxvf spark-2.4.8-bin-hadoop2.7.tgz -C /usr/local/spark/
tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/spark/
Apache Hive 2.3.4 をローカルにインストールします
#または、私のスクリプト sh tarAllToUsrLocal.sh を実行します (つまり、上記のコマンドをファイルに入れて 1 回実行します)
cd /usr/local/spark/
drwxr-xr-x 9 1000スタッフ149 2018年7月19日hadoop-2.7.7/
drwxr-xr-x 10ルート ルート184 7月14日17:55 hive-2.3.4/
drwxr-xr-x 7 uucp 143 245 2018 年10 月6 日jdk1.8.0_191/
drwxrwxr-x 6 1001 1001 50 2017年11月10日scala-2.11.12/
drwxr-xr-x 13 501 1000 211 2021年5月8日spark-2.4.8-bin-hadoop2.7/
drwxr-xr-x 10 1001 1001 4096 2017年3月23日zookeeper-3.4.10/
  • 環境変数の設定
 vim ~ / .bashrc
JAVA_HOME = /usr/local/spark/jdk1.8.0_191 ​​ をエクスポートます
エクスポートPATH = $ PATH : $ JAVA_HOME / bin
エクスポートSCALA_HOME = / usr / local / spark / scala - 2.11.12
PATH をエクスポートする= $ PATH : $ SCALA_HOME / bin
ZOOKEEPER_HOME をエクスポート= / usr / local / spark / zookeeper - 3.4.10
PATH = $ PATH : $ ZOOKEEPER_HOME / bin をエクスポートします
HADOOP_HOME をエクスポートします= / usr / local / spark / hadoop - 2.7.7
エクスポートPATH = $ PATH : $ HADOOP_HOME / bin : $ HADOOP_HOME / sbin
エクスポートJAVA_LIBRARY_PATH = $ HADOOP_HOME / lib / native
エクスポートSPARK_HOME = /usr/local/spark/spark-2.4.8-bin-hadoop2.7
エクスポートPATH = $ SPARK_HOME / bin : $ SPARK_HOME / sbin : $ PATH
エクスポートHIVE_HOME = / usr / local / spark / hive - 2.3.4
エクスポートPATH = $ HIVE_HOME / bin : $ PATH
ソース~ / .bashrc

9. Zookeeperのインストールと設定

 #設定ファイルの生成
cp /usr/local/spark/zookeeper-3.4.10/conf/zoo_sample.cfg /usr/local/spark/zookeeper-3.4.10/conf/zoo.cfg
#Zookeeperデータディレクトリを作成する
mkdir -p /root/zookeeper/tmp
#設定ファイルを変更する
vim /usr/local/spark/zookeeper-3.4.10/conf/zoo.cfg
#設定項目を変更する
データディレクトリ= /root/zookeeper/tmp
#ファイルの末尾に追加
server.1 =クラウド1:2888:3888
server.2 = cloud2:2888:3888
server.3 = cloud3:2888:3888
#保存して終了
#現在のZkserver情報を設定する
#~/zookeeper/tmp/myid ファイルに保存されている番号は、ローカルマシンのZkserver番号を表します。
#cloud1 を Zkserver 番号 1 として設定します。cloud2 と cloud3 を生成した後、このファイルを個別に変更する必要があります。
エコー1 > ~/zookeeper/tmp/myid

10. Hadoopのインストールと設定

  • Hadoopの起動構成ファイルを変更する
 #Hadoop 起動構成ファイルを変更する
vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
#ファイルの末尾に追加
JAVA_HOME = /usr/local/spark/jdk1.8.0_191 をエクスポートします。
HADOOP_COMMON_LIB_NATIVE_DIR をエクスポートします= ${HADOOP_HOME} /lib/native
エクスポートHADOOP_OPTS = " $HADOOP_OPTS -Djava.library.path= ${HADOOP_HOME} /lib/native"
LD_LIBRARY_PATH $JAVA_LIBRARY_PATHエクスポートします

#保存して終了
  • コア設定ファイルを変更する

パラメータ

例示する

fs.defaultFS

デフォルトのファイルシステム

hadoop.tmp.dir

一時ファイルディレクトリ

ha.zookeeper.クォーラム

Zkserver情報

 #コア設定ファイルを変更する
vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/core-site.xml
#<configuration>ノードに次の設定を追加します
<プロパティ>
<name>fs.defaultFS</name>
<値>hdfs://ns1</値>
</プロパティ>
<プロパティ>
<name>hadoop.tmp.dir</name>
<値>/root/hadoop/tmp</値>
</プロパティ>
<プロパティ>
<name>ha.zookeeper.quorum</name>
<値>クラウド1:2181、クラウド2:2181、クラウド3:2181</値>
</プロパティ>
  • HDFS構成ファイルを変更する

パラメータ

例示する

dfs.ネームサービス

ネームサービス、HAベースのHDFSでは、ネームサービスは現在アクティブなNameNodeを表すために使用されます。

dfs.ha.namenodes.<ネームサーバー>

ネーム サービス構成で使用できる NameNode はどれですか?

dfs.namenode.rpc-address.<ネームサービス>.<ネームノード>

NameNode リモート呼び出しアドレスを構成する

dfs.namenode.http-address.<ネームサービス>.<ネームノード>

NameNode ブラウザアクセスアドレスを構成する

dfs.namenode.shared.edits.dir

名前サービスに対応するJournalNodeを構成する

dfs.journalnode.edits.dirジャーナルノード

データを保存するパス<br />

 #設定ファイルを変更する
vim /usr/local/spark/hadoop-2.7.7 /etc/hadoop/hdfs-site.xml
#<configuration>ノードに次の設定を追加します
< プロパティ>
<名前> dfs.nameservices </名前>
< > ns1 < / >
< / プロパティ>
< プロパティ>
<名前> dfs.ha.namenodes.ns1 </名前>
< > nn1 , nn2 < / >
< / プロパティ>
< プロパティ>
< 名前> dfsネームノードrpc アドレス ns1nn1 < 名前>
< > cloud1 : 9000 < / >
< / プロパティ>
< プロパティ>
<名前> dfs.namenode.http - address.ns1.nn1 </名前>
< > cloud1 : 50070 < / >
< / プロパティ>
< プロパティ>
< 名前> dfsネームノードrpc アドレス ns1nn2 < 名前>
< > cloud2 : 9000 < / >
< / プロパティ>
< プロパティ>
<名前> dfs.namenode.http - address.ns1.nn2 </名前>
< > cloud2 : 50070 < / >
< / プロパティ>
< プロパティ>
< 名前> dfsネームノード共有しました編集しますディレクトリ< / 名前>
< > qjournal : // cloud1 : 8485 ; クラウド2 : 8485 ; cloud3 : 8485 / ns1 < / >
< / プロパティ>
< プロパティ>
<名前> dfs.journalnode.edits.dir </名前>
<値> / ルート/ hadoop / ジャーナル</値>
< / プロパティ>
< プロパティ>
< 名前> dfs自動フェイルオーバー有効< / 名前>
< > < / >
< / プロパティ>
< プロパティ>
< 名前> dfsクライアントフェイルオーバープロキシプロバイダーns1 < 名前>
< > orgアパッチハドゥープ サーバーネームノード設定されたフェールオーバープロキシプロバイダー< / >
< / プロパティ>
< プロパティ>
< 名前> dfsフェンシングメソッド< / 名前>
< >
sshフェンス
シェル( / bin / true )
</値>
< / プロパティ>
< プロパティ>
< 名前> dfsフェンシングssh秘密ファイル< / name >
< > /root/.ssh/id_rsa < / >
< / プロパティ>
< プロパティ>
<name> dfs.ha.fencing.ssh.connect - タイムアウト</name>
< > 30000 < / >
< / プロパティ>
  • Yarn設定ファイルを変更する

パラメータ

例示する

yarn.resourcemanager.ホスト名

RescourceManager と NodeManager のアドレスは、スレーブ ファイルで定義されます。

 #設定ファイルを変更する
vim /usr/local/spark/hadoop-2.7.7 /etc/hadoop/yarn-site.xml
#<configuration>ノードに次の設定を追加します
< プロパティ>
< 名前> リソースマネージャーホスト名< / 名前>
< > cloud1 < / >
< / プロパティ>
< プロパティ>
< 名前> ノードマネージャ補助サービス< / 名前>
< > mapreduce_shuffle < / >
< / プロパティ>
  • 指定されたDataNodeとNodeManagerの設定ファイルを変更する
 vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/slaves
#以下の内容に変更
クラウド1
クラウド2
クラウド3

11. Sparkのインストールと設定

  • Spark 起動構成ファイル
 #起動設定ファイルの生成
cp /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/spark-env.sh.template /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/spark-env.sh
#起動設定ファイルを編集する
vim /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/spark-env.sh
#記事の最後に次の設定を追加します
エクスポートSPARK_MASTER_IP = cloud1
エクスポートSPARK_WORKER_MEMORY = 1024m
JAVA_HOME = /usr/local/spark/jdk1.8.0_191 をエクスポートします。
SCALA_HOMEを /usr/local/spark/scala-2.11.12 エクスポートします
SPARK_HOME = /usr/local/spark/spark-2.4.8-bin-hadoop2.7 をエクスポートします。
HADOOP_CONF_DIR をエクスポートします= /usr/local/spark/hadoop-2.7.7/etc/hadoop
エクスポートSPARK_LIBRARY_PATH = $SPARK_HOME /lib
エクスポートSCALA_LIBRARY_PATH = $SPARK_LIBRARY_PATH
エクスポートSPARK_WORKER_CORES = 1
SPARK_WORKER_INSTANCES = 1 をエクスポートします
エクスポートSPARK_MASTER_PORT = 7077

LD_LIBRARY_PATH $JAVA_LIBRARY_PATHエクスポートします
  • 指定されたワーカーの設定ファイルを変更する
 vim /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/slaves
#以下の内容に変更
クラウド1
クラウド2
クラウド3
  • 変更されたファイルの概要
 root@cloud1:/ # vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
root@cloud1:/ # vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/core-site.xml
root@cloud1:/ # vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
root@cloud1:/ # vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/yarn-site.xml
root@cloud1:/ # vim /usr/local/spark/hadoop-2.7.7/etc/hadoop/slaves
root@cloud1:/ # cp /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/spark-env.sh.template /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/spark-env.sh
root@cloud1:/ # vim /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/spark-env.sh
root@cloud1:/ # vim /usr/local/spark/spark-2.4.8-bin-hadoop2.7/conf/slaves

12. クラスターの展開

  • コンテナを新しいイメージとして送信する
 #cloud1コンテナを送信すると、コマンドは新しいイメージの番号を返します
#新しい画像にSparkのタグを付ける
docker コミット cloud1 spark:v4
#元のcloud1コンテナを削除して再作成します
docker 停止クラウド1
docker rmクラウド1
#dockerネットワークセグメントが作成されていない場合は作成します
docker ネットワーク作成--subnet = 172 .18.0.0/16 spark-net
  • 新しいイメージを使用してコンテナを作成し、3 つの ssh タブ ページを作成します。それぞれ以下のコマンドを実行します。
 # 50070 ポート
# ポート 8088
# 7077 ポートスパーク
# 9000 ポート HDF
# 16010 ポート hbase
# 2181 ポート飼育係
# 10000 ポート ハイブ サーバー
docker run --name cloud1 \
-p 50070 :50070 \
-p 8088 :8088 \
-p 8080 :8080 \
-p 7077 :7077 \
-p 9000 :9000 \
-p 16010 :16010 \
-p 2181 :2181 \
-p 10000 :10000 \
--netスパークネット--ip 172 .18.0.2 \
-hクラウド1 \
--add -hostクラウド1:172.18.0.2 \
--add -hostクラウド2:172.18.0.3 \
--add -hostクラウド3:172.18.0.4 \
-itスパーク:v4
 docker run --name cloud2 \
--netスパークネット--ip 172 .18.0.3 \
-hクラウド2 \
--add -hostクラウド1:172.18.0.2 \
--add -hostクラウド2:172.18.0.3 \
--add -hostクラウド3:172.18.0.4 \
-itスパーク:v4
 docker run --name cloud3 \
--netスパークネット--ip 172 .18.0.4 \
-hクラウド3 \
--add -hostクラウド1:172.18.0.2 \
--add -hostクラウド2:172.18.0.3 \
--add -hostクラウド3:172.18.0.4 \
-itスパーク:v4
  • cloud2 コンテナと cloud3 コンテナの Zookeeper 構成をそれぞれ変更します。
 #クラウド2で実行
エコー2 > ~/zookeeper/tmp/myid
#cloud3で実行
エコー3 > ~/zookeeper/tmp/myid
  • すべてのノードでZkserverを起動します
 #すべてのノードで Zkserver の実行ステータスを確認します。
#Zkserver に接続できないというエラー メッセージが表示されます。後で確認できます。
#Master はマスター Zkserver を表し、Follower はスレーブ Zkserver を表します。
zkServer.sh ステータス

#3つのノードそれぞれでZkserverを起動します
zkServer.sh 開始
  • HDFs NameNode の HA モードの同期
  • JournalNode を起動する

HDFS の最初のフォーマット中に、HA はジャーナルノードと通信するため、最初に 3 つのノードのジャーナルノードを起動する必要があります。

  • cloud1ノードで実行
 # デーモンは3つのノードのジャーナルノードを起動し、ここで完全な起動を実行します
hadoop-daemons.sh ジャーナルノードを起動する
# デーモンは現在のジャーナルノードのみを起動します
hadoop-daemon.sh ジャーナルノードを起動します
  • NameNode のフォーマット

ネームノードの 1 つをフォーマットします (いずれか 1 つを選択)。たとえば、cloud1 ノードで namenode をフォーマットすることを選択します。

 hdfs ネームノード-フォーマット
# ネームノードのフォーマット結果には「正常にフォーマットされました」と表示されます。これはフォーマットが成功したことを示します。
# 次に、cloud1ノードでhadoop-daemon.sh start namenodeコマンドを実行してnamenodeを起動します。
hadoop-daemon.sh ネームノードを起動します
  • ネームノード同期

もう一方のネームノードは cloud2 に配置されているため、ネームノードの同期操作は cloud2 ノードで実行する必要があります。

 hdfs ネームノード-bootstrapStandby
#成功すると、common.Storage のプロンプトが表示されます: ストレージ ディレクトリ /hadoop/dfs/name が正常にフォーマットされました。
#クラウド2ノードのネームノードを起動する
hadoop-daemon.sh ネームノードを起動します
  • NameNode ZKFC を初期化する

ネームノードの 1 つで zkfc を初期化します。

 hdfs zkfc -formatZK
#ZK に /hadoop-ha/hdfs1 を正常に作成しました。これは、ZK フォーマットが成功したことを意味します。
  • HDFSを完全に起動する
 #cloud1ノードで起動したHDFSを停止します
停止-dfs.sh
#1) 2つのネームノードを停止する
#2) すべてのデータノードを停止する
#3) すべてのジャーナルノードを停止する
#4) ストップ 2 zkfc

#HDFSを完全に起動する
dfs.shを起動します
  • cloud1 で HDFS、Yarn、Spark を起動します。

NameNode、DataNode、zkfc、JournalNode を起動します。

 #上記で開始しました。ここで実行する必要はありません
dfs.shを起動します
  • ResourceManagerとNodeManagerを起動する
スタートヤーン
  • マスターとワーカーを起動する
すべて開始.sh
  • 起動プロセスを表示する
ルート@cloud1:/ # jps
2080ノードマネージャー
305ネームノード
18クォーラムピアメイン
2295労働者
1816リソースマネージャー
971データノード
2365日本
1167ジャーナルノード
2207マスター

13. 外部ウェブアクセスアドレス

仕える

住所

ハードウェア

クラウド1:50070

クラウド1:8088

スパーク

クラウド1:8080

 # 開いているポートを表示
ファイアウォール-cmd --zone = public --list -ports
#ポートを一つずつ開く
ファイアウォールコマンド--zone = public --add -port = 50070 /tcp --permanent
#設定を再読み込み
ファイアウォール-cmd --reload
#Dockerを再起動
systemctlデーモンリロード
systemctl docker を再起動します

# またはファイアウォールをオフにする
#ファイアウォールを停止
systemctl 停止ファイアウォールd.service
# ファイアウォールの起動を無効にする
systemctl は、firewalld.service を無効にします。

14. スクリーンショットにアクセスする

 http://192.168.0.135:50070/dfshealth.html#tab-datanode

http://192.168.0.135:8088/クラスター。

http://192.168.0.135:8080/ です。

15. Spark統計タスクのテスト送信

カウントするテキストを準備します。

 #コンテナ内にテキストを作成する
vim /opt/put.txt
#次のコンテンツを追加
シャオ・ナイ・イー
ナイナイイイ
シャオナイナイ

テキストをhdfsにアップロードします。

 #HDFSにディレクトリを作成する
hdfs dfs -mkdir /opt
#テキストをHDFSにアップロードする
hdfs dfs -put /opt/put.txt /opt
#ファイルの内容を表示
hadoop fs -cat /opt/put.txt

Spark 統計タスクを実行します。

スパーク送信\
--master spark://cloud1:7077 \
--class com.gtstar.WordCountLocal \
/opt/my_scala-1.0-SNAPSHOT.jar \
hdfs://cloud1:9000/opt/put.txt \
hdfs://クラウド1:9000/wc
#注: my_scala-1.0-SNAPSHOT.jar は私がアップロードしたネットワークディスクにあり、scala で書かれた簡単な統計情報です
 #コアクラスcom.gtstar.WordCountLocal
org をインポートしますアパッチスパーク.{ SparkConfSparkContext }
オブジェクトWordCountLocal {
def main ( args : 配列[ 文字列] ): 単位= {
var conf = 新しいSparkConf ()
confsetAppName ( "WordCountLocal" )
val スパークコンテキスト= 新しいSparkContext ( conf )
//パラメータ1を読み取ります(計算するテキストコンテンツ、/opt/put.txt)
val textFileRDD = スパークコンテキストテキストファイル( 引数( 0 ))
//スペース単語分割
val wordRDD = textFileRDDflatMap ( => .split ( " " ))
//同じ単語が蓄積される
val pairWordRDD = wordRDDマップ( 単語=> ( 単語1 ))
val wordCountRDD = pairWordRDDキーによる値の削減(( a , b ) => a + b )
// 構造体をパラメータ2に出力します
wordCountRDD.saveAsTextFile (引数( 1 ))
}
}
# ソースコードはgiteeにありますhttps://gitee.com/hxmeng/my_scalam.git

統計結果を表示します:

 #hdfs への統計出力を表示する
hadoop fs -cat /wc/*
root@cloud1:/opt # hadoop fs -cat /wc/*
(ナイ、5)
(イ、3)
(シャオ、2)

16. ハイブのインストール

mysql に接続します (mysql データベースを準備します)。

 mysqlで実行
# データベース hive_metadata を作成し、権限を付与します
hive_metadata が存在しない場合はデータベースを作成します。
#Hiveユーザーを作成し、権限を付与する
hive_metadata.* のすべての権限を'hive' @ '%' ( 'hive'で識別) に付与します。
hive_metadata.* のすべての権限を'hive' @ 'localhost' ( 'hive'で識別) に付与します。
hive_metadata.* のすべての権限を'hive' @ 'master' ( 'hive'で識別) に付与します。
権限をフラッシュします。

環境設定を確認してください。

 #すでに設定されている場合は実行する必要はありません
vim ~/.bashrc
HIVE_HOME = /usr/local/spark/hive-2.3.4 をエクスポートします
エクスポートPATH = $HIVE_HOME /bin: $PATH
ソース~/.bashrc

hive-site.xml を構成します。

 cp /usr/local/spark/hive-2.3.4/conf/hive-default.xml.template /usr/local/spark/hive-2.3.4/conf/hive-site.xml
vim /usr/local/spark/hive-2.3.4/conf/hive-site.xml
# hive-site.xmlには設定項目が多すぎるので、事前に設定しておきましょう
# 外部からコンテナにコピー docker cp /opt/hive-site.xml cloud1:/opt/
/opt/hive-site.xml を /usr/local/spark/hive-2.3.4/conf にコピーします
#データベース関連の設定に注意してください。cloud1は外部からアクセス可能なIPに置き換えることができます。
<name>javax.jdo.option.ConnectionURL</name>
<値>jdbc:mysql://cloud1:3306/hive_metadata ?createDatabaseIfNotExist = true </値>

hive-env.sh を設定します。

 cp /usr/local/spark/hive-2.3.4/conf/hive-env.sh.template /usr/local/spark/hive-2.3.4/conf/hive-env.sh
vim /usr/local/spark/hive-2.3.4/conf/hive-env.sh
HADOOP_HOME = /usr/local/spark/hadoop-2.7.7 をエクスポートします。
HIVE_CONF_DIR をエクスポートします= /usr/local/spark/hive-2.3.4/conf
JAVA_HOME = /usr/local/spark/jdk1.8.0_144 をエクスポートします。
HIVE_HOME = /usr/local/spark/hive-2.3.4 をエクスポートします

Hvie メタデータを mysql データベースに初期化します。

 schematool - dbType mysql - initSchema

インポートデータをテストする準備をします。

 vim /opt/users.txt
1浙江工商大学
2. 杭州
3 大好き
4ZJGSU
5. さあ!

インポートを実行します。

 実行し続ける
ハイブ
コマンドラインモードに入る
ユーザーを保存するためのHvieテーブルを作成する
hive > create table users ( id intname string ) 形式は',' 区切られたフィールドです。
データのインポート
hive > ローカルインパス'/opt/users.txt'データをテーブルusers ロードします
インポートしたデータの検証
hive > ユーザーから* を選択します

hive の実行時にエラーが発生した場合:

 #HDFSマスターとバックアップのステータスを確認する
# nnのステータスを確認する
hdfs haadmin - getServiceState nn1
hdfs haadmin - getServiceState nn2
#nn1 ステータスを強制的にアクティブにする:
hdfs haadmin - transitionToActive - - forcemanual nn1
#複数の書式設定
# フォルダを削除
rm - rf / ルート/ hadoop / tmp / dfs / データ/ 現在
# 再フォーマット
hdfs ネームノード- フォーマット

3. Dockerイメージをベースにした素早い作成

3 つのノード cloud1、cloud2、cloud3 のイメージはすべて Tianyi クラウド ディスクに配置されます。環境情報は設定されているので、1 つずつ起動するだけです。

cloud1: https://cloud.189.cn/t/Qj6ZBvvANFj2 (アクセスコード: hhl5)。

cloud2: ​​https://cloud.189.cn/t/2q6fMnAjUjIj​​​​(アクセスコード:5km2)。

cloud3: https://cloud.189.cn/t/Afa6bme6NFza (アクセスコード: j6ik)。

 #3つのノードそれぞれでZkserverを起動します
zkServer.sh 開始
##cloud1 は HDFS を完全に起動します
dfs.shを起動します
#cloud1 ResourceManager、NodeManagerを起動する
スタートヤーン
#cloud1 マスターとワーカーを起動する
すべて開始.sh

4. よくある質問

1. Zookeeper クラスタの起動に失敗しました

 rm -rf /root/zookeeper/tmp/version-2/ /root/zookeeper/tmp/zookeeper_server.pid
zkServer.sh 開始
docker がクラスター コンテナをシャットダウンして再起動すると、各コンテナで zk を起動するときに接続拒否が報告され続けます。原因分析: コンテナの IP が固定されておらず、ランダムに変更されます。解決策: Dockerネットワークをカスタマイズする
docker ネットワーク作成 --subnet=172.18.0.0/16 spark-net
コンテナ起動時の固定IP
--net スパークネット --ip 172.18.0.2
--net スパークネット --ip 172.18.0.3
--net スパークネット --ip 172.18.0.4

2. HDFS HAの起動に失敗しました

原因分析: 操作手順が間違っているため、ノードを正常にフォーマットできません。解決策: 操作手順
  • HA は HDFS の最初のフォーマット中にジャーナルノードと通信するため、cloud1 ノードは 3 つのノードのジャーナルノードを起動します。
  • cloud1 ノード namenode をフォーマットします。
  • NameNode の同期。
  • NameNode ZKFC をフォーマットします。

3. HDFS HAは常にスタンバイ

 # nnのステータスを確認する
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
# nn1 ステータスを強制的にアクティブにする
hdfs haadmin -transitionToActive --forcemanual nn1
#フォルダを削除
rm -rf /root/hadoop/tmp/dfs/data/current
#再フォーマット
hdfs ネームノード-フォーマット

4. Hiveの起動に失敗しました

 1. ログ情報を表示するには、tail -f /tmp/root/hive.log を実行します。
2. MySQL ドライバ jar はありますか? cp /opt/my_tar/mysql-connector-java.jar /usr/local/hive-2.3.4/lib/
3. HDFSのステータスを確認する hdfs haadmin -getServiceState nn1
4. /usr/local/hive-2.3.4/conf/hive-site.xml 内のパスと msyql アドレスが正しいかどうかを確認します。

5. hadoop エラー: 操作カテゴリ READ はスタンバイ状態ではサポートされていません

解決策3と同じ

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​.

<<:  CentOS 以降の時代において、コミュニティはどのように発展し、革新していくのでしょうか?

>>:  クラウドネイティブ Docker コンテナ ホスト間指定 IP 通信

推薦する

企業がクラウドテクノロジーの新時代を受け入れるべき理由

企業はクラウド コンピューティングの利点だけを考慮するべきではありません。クラウド コンピューティン...

利益と導入規模の拡大に伴いパブリッククラウドの成長が続く

市場調査会社IDCの調査によると、2017年の世界パブリッククラウド収益は、上半期と比較して前年比2...

クラウドセキュリティの主要技術と今後の開発動向

クラウド セキュリティは、中国企業によって生み出された概念であり、国際的なクラウド コンピューティン...

kvmla: 香港 CN2/日本ソフトバンク/シンガポール CN2、500M 帯域幅 VPS は月額 60 元から、専用サーバーは月額 280 元から

老舗サーバー業者kvmla(2011年~)が現在プロモーションを実施しており、VPS/クラウドサーバ...

Nexaly-$7.46/Windows/2g メモリ/24g SSD/2T トラフィック/ロサンゼルス

nexaly.com は新しい会社のようです。主な事業は KVM 仮想化に基づく VPS です。ロサ...

ソーシャルメディアと購買決定がユーザーの購買行動に与える影響

マーケティングの目的は、タッチポイントと購入の瞬間に消費者に影響を与え、彼らの意思決定に影響を及ぼす...

SEO初心者にスパムサイトと通常サイトの選び方を教える

スパムサイトを構築するか、通常のサイトを構築するかは、SEO 界では永遠の話題です。初心者はゴミステ...

Trentahost 仮想ホスティング 年間 12 ドル (米国、英国、ルーマニア)

Trentahost は設立されてまだ 1 年も経っていないホスティング会社です。ドメイン名登録、仮...

2013 年の貧弱なウェブマスターのウェブサイト運営のアイデア

ウェブサイトの運用は、すべてのウェブマスターが常に考え、探求しているウェブサイト構築の問題です。最適...

電子商取引のウェブマスターがアリペイ改革の賢明さを自らの言葉で分析

Baidu が行動を起こさなければ問題ないが、もし行動を起こせば、それは業界にとって大きな動きとなる...

推奨: hosthatch-15.6$/年/128MB RAM/7GB SSD/G ポート

Hosthatch はオランダのデータセンターで VPS を提供することに特化しています。現在は o...

今年の新バージョン: 安価なサーバーベンダーの推奨事項、速度と価格を考慮した包括的な比較

予算が限られている多くの友人は、安価なサーバー(安価な海外サーバー)を必要としており、安価なサーバー...

本格的な相互接続の到来が加速しており、3つの主要な技術トレンドは注目に値する

テンセント副社長、クラウド・スマート産業グループCOO、テンセントクラウド社長の邱月鵬氏は11月3日...

クラウド コンピューティングの経済的メリットを実現する 5 つの方法

ほとんどの企業はまだ、データセンターからクラウドへのワークロードの移行の過程にあります。通常、コスト...

百度起業家トレーニングキャンプが熱い議論を巻き起こす:起業家精神は流れに沿う必要がある

7月28日、百度は厦門で「百度インターネット起業家トレーニングキャンプ」の第一弾を成功裏に開催した後...