2017-11-29 1 views
0

Hadoopバージョン2.8.2を実行していて、WebHDFSクライアントアプリケーションのOAuth 2クライアント資格認可フローを設定しようとしています。私はここに書かれたガイダンスに従った:WebHDFS REST API。このページでOAuth2を検索して、WebHDFS用のOAuth 2の設定に関するセクションを見つけてください。ここでHadoop WebHDFSでOAuth2を有効にする方法

私はHDFS-site.xmlのに追加のOAuth 2つのプロパティされています

<!-- OAuth2 properties --> 
    <property> 
    <name>dfs.webhdfs.oauth2.enabled</name> 
    <value>true</value> 
    </property> 
    <property> 
    <name>dfs.webhdfs.oauth2.access.token.provider</name> 
    <value>org.apache.hadoop.hdfs.web.oauth2.ConfCredentialBasedAccessTokenProvider</value> 
    </property> 
    <property> 
    <name>dfs.webhdfs.oauth2.client.id</name> 
    <value>webHdfsClient</value> 
    </property> 
    <property> 
    <name>dfs.webhdfs.oauth2.credential</name> 
    <value>secret</value> 
    </property> 
    <property> 
    <name>dfs.webhdfs.oauth2.refresh.url</name> 
    <value>https://<hostname:port of OAuth 2 token endpoint></value> 
    </property> 

をここに私のコア-site.xmlのには、私はのOAuth2の設定に関連するかもしれないと考えているプロパティは次のとおりです。

<property> 
    <name>hadoop.http.authentication.simple.anonymous.allowed</name> 
    <value>false</value> 
    </property> 
    <property> 
    <name>hadoop.http.authentication.type</name> 
    <value>simple</value> 
    </property> 

匿名認証が許可されていない可能性があります。ドキュメントによると、 "シンプル"を使用するには、ウェブコンソール経由でWebHDFSに初めてアクセスするときに、user.name = のユーザ名をクエリ文字列パラメータとして含める必要があります。私はシンプルなものを使うことは、OAuthを使ってWebHDFSに接続するクライアントアプリケーションの認証とは何の関係もないと思いますが、それが役割を果たすのならば言及する必要があります。

次に、WebHDFSエンドポイントにアクセスするJavaクライアントアプリケーションを作成しました。 WebHDFSエンドポイントとトークン管理サーバーの両方がHTTPSプロトコルを使用して待機するように、SSL用のWebHDFSを構成しました。

public static void main(String[] args) throws IOException { 
    Configuration conf = new Configuration(); 
    conf.set("fs.defaultFS","swebhdfs://hdserver.local:44305"); 
    FileSystem fs = FileSystem.get(conf); 

    FileStatus[] fsStatus = fs.listStatus(new Path("/")); 

    for(int i = 0; i < fsStatus.length; i++) { 
     System.out.println(fsStatus[i].getPath().toString()); 
    } 
} 

これは私が私からのベアラ・トークンを取得することを必要とせず、適切に返します。ここでは

は、私は私のWebHDFSエンドポイント(hdserver.local)のルートにアクセスするために書いた小さなJavaアプリケーションの主要な方法であり、認証のためにWebHDFSに送信します。コールが失敗し、私のコールが許可されていないか、リクエストでベアラトークンが失われていると伝えられました。私が間違っていた場所を教えてください。

答えて

0

hadoop.http.authentication.typeとhadoop.http.authentication.simple.anonymous.allowedの設定は、web consoles of Hadoop(JobTracker、NameNodeなど)にのみ関連しています。 WebHDFSは、httpを超えていても、これらの設定と直交していません。はい、これは混乱しています。

その他の設定は正しく表示されます。 NameNodeログで有効になっているoauth2構成を確認できましたか?

+0

いいえ、Namenodeログには、コードに追加されたログメッセージは表示されません。たとえば、WebHdfsFileSystemクラスがこのメッセージを記録していることがわかります。情報レベルの「WebHDFSでOAuth2を有効にする」ただし、私のNamenodeログにはこのメッセージは含まれていません。私もOAuth2とOAuthの検索を行い、0回の出現を思いついた。 – ewilan

関連する問題