29 Microsoft Azure Data Lake Gen 2への接続

Microsoft Azure Data Lake Gen 2は、Hadoopクライアントを介したデータのストリーミングをサポートしています。このため、Oracle GoldenGate for Big Data HDFSハンドラを使用するか、ファイル・ライター・ハンドラをHDFSイベント・ハンドラと組み合せて使用して、データ・ファイルをAzure Data Lake Gen 2に送信できます。

Azure Data Lake Gen 2への接続には、Hadoop 3.3.0 (以降)の使用をお薦めします。Hadoop 3.3.0には、ファイルを閉じるときにabfssスキームを使用してAzureイベントを正しく起動するための重要な修正が含まれています。詳細は、Hadoop Jira issue Hadoop-16182を参照してください。

ファイル・ライター・ハンドラは、HDFSイベント・ハンドラと組み合せて使用します。これは、Azure Data Lake Gen 2への収集に推奨されるメカニズムです。

前提条件

第1部:

  1. Azure Data Lake Gen 2への接続では、AzureポータルでAzure Data Lake Gen 2アカウントが正しくプロビジョニングされていることを想定しています。

    Azure portalから、「ストレージ アカウント」を選択します。このコマンドは、ストレージ・アカウントの表示/作成/削除の左側にあります。

    Azure Data Lake Gen 2のプロビジョニング・プロセスでは、「詳細」タブで階層型名前空間を有効にすることをお薦めします。

    Azureストレージ・アカウントの階層型名前空間を有効にすることは必須ではありません。

  2. ストレージ・アカウントに接続するためにWebアプリ/APIの「アプリの登録」が作成されていることを確認します。

    Azureポータルの左側のコマンドのリストから、「すべてのサービス」を選択し、フィルタ・コマンド・ボックスに「アプリ」と入力し、フィルタされたサービスのリストから「アプリの登録」を選択します。「Web アプリ/API」タイプの「アプリの登録」を作成します。

    Azure Storageにアクセスするための権限を追加します。アプリの登録をAzureアカウントに割り当てます。アプリの登録のキーを生成します。

    生成されるキー文字列はクライアント・シークレットであり、キーの作成時にのみ表示されます。このため、生成されたキー文字列を記録してください。

第2部:

  1. Azure Data Lake Gen 2アカウントで、「アプリの登録」にアクセス権が付与されていることを確認します。

    Azureポータルで、左側のパネルから「ストレージ アカウント」を選択します。作成したAzure Data Lake Gen 2アカウントを選択します。

    「アクセス制御 (IAM)」コマンドを選択して、「アクセス制御 (IAM)」パネルを表示します。「ロールの割り当て」タブを選択し、作成したアプリの登録にロールの割当てを追加します。

    ストレージ・アカウントに割り当てられたアプリの登録には、Azureストレージ・アカウントへの読取りおよび書込みアクセスが必要です。

    Azure組込みロールStorage Blob Data Contributorまたは必要な権限を持つカスタム・ロールのいずれかを使用できます。
  2. Azure Data Lake Gen 2への接続は、プロキシ・サーバーを介してルーティングできます。
    これを有効にするには、Javaブート・オプションに3つのパラメータを設定する必要があります。
    javawriter.bootoptions=-Xmx512m 
    -Xms32m -Djava.class.path=ggjava/ggjava.jar 
    -DproxySet=true 
    -Dhttps.proxyHost={insert your proxy server} 
    -Dhttps.proxyPort={insert your proxy port}
  3. Azure Data Lake Gen 2に対しては2つの接続スキーム(abfsおよびabfss)がサポートされています。

    abfssではHTTPSコールを使用することによってセキュリティおよびペイロードの暗号化が提供されるため、推奨される方法はabfssです。

Microsoft Azure Data Lakeへの接続 2

Oracle GoldenGate for Big DataからMicrosoft Azure Data Lake 2に接続するには、次の手順に従います。

  1. http://hadoop.apache.org/releases.htmlからHadoop 3.3.0をダウンロードします。
  2. ファイルを一時ディレクトリで解凍します。たとえば、/usr/home/hadoop/hadoop-3.3.0
  3. Java 8を指すように{hadoop install dir}/etc/hadoop/hadoop-env.shファイルを編集し、Azure HadoopライブラリをHadoopクラスパスに追加します。hadoop-env.shファイルのエントリは次のとおりです。
    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_202
    export HADOOP_OPTIONAL_TOOLS="hadoop-azure"
  4. プライベート・ネットワークでは、パブリック・インターネットにアクセスするために、プロキシ・サーバーを介したルーティングが必要になることがよくあります。そのため、Azureへの接続をテストするには、hadoopコマンドライン・ユーティリティのプロキシ・サーバー設定を構成する必要がある場合があります。プロキシ・サーバー設定を構成するには、hadoop-env.shファイルで次のように設定します。
    export HADOOP_CLIENT_OPTS="
    -Dhttps.proxyHost={insert your proxy server} 
    -Dhttps.proxyPort={insert your proxy port}"

    ノート:

    これらのプロキシ設定は、hadoopコマンドライン・ユーティリティでのみ機能します。Oracle GoldenGate for Big DataがAzureに接続するためのプロキシ・サーバー設定は、ここで説明されているように、javawriter.bootoptionsで設定されます。
  5. {hadoop install dir}/etc/hadoop/core-site.xmlファイルを編集し、次の構成を追加します。
    <configuration>
    <property>
      <name>fs.azure.account.auth.type</name>
      <value>OAuth</value>
    </property>
    <property>
      <name>fs.azure.account.oauth.provider.type</name>
      <value>org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider</value>
    </property>
    <property>
      <name>fs.azure.account.oauth2.client.endpoint</name>
      <value>https://login.microsoftonline.com/{insert the Azure instance id here}/oauth2/token</value>
    </property>
    <property>
      <name>fs.azure.account.oauth2.client.id</name>
      <value>{insert your client id here}</value>
    </property>
    <property>
      <name>fs.azure.account.oauth2.client.secret</name>
      <value>{insert your client secret here}</value>
    </property>
    <property>
      <name>fs.defaultFS</name>
      <value>abfss://{insert your container name here}@{insert your ADL gen2 storage account name here}.dfs.core.windows.net</value>
    </property>
    <property>
      <name>fs.azure.createRemoteFileSystemDuringInitialization</name>
      <value>true</value>
    </property>
    </configuration>

    AzureインスタンスIDを取得するには、Microsoft Azureポータルに移動します。左側のリストから「Azure Active Directory」を選択し、「Azure Active Directory」パネルを表示します。「Azure Active Directory」パネルで「プロパティ」を選択し、Azure Active Directoryのプロパティを表示します。AzureインスタンスIDは、「ディレクトリ ID」とマークされているフィールドです。

    AzureクライアントIDとクライアント・シークレットを取得するには、Microsoft Azureポータルに移動します。左側のリストから「すべてのサービス」を選択し、Azureサービスのリストを表示します。フィルタ・コマンド・ボックスに「アプリ」と入力し、リストされたサービスから「アプリの登録」を選択します。作成した「アプリの登録」を選択して、Azure Storageにアクセスします。「アプリの登録」に表示されるアプリケーションIDは、クライアントIDです。クライアント・シークレットは、新しいキーが追加されたときに生成されるキー文字列です。この生成されたキー文字列は、キーの作成時に1回のみ表示されます。生成されたキー文字列がわからない場合は、別のキーを作成し、生成されたキー文字列を確実に取得してください。

    ADL gen 2アカウント名は、Azure ADL gen 2アカウントを作成したときに生成したアカウント名です。

    ファイル・システムは、Azure Data Lake Gen 2ストレージ・アカウント内のサブ・パーティションです。次のHadoop構成が設定されている場合にのみ、新しいファイル・システムをその場で作成してアクセスできます。

    <property>
      <name>fs.azure.createRemoteFileSystemDuringInitialization</name>
      <value>true</value>
    </property>
  6. Hadoopシェル・コマンドを使用して接続性を検証します。
    ./bin/hadoop fs -ls /
    ./bin/hadoop fs -mkdir /tmp
  7. HDFSイベント・ハンドラを使用してAzure Data Lakeにデータをプッシュするように、HDFSハンドラまたはファイル・ライター・ハンドラのいずれかを構成します。ファイル・ライター・ハンドラの使用を参照してください。ファイル・ライター・ハンドラをHDFSイベント・ハンドラとともに使用することをお薦めします。

    gg.classpathの設定の例を次に示します。

    gg.classpath=/ggwork/hadoop/hadoop-3.3.0/share/hadoop/common/*:/ggwork/hadoop/hadoop-3.3.0/share/hadoop/common/lib/*:/ggwork/hadoop/hadoop-3.3.0/share/hadoop/hdfs/*:
    /ggwork/hadoop/hadoop-3.3.0/share/hadoop/hdfs/lib/*:/ggwork/hadoop/hadoop-3.3.0/etc/hadoop/:/ggwork/hadoop/hadoop-3.3.0/share/hadoop/tools/lib/*

https://hadoop.apache.org/docs/current/hadoop-azure-datalake/index.htmlを参照してください。