CDHバージョン違いによるWebHDFS設定

Hadoopクラスタを複数作っていたのですが,そのうち1つを,CDH4からCDH5にアップデートしました.後方互換性はあって欲しいを思っていたのですが,HDFSかProtocol Bufferのバージョンがダメでした.

CDH5からCDH4に向かってファイルをputするバッチがエラーを出しやがりました.

put: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).; Host Details : local host is: "cdh5server/192.168.1.3"; destination host is: "cdh4server":8020

putコマンドは,普通にこんな感じです.

hdfs dfs -put /tmp/hadoop/putfile.tsv hdfs://cdh4server/user/hadoop/putfile.tsv

しゃーないので,HTTPだったら互換性はあるだろうと思って,CDH5側からCDH4側に,putコマンドじゃなくてWebHDFS経由でファイルを転送することにしました.

上記のputコマンドに対応するコマンドはこうです.

curl -X PUT -L -x "" "http://cdh4nameserver:50070/webhdfs/v1/user/hadoop/putfile.tsv?op=create&user.name=hadoop" -T /tmp/hadoop/putfile.tsv

簡単にイケました.