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