0

Google Cloud Storage を永続データのバックエンドとして使用して、Google Cloud Platform で Hadoop クラスタを実行しています。リモート マシンからマスター ノードに SSH で接続し、hadoop fs コマンドを実行できます。とにかく、次のコードを実行しようとすると、タイムアウト エラーが発生します。

コード

FileSystem hdfs =FileSystem.get(new URI("hdfs://mymasternodeip:8020"),new Configuration());
Path homeDir=hdfs.getHomeDirectory();
//Print the home directory
System.out.println("Home folder: " +homeDir); 

// Create a directory
Path workingDir=hdfs.getWorkingDirectory();
Path newFolderPath= new Path("/DemoFolder");

newFolderPath=Path.mergePaths(workingDir, newFolderPath);
if(hdfs.exists(newFolderPath))
    {
        hdfs.delete(newFolderPath, true); //Delete existing Directory
    }
//Create new Directory
hdfs.mkdirs(newFolderPath); 

hdfs.exists() コマンドを実行すると、タイムアウト エラーが発生します。

エラー

org.apache.hadoop.net.ConnectTimeoutException: gl051-win7/192.xxx.1.xxx から 111.222.333.444.bc.googleusercontent.com:8020 への呼び出しがソケット タイムアウト例外で失敗しました: org.apache.hadoop.net.ConnectTimeoutException : チャネルの接続準備が整うまでの待機中に 20000 ミリ秒のタイムアウトが発生しました。ch : java.nio.channels.SocketChannel[connection-pending remote=111.222.333.444.bc.googleusercontent.com/111.222.333.444:8020]

Google Cloud Platform 上の Hadoop に対して Java Hadoop API を使用する際の制限を認識していますか?

ありがとう!

4

1 に答える 1

0

ローカル マシンでそのコードを実行し、Google Compute Engine VM に接続しようとしているようです。デフォルトでは、GCE には厳密なファイアウォール設定があり、外部 IP アドレスが任意のインバウンド接続にさらされることを回避しています。デフォルトを使用している場合、Hadoop クラスタは「デフォルト」GCE ネットワーク上にある必要があります。これを機能させるには、ファイアウォールの追加の手順に従って、ポート 8020 で受信 TCP 接続を許可し、他の Hadoop ポートでもローカル IP アドレスからの接続を許可する必要があります。次のようになります。

gcloud compute firewall-rules create allow-http \
    --description "Inbound HDFS." \
    --allow tcp:8020 \
    --format json \
    --source-ranges your.ip.address.here/32

Hadoop はこれらの着信要求に対して認証または承認を行っていないため、ソース範囲を開くことは本当に避けたいことに注意してください。0.0.0.0/0ダイヤルインする予定のインバウンド IP アドレスのみにできるだけ制限する必要があります。Hadoop への接続に使用する機能に応じて、他のいくつかのポートも開く必要がある場合があります。

より一般的な推奨事項は、可能な限り Hadoop クラスター自体でコードを実行することです。その場合、外部 IP ではなく、マスター ホスト名自体を HDFS オーソリティとして使用します。

hdfs://<master hostname>/foo/bar

そうすれば、ポートの公開を SSH ポート 22 だけに制限できます。ここでは、着信トラフィックは SSH デーモンによって適切にゲートされます。コードは、どのポートが開いているか、または IP アドレスの処理について心配する必要さえありません。全て。

于 2015-06-30T23:40:27.133 に答える