このガイドでは、バッチ同期ノードを設定して、単一の E-MapReduce (EMR) Hive テーブルを MaxCompute にコピーする手順を説明します。データソースの設定、ネットワーク接続、ノードの設定、スケジューリングについて解説します。
制限事項
ソースデータを MaxCompute の外部テーブルに同期することはサポートされていません。
前提条件
開始する前に、以下が準備できていることを確認してください。
Hive データソースと MaxCompute データソース — 「データソース構成」をご参照ください。
リソースグループとデータソース間のネットワーク接続。詳細については、「ネットワーク接続ソリューション」をご参照ください。
説明パブリックエンドポイントを使用して専用リソースグループを EMR に接続する場合、EMR クラスターのセキュリティグループルールを設定して、専用リソースグループの Elastic IP アドレス (EIP) からのインバウンドアクセスを許可する必要があります。インバウンドルールでは、ポート 10000、9093、および 8020 を開く必要があります。
ステップ 1: ノードの作成とタスクの設定
ノードを作成し、コードレス UI を使用する一般的な手順については、「コードレス UI でのタスク設定」をご参照ください。
ステップ 2: データソースと送信先の設定
データソース (Hive) の設定
読み取りメソッドの選択
2 つの読み取りメソッドが利用可能です。行フィルタリングやビューのサポートが必要かどうかに基づいて選択してください。
| HDFS | JDBC | |
|---|---|---|
| 仕組み | Hive Reader は Hive Metastore にアクセスして、テーブルの HDFS ファイルパス、フォーマット、デリミタを取得し、Hadoop 分散ファイルシステム (HDFS) ファイルから直接データを読み取ります。 | Hive Reader は Hive JDBC クライアントを介して HiveServer2 に接続し、SQL を使用してデータを読み取ります。 |
| パフォーマンス | より高い | Lower — MapReduce プログラムを生成します |
| 条件付きフィルタリング (`where` 句) | サポートされていません | サポートされています |
| ビューの読み取り | サポートされていません | サポートされています |
| UI ラベル | HDFS ファイルからデータを読み取ります。 | Hive JDBC を使用してデータを読み取ります (条件付きフィルタリングをサポート)。 |
フィルタリングが不要で最大のスループットが必要な場合は HDFS を使用してください。where 句でフィルタリングする必要がある場合や、Hive ビューから読み取る必要がある場合は JDBC を使用してください。
主要なパラメーター
| パラメーター | 説明 | 必須 |
|---|---|---|
| Hive 読み取り方法 | [HDFS ファイルからデータを読み取る] または [Hive JDBC を使用してデータを読み取る (条件付きフィルタリングをサポート)] のいずれかを選択します。上記の比較表をご参照ください。 | はい |
| テーブル | 同期する Hive テーブルを選択します。UI には開発環境のテーブルとスキーマのみが表示されます。テーブルスキーマが開発環境と本番環境で完全に一致していることを確認してください。一致しない場合、本番環境でタスクが失敗し、「table not found」または「column not found」といったエラーが発生する可能性があります。 | はい |
| Parquet スキーマ | Hive テーブルが Parquet フォーマットで保存されている場合に必須です。 | 条件付き |
データ送信先 (MaxCompute) の設定
次の表に記載されていないパラメーターは、デフォルト値のままで問題ありません。
| パラメーター | 説明 | 必須 |
|---|---|---|
| トンネルリソースグループ | データ転送に使用される MaxCompute トンネルクォータです。デフォルト値は パブリックトランスポートリソース(MaxCompute が提供する無料クォータ)です。支払い遅延や有効期限切れなどにより専用トンネルクォータが利用不可となった場合、タスクは実行時に自動的に パブリックトランスポートリソース へ切り替わります。 | はい |
| テーブル | 対象となる MaxCompute テーブルを選択します。標準的な DataWorks ワークスペースでは、開発環境および本番環境の両方で、同一の名前と整合性のあるスキーマを持つテーブルが存在している必要があります。また、送信先テーブルスキーマの生成 をクリックすることで、システムが自動的にテーブルを作成します。必要に応じて、テーブル作成文を調整してください。 | はい |
| パーティション情報 | 送信先テーブルがパーティション化されている場合に必須です。固定値(例:ds=20220101)またはスケジューリングパラメーター(例:ds=${bizdate})を入力します。システムは実行時にスケジューリングパラメーターを置き換えます。 | 条件付き |
| 書き込み方法 | 上書き を選択すると既存のデータが置き換えられ、追加 を選択すると既存のデータに追加されます。 | はい |
送信先テーブルに関する以下の一般的な問題にご注意ください。
開発環境にテーブルが存在しない場合、送信先テーブルのドロップダウンリストには表示されません。
本番環境にテーブルが存在しない場合、発行後に同期タスクは失敗します。
開発環境と本番環境でテーブルスキーマが異なる場合、スケジュールされた実行時の列マッピングが設定されたマッピングから逸脱し、誤ったデータ書き込みを引き起こす可能性があります。
ステップ 3: タスクの設定と検証
フィールドマッピング:[同じ名前のフィールドをマッピング] または [同じ行のフィールドをマッピング] を使用して、列を自動でマッピングします。ソースと送信先でフィールドの順序または名前が異なる場合は、マッピングを手動で調整します。
チャネル制御: データ品質を保護するために、[ダーティデータレコードのポリシー] をダーティデータを拒否するように設定します。最初は他のパラメーターをデフォルトのままにしておきます。
ステップ 4: タスクのデバッグ
バッチ同期ノードの構成ページの右側で、[実行構成] をクリックします。デバッグ実行用に [リソースグループ] およびスクリプトパラメーターを設定し、上部ツールバーの [実行] をクリックして、同期パイプラインが正常に実行されることを確認します。
送信先テーブルに対してスポットチェッククエリを実行します。
左側のナビゲーションウィンドウで、
をクリックし、次に 個人ディレクトリ の右側にある
をクリックして、.sql拡張子のファイルを作成します。次のクエリを実行し、結果が期待通りであることを確認します。
説明この方法でデータをクエリするには、送信先 MaxCompute プロジェクトを DataWorks のコンピューティングリソースとしてバインドします。
.sqlファイルの編集ページの右側で、[実行設定] をクリックし、タイプ、[コンピューティングリソース]、およびリソースグループ を指定してから、上部のツールバーの[実行] をクリックします。SELECT * FROM <your_maxcompute_destination_table> WHERE pt=<your_partition> LIMIT 20;
ステップ 5: タスクのスケジューリングと発行
バッチ同期ノードの右側で、[スケジュール設定] をクリックします。「スケジュール設定の構成」で説明されている通り、定期実行パラメーターを構成します。その後、上部ツールバーの [公開] をクリックし、画面上の指示に従って タスクを公開する を実行します。