あなたの考えを共有してください。
要件は、分析目的で MySQL db のデータを Hadoop/HBase に移行することです。
データは、リアルタイムまたはほぼリアルタイムで移行する必要があります。Flume はこれをサポートできますか。
より良いアプローチとは何か。
私の理解では、Flume はそのためのものではありません。Flume は基本的に、データ ソース (フラット ファイル) のようなログを読み取り、それらを構造化された方法でシンクにプッシュするためのものです。Sqoop を使用できます。試してみて ください http://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html
あなたの質問に対する直接的な答えはイエスです。Flume は、イベント/ログ構造化データの分散データ転送および集約システムとして設計されています。「正しく」設定されていれば、flume は Hadoop での継続的な取り込みのためにデータをプッシュできます。これは、Flume がさまざまなソース (この場合は MySql) からデータを収集するように正しく設定されている場合であり、データがソースで利用可能であれば、Flume のシンクはそれを HDFS にミリ秒レベルで同期します。HDFS/HBASE でデータが利用可能になると、そのデータに対してクエリを実行し、インフラストラクチャに応じて処理することができます。
したがって、データをほぼリアルタイムで HDFS にプッシュするには、Flume の構成が非常に重要であり、残りは Map/Reduce クラスターのパフォーマンスと、処理されるデータに関してクエリがどのように記述されるかに依存します。
MySQL の製品である Hadoop Applier を使用できます。これはhttp://labs.mysql.com/にあります。
MySQL から HDFS にリアルタイムでデータを転送します。
実際、flume はログやその他の時系列データを収集するために使用されています。Flume を使用して db から Hadoop にデータをインポートする人はほとんど聞いたことがありません。
Sqoop は、RDBMS から HDFS/Hive/HBase への一括インポートに適しています。1 回限りのインポートであれば、非常に優れており、紙で約束されていることを実行します。しかし、リアルタイムの増分更新が必要な場合に問題が発生します。Sqoop がサポートする 2 種類の増分更新間:
追加します。これにより、sqoop ジョブを再実行できます。新しいジョブはすべて、最後の古いジョブが終了した場所から開始されます。例えば。最初の sqoop ジョブは行 0 ~ 100 のみをインポートし、次のジョブは --last-value=100 に基づいて 101 から開始されます。しかし、0 から 100 が更新されたとしても、Append モードはそれらをカバーしなくなります。
最後に変更された、これはさらに悪いIMHOです。ソーステーブルには、行が最後に更新されたときを示すタイムスタンプフィールドが必要です。次に、タイムスタンプに基づいて、増分更新のインポートを行います。ソース テーブルにそのようなものがない場合、これは役に立ちません。
私の知る限り、これに対する完璧な解決策はありません。リアルタイム、トリガーの追加、またはflumeを使用して編集ログをスキャンし、HBaseをRT方式で更新し続けることに関心がある場合、これは厄介なことに聞こえます。または、Sqoop + Oozie を使用して、ソース テーブルを定期的に HBase にインポートします。RT または RT に近い応答さえありません。これまでのところ、他に何もないことを考えると、flume カスタム ソースに投票します。