0

MYSQL からデータをインポートし、MR を実行して MYSQL にエクスポートする必要があります。DBInputFormat と DBOutputFormat を使用して、いくつかのレコードに対して単一の MR ジョブで正常に実行できます。入力レコードを 1 億以上のレコードにスケーリングすると、MR ジョブがハングします。これに代わる方法は、データを HDFS にエクスポートし、MR ジョブを実行して、My SQL にプッシュバックすることです。

約 4 億件以上のレコードの巨大なデータセットの場合、DBInputFormat と DBOutputFormat を使用するか、HDFS をデータ ソースと宛先として使用する方が適切です。

HDFS を使用すると、MR ジョブの前後にステップが追加されます。データは HDFS に保存されるため、レプリケートされ (デフォルトは 3)、より多くのハード ドライブ容量が必要になります。ありがとうルペッシュ

4

1 に答える 1

3

Apache Sqoop は、Apache Hadoop と、MySQL や Oracle などのリレーショナル データベースなどの構造化データストアとの間で大量のデータを効率的に転送するために設計されたツールです。Sqoop は、このプロセスのほとんどを自動化します。 、データベースに依存して、インポートするデータのスキーマを記述します。Sqoop は MapReduce を使用してデータをインポートおよびエクスポートし、並列操作とフォールト トレランスを提供します。このリンクを調べて、詳細については Sqoop を調べてください。SQOOPの詳細

DBInputFormat を使用するには、データベース レコードの列を個々のデータ フィールドに逆シリアル化して操作するクラスを作成する必要があります。これはかなり面倒で、完全にアルゴリズムです。Sqoop は、データベースからデータを逆シリアル化するクラス定義を自動生成します。これらのクラスを使用して、Hadoop の SequenceFile 形式で結果を保存することもできます。これにより、HDFS 内の組み込みの圧縮も利用できます。クラスは、後で独自のデータ処理パイプラインに組み込むことができる .java ファイルとして書き出されます。クラス定義は、データベースとテーブルに関するメタデータを読み取る JDBC の機能を利用して作成されます。

Sqoop が呼び出されると、テーブルのメタデータを取得し、インポートする列のクラス定義を書き出し、MapReduce ジョブを起動してテーブル本体を適切にインポートします。

于 2013-07-29T11:56:35.327 に答える