8 大きいデータ・セットを比較するために部品分類を使用
odiff(Oracle Distributed Diff)は、さまざまなロケーションに格納された大規模なデータセットを比較するユーティリティです。
-
HDFSとOracle Storage Cloud Serviceのみがサポートされています。
-
odiffが2つのオブジェクトを比較すると、データはダウンロードされません。 セグメント・チェックサムのみが比較されます。 オブジェクトが等しいがサイズの異なるセグメントがある場合、それらは異なるオブジェクトとして評価されます
-
比較するブロックのデフォルト・サイズは128 MBです。
-
比較する最小ブロック・サイズは5 MBです。 最大値は2GBです。
odiffリファレンス
以下で説明するように、コマンド行でodiffを使用します。
構文
/usr/bin/odiff [OPTIONS] directory_or_file_1 directory_or_file_2where
directory_or_fileは、file:///tmp/diff/originalFiles(ディレクトリ)やfile:///tmp/diff/originalFiles/file-b.txt(ファイル)など、パスで修飾されたディレクトリまたはファイルです。
環境変数(オプション)
デフォルトでは、odiffはcore-site.xmlで構成された最初のプロバイダを使用します。 core-site.xmlに複数のプロバイダが含まれている場合、PROVIDER_NAME環境変数を宣言することによって、どちらを使用するかを指定できます。
環境変数をエクスポートすることができます...
# export PROVIDER_NAME="some_value" /usr/bin/odiff [OPTIONS] path/file_1 path/file_2...orそれを注入する:
# PROVIDER_NAME="some_value" /usr/bin/odiff [OPTIONS] path/file_1 path/file_2オプション
| オプション | 使用 |
|---|---|
|
|
ファイル・ブロック・サイズをバイト単位で比較します。 Oracle Storage Cloud Serviceに格納されたファイルを比較するときは使用されません。 |
|
|
詳細な出力を表示します。 |
--executor-cores |
エグゼキュータ・コアの数を指定します。 デフォルト値は5です
|
--executor-memory |
エグゼキュータのメモリー制限をGBで指定します。 デフォルト値は40です
|
--extra-conf |
余分な構成オプションを指定します。例えば、--extra-conf spark.kryoserializer.buffer.max=128m |
|
-h --help |
このヘルプ・テキストを表示します。 |
--krb-keytab |
プリンシパルのKerberosキータブへのフルパスを指定します。 Kerberos対応のSpark環境でのみ使用 |
--krb-principal |
Kerberosプリンシパルを指定します。 Kerberos対応のSpark環境でのみ使用してください。 |
--num-executors |
エグゼキュータの数を指定します。デフォルト値は3です。
|
|
-O --output |
出力ファイルを指定します。 |
--spark-home |
Sparkインストールを含むディレクトリへのパスを指定します。 このオプションが指定されていない場合、odiffは/opt/cloudera directoryでそれを見つけようとします。
|
-V |
デバッギング用に冗長モードを有効にします。 |
使用例
/usr/bin/odiff hdfs:///user/oracle/data.raw swift://myContainer.myProvider/data.raw/usr/bin/odiff swift://jmyContainer.myProvider/data.raw hdfs:///user/oracle/odcp-data.raw3つ以上のノードがある場合は、より多くのエグゼキュータを指定して転送速度を上げることができます。 たとえば、6つのノードの場合、次のコマンドを使用します:
/usr/bin/odiff --num-executors=6 hdfs:///user/oracle/data.raw swift://myContainer.myProvider/data.rawデバッグの場合、スイッチ-Vを使用して詳細モードを有効にすることができます:
/usr/bin/odiff -V swift://jmyContainer.myProvider/data.raw hdfs:///user/oracle/odcp-data.raw制限:
/usr/bin/odiffは、クラスタの多くのリソースを消費します。 他のSpark/MapReduceジョブを並行して実行する場合は、--num-executors、--executor-memory、および--executor-coresパラメータを使用して、エグゼキュータの数、エグゼキュータのメモリー、またはエグゼキュータのコアの数を減らす必要があります。
odiffの例
このトピックでは、odiffを使用してデータ構造を比較する、より拡張された例を検証します。
データ
次のような状況を考えてみましょう:
-
ディレクトリ
originalFilesからのファイルは、(odcp分散コピー・ツールを使用して)copiedFilesという名前のディレクトリにコピーされました。 -
コピー後、ユーザー
-
added
originalFiles/file-b.txtへのテキストの数行 -
「削除された」
originalFiles/file-c.txtのテキストの数行 -
modified
originalFiles/file-d.txtの1バイトのテキスト -
copiedFilesディレクトリの「作成した」.hiddenFile
-
その結果、ディレクトリとファイルは次のようになります:
originalFiles
+-- file-a.txt
+-- file-b.txt
+-- file-c.txt
`-- file-d.txt
copiedFiles
+-- file-a.txt (same as originalFiles/file-a.txt)
+-- file-b.txt (added few lines)
+-- file-c.txt (deleted few lines)
+-- file-d.txt (modified one byte)
`-- .hiddenFile (added)残りのセクションは、上記のデータに対して実行された異なるodiff操作を示しています。
2つのファイルの比較(元とコピー)
| odiffのパラメータ | 出力 | リターン・コード |
|---|---|---|
|
Files file:///tmp/diff/originalFiles/file-a.txt and file:///tmp/diff/copiedFiles/file-a.txt are same. |
0 |
|
Files file:///tmp/diff/originalFiles/file-a.txt and file:///tmp/diff/copiedFiles/file-a.txt are same. |
0 |
2つのディレクトリを比較する(元のファイルとコピーされたファイルのあるものとの1つ)
| odiffのパラメータ | 出力 | リターン・コード |
|---|---|---|
|
Directories file:///tmp/diff/originalFiles and file:///tmp/diff/originalFiles are same. |
0 |
|
Directories file:///tmp/diff/originalFiles and file:///tmp/diff/originalFiles are same. |
0 |
2つの異なるファイルを比較
| odiffのパラメータ | 出力 | リターン・コード |
|---|---|---|
|
Files file:/tmp/diff/originalFiles/file-b.txt and file:/tmp/diff/copiedFiles/file-b.txt are different |
1 |
|
|
1 |
2つの異なるディレクトリを比較
| odiffのパラメータ | 出力 | リターン・コード |
|---|---|---|
|
|
1 |
|
|
1 |