双六工場日誌

平凡な日常を淡々と綴ります。

Hadoop TaskTracker のreport portを固定

HadoopのTaskTrackerを管理するときに、再起動するとJobTrackerへのレポートポートが代わって、別のインスタンスとして認識されて二重登録になるし、rpcメトリクスもポートが変わるたびに別集計になっちゃうし、うまく整理できないかなと思っていたら、単に「mapred.task.tracker.report.port」を設定すればポートを固定できるとのこと。なので、デフォルトポートである「50050」を明示的に設定。(追記:50050は、サンプルで出ていたポート名でデフォルトではないようです。すみません。。。)

http://lucene.472066.n3.nabble.com/how-to-start-tasktracker-only-on-single-port-td3506144.html

デフォルト値があっても、ポートが変化しちゃうから仕方ないのかなー、と思っていたら明示的に指定すれば固定できるみたい。

ぱっと試したところ、自分の環境ではOK。JobTrackerへの登録時のポートが固定になって、再起動時に二重登録にならない以外は副作用もなさそう。

メトリクスに紐づいているポートが固定になっているのを以下で確認。

$ curl localhost:50060/metrics

結果抜粋

rpc
  detailed-metrics
    {hostName=vm-datanode02.sechiro.local,port=50050}:
      getProtocolVersion_avg_time=0
      getProtocolVersion_num_ops=0
  metrics
    {hostName=vm-datanode02.sechiro.local,port=50050}:
      NumOpenConnections=0
      ReceivedBytes=0
      RpcProcessingTime_avg_time=0
      RpcProcessingTime_num_ops=0
      RpcQueueTime_avg_time=0
      RpcQueueTime_num_ops=0
      SentBytes=0
      callQueueLen=0
      rpcAuthenticationFailures=0
      rpcAuthenticationSuccesses=0
      rpcAuthorizationFailures=0
      rpcAuthorizationSuccesses=0

設定が効いているのを確認。

$ curl -sG localhost:50060/conf | grep report.port
<property><!--Loaded from mapred-site.xml--><name>mapred.task.tracker.report.port</name><value>50050</value></property>

/confにアクセスすると、その時にデーモンに読み込まれている設定値が取得できるので、設定が反映されたか確認するのに便利。頻繁に設定変更してチューニングするときには、これをログにとっておくと設定のエビデンスにもなる。