Help us understand the problem. What is going on with this article?

Azure Managed Identityを利用してAzure Data Lake Gen2にhdfsコマンドからアクセスする

動機

  • azureのVM上から 使い慣れたhdfsクライアントコマンドを使って azure data lake gen2 にアクセスしたい。
  • data lake のIDとパスワードはazureVM上に保管したくない。

参考サイト

https://iwasakims.github.io/trunk/hadoop-project/hadoop-azure/abfs.html
https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview
https://stackoverflow.com/questions/54155248/for-an-azure-app-service-with-a-managed-identity-how-to-retrieve-the-client-id

作戦

VMの managed identityを有効にすると、あたかもユーザーと同じようにVMにロールを割り当てることができる。

手順

VMの設定

Managed Identityの設定

  • ここではUbuntu18.04のVMを立てた。名前をbizvm1とした。
  • identity > system assigned から Status をON にする。 スクリーンショット 2019-09-08 23.22.09.png
  • bizvmにsshしてログイン

hdfsコマンドのダウンロード

vmの中に入って作業

  • ここからhadoop 3.2.0(バージョン注意!!!) コマンドのバイナリをダウンロードして展開 https://hadoop.apache.org/releases.html
    • /YOUR/DOWNLOAD/PATHに展開したとする。
  • Java8のインストール sudo apt install openjdk-8-jre-headless
  • 環境変数の設定 以下を~/.bash_profileに付け足す
export PATH=$PATH:/YOUR/DOWNLOAD/PATH/hadoop-3.2.0/bin
export JAVA_HOME=/usr
export HADOOP_OPTIONAL_TOOLS=hadoop-azure
export HADOOP_HOME=/YOUR/DOWNLOAD/PATH/hadoop-3.2.0

特にexport HADOOP_OPTIONAL_TOOLS=hadoop-azureを忘れると動かない。

data lake gen2の設定

  • azure data lake gen2のStorageAccountを建てる。名前をshumpeidatalakegen2とした。作るときにhieralhical name spaceをONにすること。
  • storageのAccessControl > Add > Add role assignmentを選択
    • Role: Storage Blob DataOwner
    • Assign access to: virtual machine
    • Subscription: VMの入っているサブスクリプション
    • select: さっき作ったVMの名前を入れると候補が出てくるのでクリック

スクリーンショット 2019-09-08 23.40.58.png

Active Directoryから設定値の取得

TenanatIDの取得

AzureActiveDirectory > Properties > DirectoryIDを控える。これがTenantIDと呼ばれるものらしい。

スクリーンショット 2019-09-08 23.58.40.png

Application IDの取得

さっき作ったVMのApplicationIDを取得する。

AzureActiveDirectory > Enterprise application > 右上のApplicationTypeをAllApplicationを選択(ここ重要!!) > さっき作ったVMの名前 > Properties > ApplicationIDを控える

スクリーンショット 2019-09-08 23.37.44.png

スクリーンショット 2019-09-08 23.37.59.png

hdfsコマンドの設定

ここでまたVMにログインして設定

$HADOOP_HOME/etc/hadoop/core-site.xmlに以下を記入

<configuration>
<property>
  <name>fs.azure.account.auth.type</name>
  <value>OAuth</value>
  <description>
  Use OAuth authentication
  </description>
</property>
<property>
  <name>fs.azure.account.oauth.provider.type</name>
  <value>org.apache.hadoop.fs.azurebfs.oauth2.MsiTokenProvider</value>
  <description>
  Use MSI for issuing OAuth tokens
  </description>
</property>
<property>
  <name>fs.azure.account.oauth2.msi.tenant</name>
  <value>さっき控えたTenantIDの値</value>
  <description>
  Optional MSI Tenant ID
  </description>
</property>
<property>
  <name>fs.azure.account.oauth2.client.id</name>
  <value>さっき控えたApplicationID</value>
  <description>
  Optional Client ID
  </description>
</property>
</configuration>

これでやっと準備が整った

HDFSコマンド実行

hdfs dfs -ls abfss://testfilesystem@shumpeidatalakegen2.dfs.core.windows.net/

できたー。長かった。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away