1

私は、HadoopまたはHBaseが誤動作する原因となる奇妙な(私が理解しているように)DNSサーバーを備えたネットワークを持っています。

それは私のホスト名を私のマシンが知らないアドレスに解決します(つまり、そのようなインターフェースはありません)。

/ etc / hostsに次のエントリがある場合、Hadoopは機能します。

127.0.0.1     localhost
127.0.1.1     myhostname

エントリ「127.0.1.1myhostname」が存在しない場合、HDFSへのファイルのアップロードは失敗し、ファイルを1ではなく0のデータノードにしか複製できないと文句を言います。

ただし、この場合、HBaseは機能しません。HBaseシェルからテーブルを作成すると、NotAllMetaRegionsOnlineExceptionが発生します(実際には、HMasterがmyhostnameのDNSサーバーから返された間違ったアドレスにバインドしようとしたことが原因です)。

他のネットワークでは、次の/ etc/hostsを使用しています。

127.0.0.1   localhost
192.168.1.1 myhostname

そして、HadoopとHBaseの両方が機能します。問題は、2番目のネットワークではアドレスが動的であり、奇妙なDNSによって返される結果を上書きするために/ etc/hostsにリストできないことです。

Hadoopは疑似分散モードで実行されます。HBaseも単一ノードで実行されます。

DNSサーバーの動作を変更することはできません。hbase / conf/regionserversで「localhost」を127.0.0.1に変更しても何も変更されません。

誰かがインターネット接続を維持しながらその動作をオーバーライドする方法を提案できますか(私は実際にはTeamviewerを介してクライアントのマシンで作業します)。または、バインドするアドレスを決定するためにホスト名を使用しないようにHBase(またはそれが管理しているZookeeper)を構成する方法はありますか?

4

2 に答える 2

5

幸い、このDNSサーバーの問題の回避策を見つけました。

ローカルホスト名で照会すると、DNSサーバーが無効なアドレスを返しました。HBaseはデフォルトで、ローカルホスト名のDNSルックアップを逆引きして、バインドする場所を決定します。DNSサーバーから返されたアドレスが無効だったため、HMasterはバインドできませんでした。

回避策:hbase / conf / hbase-site.xmlで、マスターとリージョンサーバーに使用されるインターフェースを明示的に指定します。

<configuration>
  <property>
    <name>hbase.master.dns.interface</name>
    <value>lo</value>
  </property>
  <property>
    <name>hbase.regionserver.dns.interface</name>
    <value>lo</value>
  </property>
</configuration>

この場合、マスターとリージョンサーバーの両方に使用されるループバックインターフェイス(lo)を指定しました。

于 2011-10-29T22:31:33.033 に答える
1

DNSの問題をチェックするために書いたシンプルなツール: https ://github.com/sujee/hadoop-dns-checker

于 2012-07-26T19:11:02.597 に答える