PowerShell を使用して、Azure Data Lake Storage Gen1 を既定のストレージとして使用する HDInsight クラスターを作成する

Azure PowerShell を使用して、Azure Data Lake Storage Gen1 を既定のストレージとして使用する Azure HDInsight クラスターを構成する方法について説明します。 Data Lake Storage Gen1 を追加のストレージとして使用する HDInsight クラスターの作成方法については、Data Lake Storage Gen1 を追加のストレージとして使用する HDInsight クラスターの作成に関するページを参照してください。

HDInsight で Data Lake Storage Gen1 を使用するための重要な考慮事項を次に示します。

  • 既定のストレージとしての Data Lake Storage Gen1 にアクセスできる HDInsight クラスターを作成するオプションは、HDInsight バージョン 3.5 および 3.6 で使用できます。

  • 既定のストレージとしての Data Lake Storage Gen1 にアクセスできる HDInsight クラスターを作成するオプションは、HDInsight Premium クラスターでは使用できません

PowerShell を使用して Data Lake Storage Gen1 を操作できるように HDInsight を構成するには、次の 5 つのセクションで示す手順に従います。

前提条件

注意

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

このチュートリアルを開始する前に、次の要件を満たしていることを確認します。

  • Azure サブスクリプション:Azure 無料試用版の取得に関するページをご覧ください。

  • Azure PowerShell 1.0 以上:PowerShell のインストールと構成の方法に関するページをご覧ください。

  • Windows ソフトウェア開発キット (SDK) :Windows SDK のインストール方法については、「Windows 10 用のダウンロードとツール」をご覧ください。 SDK は、セキュリティ証明書の作成に使用します。

  • Microsoft Entra サービス プリンシパル: このチュートリアルでは、Microsoft Entra IDでサービス プリンシパルを作成する方法について説明します。 ただし、サービス プリンシパルを作成するには、Microsoft Entra管理者である必要があります。 管理者である場合は、この前提条件をスキップしてチュートリアルを進めることができます。

    Note

    サービス プリンシパルは、Microsoft Entra管理者の場合にのみ作成できます。 Data Lake Storage Gen1を使用して HDInsight クラスターを作成するには、Microsoft Entra管理者がサービス プリンシパルを作成する必要があります。 「証明書を使用したサービス プリンシパルの作成」で説明しているように、サービス プリンシパルは証明書を使って作成する必要があります。

Azure Data Lake Storage Gen1 アカウントを作成する

Data Lake Storage Gen1 アカウントを作成するには、次の操作を行います。

  1. デスクトップで、PowerShell ウィンドウを開き、次のスニペットを入力します。 サインインを求められたら、サブスクリプションの管理者または所有者としてサインインします。

    # Sign in to your Azure account
    Connect-AzAccount
    
    # List all the subscriptions associated to your account
    Get-AzSubscription
    
    # Select a subscription
    Set-AzContext -SubscriptionId <subscription ID>
    
    # Register for Data Lake Storage Gen1
    Register-AzResourceProvider -ProviderNamespace "Microsoft.DataLakeStore"
    

    Note

    Data Lake Storage Gen1 リソース プロバイダーの登録時に Register-AzResourceProvider : InvalidResourceNamespace: The resource namespace 'Microsoft.DataLakeStore' is invalid のようなエラーが発生した場合は、サブスクリプションが Data Lake Storage Gen1 で承認されていない可能性があります。 Data Lake Storage Gen1 で Azure サブスクリプションを有効にするには、Azure portal で Azure Data Lake Storage Gen1 の概要に関するページを参照してください。

  2. Data Lake Storage Gen1 アカウントは、Azure リソース グループに関連付けられます。 まず、リソース グループを作成します。

    $resourceGroupName = "<your new resource group name>"
    New-AzResourceGroup -Name $resourceGroupName -Location "East US 2"
    

    出力は次のように表示されます。

    ResourceGroupName : hdiadlgrp
    Location          : eastus2
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp
    
  3. Data Lake Storage Gen1 アカウントを作成します。 指定するアカウント名には、小文字と数字のみを含める必要があります。

    $dataLakeStorageGen1Name = "<your new Data Lake Storage Gen1 name>"
    New-AzDataLakeStoreAccount -ResourceGroupName $resourceGroupName -Name $dataLakeStorageGen1Name -Location "East US 2"
    

    出力は次のように表示されます。

    ...
    ProvisioningState           : Succeeded
    State                       : Active
    CreationTime                : 5/5/2017 10:53:56 PM
    EncryptionState             : Enabled
    ...
    LastModifiedTime            : 5/5/2017 10:53:56 PM
    Endpoint                    : hdiadlstore.azuredatalakestore.net
    DefaultGroup                :
    Id                          : /subscriptions/<subscription-id>/resourceGroups/hdiadlgrp/providers/Microsoft.DataLakeStore/accounts/hdiadlstore
    Name                        : hdiadlstore
    Type                        : Microsoft.DataLakeStore/accounts
    Location                    : East US 2
    Tags                        : {}
    
  4. Data Lake Storage Gen1 を既定のストレージとして使用するには、クラスターの作成時にクラスター固有のファイルのコピー先となるルート パスを指定する必要があります。 ルート パス (このスニペットでは /clusters/hdiadlcluster) を作成するには、次のコマンドレットを使用します。

    $myrootdir = "/"
    New-AzDataLakeStoreItem -Folder -AccountName $dataLakeStorageGen1Name -Path $myrootdir/clusters/hdiadlcluster
    

Data Lake Storage Gen1 へのロールベースのアクセスの認証を設定する

すべての Azure サブスクリプションは、Microsoft Entra エンティティに関連付けられます。 Azure portalまたは Azure Resource Manager API を使用してサブスクリプション リソースにアクセスするユーザーとサービスは、最初に Microsoft Entra ID で認証する必要があります。 Azure のサブスクリプションやサービスにアクセス権を付与するには、Azure リソースに対する該当するロールを割り当てます。 サービスの場合、サービス プリンシパルはMicrosoft Entra IDでサービスを識別します。

このセクションでは、HDInsight のようなアプリケーション サービスに Azure のリソース (先ほど作成した Data Lake Storage Gen1 アカウント) へのアクセス権を付与する方法を説明します。 これを行うには、PowerShell を使用してアプリケーションのサービス プリンシパルを作成し、作成したサービス プリンシパルにロールを割り当てます。

Azure Data Lake Storage Gen1 の Active Directory 認証を設定するには、次の 2 つのセクションのタスクを実行します。

自己署名証明書の作成

このセクションの手順を進める前に、Windows SDK がインストールされていることを確認してください。 証明書の作成先となるディレクトリ (C:\mycertdir など) も作成しておく必要があります。

  1. PowerShell ウィンドウで、Windows SDK をインストールした場所 (通常は C:\Program Files (x86)\Windows Kits\10\bin\x86) に移動し、MakeCert ユーティリティを使用して、自己署名証明書と秘密キーを作成します。 次のコマンドを使用します。

    $certificateFileDir = "<my certificate directory>"
    cd $certificateFileDir
    
    makecert -sv mykey.pvk -n "cn=HDI-ADL-SP" CertFile.cer -r -len 2048
    

    秘密キーのパスワードを入力するよう求められます。 コマンドが正常に実行されると、指定した証明書ディレクトリに CertFile.cermykey.pvk が表示されます。

  2. Pvk2Pfx ユーティリティを使用して、MakeCert によって作成された .pvk ファイルと .cer ファイルを .pfx ファイルに変換します。 次のコマンドを実行します。

    pvk2pfx -pvk mykey.pvk -spc CertFile.cer -pfx CertFile.pfx -po <password>
    

    メッセージが表示されたら、先ほど指定した秘密キーのパスワードを入力します。 -po パラメーターに指定する値は、.pfx ファイルに関連付けられているパスワードです。 コマンドが正常に完了すると、指定した証明書ディレクトリに CertFile.pfx も表示されるはずです。

Microsoft Entra IDとサービス プリンシパルを作成する

このセクションでは、Microsoft Entra アプリケーションのサービス プリンシパルを作成し、サービス プリンシパルにロールを割り当て、証明書を指定してサービス プリンシパルとして認証します。 Microsoft Entra IDでアプリケーションを作成するには、次のコマンドを実行します。

  1. PowerShell コンソール ウィンドウで、次のコマンドレットを貼り付けます。 -DisplayName プロパティに指定する値は一意になるようにしてください。 -HomePage-IdentiferUris の値はプレースホルダー値であるため、確認されません。

    $certificateFilePath = "$certificateFileDir\CertFile.pfx"
    
    $password = Read-Host -Prompt "Enter the password" # This is the password you specified for the .pfx file
    
    $certificatePFX = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certificateFilePath, $password)
    
    $rawCertificateData = $certificatePFX.GetRawCertData()
    
    $credential = [System.Convert]::ToBase64String($rawCertificateData)
    
    $application = New-AzADApplication `
        -DisplayName "HDIADL" `
        -HomePage "https://contoso.com" `
        -IdentifierUris "https://contoso.com" `
        -CertValue $credential  `
        -StartDate $certificatePFX.NotBefore  `
        -EndDate $certificatePFX.NotAfter
    
    $applicationId = $application.ApplicationId
    
  2. アプリケーション ID を使用してサービス プリンシパルを作成します。

    $servicePrincipal = New-AzADServicePrincipal -ApplicationId $applicationId -Role Contributor
    
    $objectId = $servicePrincipal.Id
    
  3. Data Lake Storage Gen1 のルートと、先ほど指定したルート パス内のすべてのフォルダーに、サービス プリンシパルのアクセス権を付与します。 次のコマンドレットを使用します。

    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path / -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters -AceType User -Id $objectId -Permissions All
    Set-AzDataLakeStoreItemAclEntry -AccountName $dataLakeStorageGen1Name -Path /clusters/hdiadlcluster -AceType User -Id $objectId -Permissions All
    

Data Lake Storage Gen1 を既定のストレージとして使用する HDInsight Linux クラスターを作成する

このセクションでは、Data Lake Storage Gen1 を既定のストレージとして使用する HDInsight Hadoop Linux クラスターを作成します。 このリリースでは、HDInsight クラスターと Data Lake Storage Gen1 は同じ場所にある必要があります。

  1. サブスクリプションのテナント ID を取得し、後で使用するために保存します。

    $tenantID = (Get-AzContext).Tenant.TenantId
    
  2. 次のコマンドレットを使用して HDInsight クラスターを作成します。

    # Set these variables
    
    $location = "East US 2"
    $storageAccountName = $dataLakeStorageGen1Name    # Data Lake Storage Gen1 account name
        $storageRootPath = "<Storage root path you specified earlier>"     # e.g. /clusters/hdiadlcluster
        $clusterName = "<unique cluster name>"
    $clusterNodes = <ClusterSizeInNodes>            # The number of nodes in the HDInsight cluster
    $httpCredentials = Get-Credential
    $sshCredentials = Get-Credential
    
    New-AzHDInsightCluster `
           -ClusterType Hadoop `
           -OSType Linux `
           -ClusterSizeInNodes $clusterNodes `
           -ResourceGroupName $resourceGroupName `
           -ClusterName $clusterName `
           -HttpCredential $httpCredentials `
           -Location $location `
           -DefaultStorageAccountType AzureDataLakeStore `
           -DefaultStorageAccountName "$storageAccountName.azuredatalakestore.net" `
           -DefaultStorageRootPath $storageRootPath `
           -Version "3.6" `
           -SshCredential $sshCredentials `
           -AadTenantId $tenantId `
           -ObjectId $objectId `
           -CertificateFilePath $certificateFilePath `
           -CertificatePassword $password
    

    コマンドレットが正常に完了すると、クラスターの詳細を一覧表示する出力が表示されます。

Data Lake Storage Gen1 を使用する HDInsight クラスターでテスト ジョブを実行する

HDInsight クラスターを構成した後は、クラスターでテスト ジョブを実行し、クラスターが Data Lake Storage Gen1 に確実にアクセスできるかどうかをテストできます。 これを行うには、Data Lake Storage Gen1 (<クラスターのルート>/example/data/sample.log) に既にあるサンプル データを使用してテーブルを作成するサンプル Hive ジョブを実行します。

このセクションでは、作成した HDInsight Linux クラスターに Secure Shell (SSH) 接続し、サンプルの Hive クエリを実行します。

  1. 接続したら、次のコマンドを使用して Hive コマンド ライン インターフェイス (CLI) を開始します。

    hive
    
  2. CLI を使用して次のステートメントを入力し、サンプル データを使用して Data Lake Storage Gen1 内に vehicles という名前の新しいテーブルを作成します。

    DROP TABLE log4jLogs;
        CREATE EXTERNAL TABLE log4jLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string)
        ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
        STORED AS TEXTFILE LOCATION 'adl:///example/data/';
        SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
    

クエリの結果は SSH コンソールに出力されます。

Note

上の CREATE TABLE コマンドのサンプル データへのパスは adl:///example/data/ です。adl:/// にはクラスターのルートを指定します。 このチュートリアルで指定されたクラスターのルートの例に従うと、コマンドは adl://hdiadlstore.azuredatalakestore.net/clusters/hdiadlcluster になります。 短縮バージョンを使用するか、またはクラスター ルートへの完全なパスを指定できます。

HDFS コマンドを使用して Data Lake Storage Gen1 にアクセスする

Data Lake Storage Gen1 を使用するように HDInsight クラスターを構成したら、Hadoop 分散ファイル システム (HDFS) シェル コマンドを使用してストアにアクセスできます。

このセクションでは、作成した HDInsight Linux クラスターに SSH 接続し、HDFS コマンドを実行します。

接続したら、次の HDFS ファイル システム コマンドを使用して、Data Lake Storage Gen1 内のファイルを一覧表示します。

hdfs dfs -ls adl:///

hdfs dfs -put コマンドを使用して Data Lake Storage Gen1 にいくつかのファイルをアップロードし、hdfs dfs -ls を使用してファイルが正常にアップロードされたかどうかを確認することもできます。

関連項目