編集前に復元ポイントを作成する

ビッグデータBeginner
オンラインで実践に進む

はじめに

地域のワークショップでは、部屋ごとの活動日程、来場者向けの連絡先、入場に関するメモを共有 HDFS フォルダーに保存しています。日程を編集する前に、現在のフォルダーが変更された後でも承認済みファイルを確認できる復元ポイントが必要です。

まず正常なデータを読み、通常の所有者としてネイティブスナップショットを作成してから、範囲を限定した変更を 2 つ行います。HDFS のパス、ファイルのアップロード、ディレクトリ、所有者とグループの基本的なアクセス許可は既知の前提です。このラボでは、スナップショットと履歴へのパスを学びます。最初から最後まで Terminal を使用してください。すべてのデータは他のラボから独立しています。読む時間と一般的な間違いの修正を含め、著者の所要時間の目安は 40 分です。

編集前に承認済みファイルを保存する

このステップでは、利用中の活動日程を読み、名前付きの復元ポイントを作成します。Terminal から始めてください。cd はこのシェルのローカル作業ディレクトリを変更します。HDFS コマンド内で /user/labex/ から始まるパスは、ローカルディスクではなく HDFS 上のパスです。

cd /home/labex/project

現在の日程を読みます。

hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv

カンマで区切られた各フィールドは、部屋とその活動を示します。

room,session
A,Printmaking
B,Bookbinding

チームフォルダーには contacts.csv と notes.txt もあります。内容を一覧表示します。

hdfs dfs -ls /user/labex/snapshot-workshop/team

これらの正常な共有ファイルの所有者は labex、グループは bigdata です。用意されているユーザー analyst はこのグループに属し、書き込みはできませんが読み取りができます。あなたは通常の所有者であり、NameNode のサービス ID である hdfs ではありません。この学習環境は simple 認証を使用します。Kerberos のセキュリティを実証する環境ではありません。

スナップショットは、名前を付けたある時点でのディレクトリの、読み取り専用の履歴ビューです。管理者は、このコースのフォルダーだけでスナップショットを利用できるようにしています。実際の復元ポイントは自分で作成します。-createSnapshot には現在のディレクトリ、その後にスナップショット名を指定します。

hdfs dfs -createSnapshot /user/labex/snapshot-workshop/team morning-approved

応答には .snapshot/morning-approved で終わるネイティブパスが表示されます。特別なパス要素 .snapshot は履歴を選択します。-mkdir で作成する通常のバックアップディレクトリではありません。履歴の日程を読みます。

hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv

同じ 2 つの承認済み活動が含まれています。履歴にある 3 つのファイルを一覧表示します。

hdfs dfs -ls /user/labex/snapshot-workshop/team/.snapshot/morning-approved

スナップショットには、元の連絡先と入場メモも含まれています。コマンドで No such file or directory と表示されたら、パスの綴りをこの一覧と比較し、失敗した読み取りだけをやり直してください。-createSnapshot で名前が既に存在すると表示されたら、削除や再作成をせず、そのスナップショットを調べます。環境のセットアップを再実行しないでください。既存の作業を上書きしないよう、再実行は拒否されます。

これで編集前の本物の復元ポイントができました。ローカルにダウンロードしたコピーや同名の通常フォルダーでは、このネイティブの履歴は作成できません。

履歴と後から追加した作業を比較する

このステップでは、正当な新しい作業を追加してから、範囲を限定した誤操作を行い、スナップショットが変わらないことを確認します。同じ Terminal で続けてください。

後から追加されるワークショップ活動のファイルは、ローカルに用意されています。まず読みます。

cat /home/labex/project/incoming/late-session.csv

部屋 C と Paper Folding が含まれています。現在のチームフォルダーにアップロードします。これは現在の日程の一部であり、後の復旧でも必ず残す必要があります。

hdfs dfs -put /home/labex/project/incoming/late-session.csv /user/labex/snapshot-workshop/team/late-session.csv

-chgrp で適切な共有グループを維持します。ファイルのモード 640 は、所有者には読み書き、グループには読み取りを許可し、その他のユーザーにはファイルへのアクセスを許可しません。

hdfs dfs -chgrp bigdata /user/labex/snapshot-workshop/team/late-session.csv
hdfs dfs -chmod 640 /user/labex/snapshot-workshop/team/late-session.csv

次に、意図的に誤った置き換え用ファイルを調べます。

cat /home/labex/project/incoming/schedule-draft.csv

A,CANCELLED が含まれています。次のアップロードは、指定した現在の日程ファイルだけを意図的に上書きします。-f はその宛先の置き換えを許可します。ここでは制御された編集であるためだけに使います。スナップショットには影響しません。

hdfs dfs -put -f /home/labex/project/incoming/schedule-draft.csv /user/labex/snapshot-workshop/team/schedule.csv

2 つ目の制御された誤操作では、現在の連絡先ファイルだけを削除します。先に正確なパスを確認します。

hdfs dfs -ls /user/labex/snapshot-workshop/team/contacts.csv
hdfs dfs -rm /user/labex/snapshot-workshop/team/contacts.csv

ワイルドカード、再帰削除、チームのルートパスは使わないでください。変更後の日程を読み、その後に履歴の版を読みます。

hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv
hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv

現在の結果には中止が表示されますが、履歴には Printmaking と Bookbinding が残っています。共有データを読む実際の ID で履歴の連絡先を読みます。sudo -u analyst は、この通常のテスト ID で当該クライアントだけを実行します。クライアントの絶対パスは、用意された HDFS ツールを選びます。

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/contacts.csv

現在の連絡先ファイルはありませんが、履歴のアドレスは引き続き visitors@example.test です。現在の一覧を確認します。

hdfs dfs -ls /user/labex/snapshot-workshop/team

変更後の日程、変更されていないメモ、新しい活動が表示されます。先ほどの新しいファイルのアップロードで宛先が既に存在すると表示された場合は、削除したりアップロードの範囲を広げたりせず、既存ファイルを読んでください。削除を繰り返して連絡先が見つからないと表示された場合は、制御された削除が既に済んでいます。一覧を調べて続行します。

この最終状態をそのまま残してください。次のラボでは独立した破損状態を用意し、復元方法を学びます。スナップショットは HDFS とストレージを共有します。そのブロックは独立したバックアップコピーではないため、ストレージシステム全体の喪失には対処できません。

まとめ

編集前に HDFS のネイティブスナップショットを作成し、保護された履歴ファイルと、変更後の現在のフォルダーを区別しました。後から追加した活動は現在の日程にしかないため、フォルダー全体を履歴で置き換えると正当な作業が失われます。また、共有読み取り用の実際の ID である analyst で履歴を読みました。