次のような完全修飾名でhdfsにアクセスしたい:
hadoop fs -ls hdfs://machine-name:8020/user
また、単にhdfsにアクセスすることもできます
hadoop fs -ls /user
ただし、さまざまなディストリビューション(HDP、Cloudera、MapR ...など)で機能するはずのテストケースを作成しています。これには、修飾名を持つhdfsファイルへのアクセスが含まれます。
hdfs://machine-name:8020
がcore-site.xmlでfs.default.name
として定義されていることを理解しています。しかし、これはディストリビューションによって異なるようです。たとえば、hdfsはMapRのmaprfsです。 IBM BigInsightsには、core-site.xml
に$HADOOP_HOME/conf
もありません。
Hadoopがfs.default.name
で定義されていることをコマンドラインオプションで教えてくれる方法はないようです。
コマンドラインからfs.default.name
で定義された値を確実に取得するにはどうすればよいですか?
テストは常にnamenodeで実行されるため、マシン名は簡単です。しかし、ポート番号(8020)を取得するのは少し難しいです。 lsof、netstat ..を試しましたが、まだ信頼できる方法が見つかりませんでした。
Apache hadoop 2.7.0以降で使用可能なコマンドの下で、これはhadoop設定プロパティの値を取得するために使用できます。 fs.default.nameはhadoop 2.0で廃止され、fs.defaultFSは更新された値です。これがmaprfsの場合に機能するかどうかはわかりません。
hdfs getconf -confKey fs.defaultFS # ( new property )
または
hdfs getconf -confKey fs.default.name # ( old property )
Maprまたはhadoop 0.20 hadoopバージョンで構成プロパティ値を取得するために使用できるコマンドラインユーティリティがあるかどうかはわかりません。この状況の場合、構成プロパティに対応する値を取得するためにJavaで同じことを試してください。
Configuration hadoop conf = Configuration.getConf();
System.out.println(conf.get("fs.default.name"));
fs.default.nameは非推奨です。
つかいます : hdfs getconf -confKey fs.defaultFS
HDFS URIを探していたときに、この答えに出会いました。通常、それはnamenodeを指すURLです。 hdfs getconf -confKey fs.defaultFS
はネームサービスの名前を取得しますが、HDFS URIの作成には役立ちません。
代わりにネームノードのリストを取得するために以下のコマンドを試しました
hdfs getconf -namenodes
これにより、プライマリノード、セカンダリノードの順にすべてのネームノードのリストが表示されました。その後、HDFS URIの構築は簡単でした
hdfs://<primarynamenode>/
使用できます
hdfs getconf -confKey fs.default.name