Hadoopでトラフィックが多いと言われたのでtcpdump使って調べてみた

8:20から9時ぐらいまで断続的にoutboundトラフィックが増えてなんでだろって思ったのでtcpdumpしてみた。

やり方は下記参照
定期的にtcpdumpをある期間だけ実行したいという時 - その手の平は尻もつかめるさ

Hadoopのdatanodeマシンを一つ使って以下のようにcronに仕込んでみた。

20 8 * * * /usr/sbin/tcpdump -w /data1/\%Y\%m\%d\%H\%M\%S.pcap -W1 -G300 > /data1/tcpdump.log

どれだけキャプチャするかは迷った。あんまり短いとわからないだろうし、かといって長すぎるとdiskを圧迫するから。

平常時に試しに1分でやったら378MBだったけど、トラフィックがはねているときだと予想がつかなかったのでとりあえず5分にして出力先は比較的容量があるdatanodeのHDFSがあるパーティションにした。

最悪でもdatanodeが1台ぽしゃるだけだからまあ大丈夫だろうと予想しました。

5分でやったところ結果は44GBでした。注意点としては、僕の環境、CentOS7ではrootじゃないと実行できなかったですね。

あと結果を分割するのにtcpsliceがうまく動かなかったのでtcpdumpで下記のように1GB単位で分割しました。

tcpdump -r 20171127082001.pcap -w /data1/work/aaa -C 1000

これも最初パーミッションで怒られたので/data1/workを777にしました。

あとは/data1/work/aaa1, /data1/work/aaa2みたいにファイルが分割されるのでこれをwiresharkにくわせました。

wiresharkの統計 -> HTTP -> 要求をみると/webhdfs/v1/apps/hive/warehouse/hoge.db/piyo/yyyymmdd=20140101/...みたいなリクエストがあってどうもパーティション指定せずに全期間scanしちゃってるっぽいのでこれが原因かなと。うちの環境だとhiveのexternalでwebhdfs使ってるんですよね。

そんな感じです。