ダークホース プログラマー - ビッグ データの入門から実践的な戦闘まで - HDFS 分散ストレージ

1. 分散ストレージが必要な理由

① データ量が多すぎて、単一マシンのストレージ容量には上限があり、量によって問題を解決する必要がある ② 量の増加により、ネットワーク伝送、ディスクの読み取りと書き込み
、 CPU、メモリなどを分散組み合わせて1+1>2の効果を実現

2. 分散インフラストラクチャ分析

① 分散モード: 明確な中心がなく、全員が作業を調整します。
② 集中モード: 明確な中心があり、中央ノード (Hadoop) に基づいて作業が分散されます。

3. HDFS インフラストラクチャ

  • NameNode: マスター ロール、HDFS クラスターと DataNode ロールの管理
  • DataNode: データストレージを担当する役割から
  • SecondaryNameNode: NameNode がメタデータを整理するのを支援する補助的な役割

4. HDFS クラスター環境の展開

4.1 VMware 仮想マシンへの展開

4.1.1 クラスターの計画

Hadoop HDFS の役割

  • 名前ノード
  • データノード
  • セカンダリ名ノード

ノードサービス

  • ノード1:NameNode、DataNode、SecondaryNameNode
  • ノード2:データノード
  • ノード3:データノード

4.1.2 アップロードと解凍

  1. Hadoop インストール パッケージを node1 ノードにアップロードします
  2. インストールパッケージを/export/server/に解凍します。
tar -zxvf hadoop-3.3.6.tar.gz -C /export/server/
  1. ソフトリンクを構築する
cd /export/server
ln -s /export/server/hadoop-3.3.6 hadoop
  1. Hadoop インストール パッケージを入力します
cd hadoop

4.1.3 Hadoop インストールパッケージのディレクトリ構造

  • bin: Hadoopの各種プログラムを格納する

  • etc: Hadoop 設定ファイルを保存する

  • sbin: 管理者プログラム

  • lib: Linux システムのダイナミック リンク ライブラリ (.so ファイル) を保存します。

  • libexec: Hadoop システムを構成するスクリプト ファイル (.sh および .cmd) を保存します。

4.1.4 設定ファイルの変更

HDFS クラスターを構成するには、主に次のファイルを変更します。

  1. ワーカーファイルを設定する
cd etc/hadoop  #进入配置文件目录
vim workers # 编辑workers文件
# 填入如下内容
node1
node2
node3
  1. hadoop-env.sh ファイルを構成する
# 填入如下内容
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
  1. core-site.xml ファイルを構成する
# 在文件内部填入如下内容
<configuration>
  <property>
    <name>fs.defaultFS</name> # HDFS文件系统的网络通讯路径
    <value>hdfs://node1:8020</value> 
  </property>

  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value> # io操作文件缓冲区大小
  </property>
</configuration>
  • hdfs://node1:8020 は HDFS 全体の内部通信アドレスであり、アプリケーション プロトコルは hdfs:// (Hadoop 組み込みプロトコル)

  • DataNode がノード 1 のポート 8020 と通信し、ノード 1 が NameNode が配置されているマシンであることを示します。

  • この構成により、node1 が NameNode プロセスを開始する必要があることが修正されます。

  1. hdfs-site.xml ファイルを構成する
# 在文件内部填入如下内容
<configuration>
  <property>
    <name>dfs.datanode.data.dir.perm</name>  # hdfs文件系统,默认创建的文件权限设置
    <value>700</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>    # NameNode元数据的存储位置
    <value>/data/nn</value>
  </property>
  <property>
    <name>dfs.namenode.hosts</name>     # NameNode允许哪几个节点的DataNode连接(即允许加入集群)
    <value>node1,node2,node3</value>
  </property>
  <property>
    <name>dfs.blocksize</name>     # hdfs默认块大小
    <value>268435456</value>
  </property>
  <property>
    <name>dfs.namenode.handler.count</name>    # namenode处理的并发线程数
    <value>100</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>   # 从节点DataNode的数据存储目录
    <value>/data/dn</value>
  </property>
</configuration>

4.1.5 データディレクトリの準備

  1. ノード 1 ノードでは、次のようになります。
mkdir -p /data/nn
mkdir /data/dn
  1. ノード2、ノード3のノード:
mkdir -p /data/dn

4.1.6 Hadoopフォルダーの配布

  1. 分布
# 在node1执行如下命令
cd /export/server
scp -r hadoop-3.3.6 node2:`pwd`/
scp -r hadoop-3.3.6 node3:`pwd`/
  1. ノード2で実行し、Hadoop用のソフトリンクを構成します。
# 在node2执行如下命令
ln -s /export/server/hadoop-3.3.6 /export/server/hadoop
  1. ノード3で実行し、Hadoop用のソフトリンクを構成します。
# 在node3执行如下命令
ln -s /export/server/hadoop-3.3.6 /export/server/hadoop

4.1.7 環境変数の構成

  1. vim /etc/profile
# 在/etc/profile文件底部追加如下内容
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. ノード2とノード3で同じ環境変数を構成します。

4.1.8 ファイルシステム全体をフォーマットする

  1. フォーマット名ノード
# 确保以hadoop用户执行
su - hadoop
# 格式化namenode
hadoop namenode -format
  1. 起動
# 一键启动hdfs集群
start-dfs.sh
# 一键关闭hdfs集群
stop-dfs.sh

# 如果遇到命令未找到的错误,表明环境变量未配置好,可以以绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh
/export/server/hadoop/sbin/stop-dfs.sh

5. HDFSのシェル操作

5.1 プロセスの開始と停止の管理

5.1.1 ワンクリックの開始および停止スクリプト

  1. ワンクリックで HDFS クラスターを開始
$HADOOP_HOME/sbin/start-dfs.sh

実行原則:

  • このスクリプトを実行するマシン上で、SecondaryNameNode を起動します。
  • core-site.xml(fs.defaultFS項目)の内容を読み込み、NameNodeが配置されているマシンを確認し、NameNodeを起動します。
  • ワーカーの内容を読み取り、DataNode が配置されているマシンを確認し、すべての DataNode を起動します
  1. HDFS クラスターのワンクリックシャットダウン
$HADOOP_HOME/sbin/stop-dfs.sh

実行原則:

  • このスクリプトを実行しているマシンで、SecondaryNameNode をシャットダウンします。
  • core-site.xml(fs.defaultFS項目)の内容を読み込み、NameNodeが配置されているマシンを確認し、NameNodeをシャットダウンします。
  • ワーカーの内容を読み取り、DataNode が配置されているマシンを確認し、すべての NameNode をシャットダウンします。

5.1.2 単一プロセスの開始と停止

設置されているマシンのプロセスの開始と停止を個別に制御します。

  1. $HADOOP_HOME/sbin/hadoop-daemon.sh
hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)
  1. $HADOOP_HOME/bin/hdfs
hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)

5.2 ファイルシステム操作コマンド

  1. フォルダーを作る
hadoop fs -mkdir [-p] <path>
hdfs dfs -mkdir [-p] <path>
  • -p: パスに沿って親ディレクトリを作成します
  1. 指定したディレクトリの内容を表示します
hadoop fs -ls [-h] [-R] [<path> ....]
hdfs dfs -ls [-h] [-R] [<path> ....]
  • -h: 人間化された表示ファイルのサイズ
  • -R: 指定されたディレクトリとそのサブディレクトリを再帰的に表示します。
  1. 指定された HDFS ディレクトリにファイルをアップロードします
hadoop fs -put [-f] [-p] <localsrc> <dst>
hdfs dfs -put [-f] [-p] <localsrc> <dst>
  • -f: 対象ファイルを上書きします
  • -p: アクセスと変更の時刻、所有権と権限を保持します。
  • localsrc: ローカル ファイル システム
  • dst: 宛先ファイル システム (HDFS)
  1. HDFS ファイルのコンテンツを表示する
hadoop fs -cat <src> ....| more
hdfs dfs -cat <src> ....| more
  1. HDFSファイルをダウンロードする
hadoop fs -get [-f] [-p] <src>....<localdst>
hdfs dfs -get [-f] [-p] <src>....<localdst>
  • -f: 対象ファイルを上書きします
  • -p: アクセス時間と変更時間を保持します。
  1. HDFS ファイルをコピーする
hadoop fs -cp [-f] <src>....<dst>
hdfs dfs -cp [-f] <src>....<dst>
  • -f: 対象ファイルを上書きします
  1. HDFS ファイルにデータを追加する
hadoop fs -appendToFile <localsrc>....<dst>
hdfs dfs -appendToFile <localsrc>....<dst>
  1. HDFS データ移動操作
hadoop fs -mv <src>....<dst>
hdfs dfs -mv <src>....<dst>
  1. HDFS データ削除操作
hadoop fs -rm -f [-skipTrash] [URl..]
hdfs dfs -rm -f [-skipTrash] [URl..]
  • -skipTrash はごみ箱をスキップして直接削除します

5.3 HDFS 権限

少し

5.4 HDFSクライアント

少し

6. HDFS のストレージ原理

6.1 保管原理

少し

6.2 fsckコマンド

6.2.1 HDFSレプリカブロック数の構成

  • hdfs-site.xml で設定します。
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
  • また
hadoop fs -D dfs.replication=2 -put test.txt /tmp/

6.2.2 fsck コマンドはファイルのコピー数をチェックします

hdfs fsck path [-files [-blocks [-locations]]]

6.2.3 ブロック構成

 <property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
    <description>设置HDFS块大小,单位是b</description>
  </property>

6.3 NameNode メタデータ

少し

6.4 HDFS データの読み取りおよび書き込みプロセス

6.4.1 データ書き込み処理

1

  1. クライアントが NameNode へのリクエストを開始します。
  2. NameNode は権限と残りのスペースを監査した後、書き込みを許可する条件を満たし、書き込みを行う DataNode アドレスをクライアントに通知します。
  3. クライアントは指定された DataNode にデータ パケットを送信します。
  4. データが書き込まれるDataNodeは、同時にデータコピーのレプリケーションを完了し、受信したデータを他のDataNodeに配布します。
  5. 上に示すように、DataNode1 は DataNode2 にレプリケートされ、次に DataNode2 に基づいて DataNode3 と DataNode4 にレプリケートされます。
  6. 書き込みが完了すると、クライアントは NameNode に通知し、NameNode がメタデータの記録作業を実行します。

6.4.2 データ読み込み処理

2

  1. クライアントはファイルを読み取るために NameNode に適用します
  2. NameNode はクライアントの権限の詳細を判断した後、読み取りを許可し、このファイルのブロック リストを返します。
  3. クライアントはブロック リストを取得した後、DataNode を見つけてそれを独自に読み取ることができます。

おすすめ

転載: blog.csdn.net/m0_68111267/article/details/131734908