忙着做hadoop 1.x 到 2.x 的資料遷移.
hadoop 系統提供 了一個 指令 distcp 可以跨版本 遷移資料.
具體的指令格式: 在新的hadoop 版本上執行 .
兩個叢集間的所有的主機hosts 檔案裡要把對方的叢集節點的主機名配置上去. 因為是mapreduce 作業,不然會job 失敗.
在 hadoop 2.x 上執行 .
hadoop distcp hftp://hadoop1.x-namenode:50070/xxxx/xxx/xxx* /path-to-hadoop2.x/xxx/xxx
注意這裡用的hftp 協定 ,不是hdfs 協定, hdfs 協定兩邊不通的.
如果你 hadoop 2.x 是預設安裝的 還有個地方需要修改 , 不然會封包件校驗 checksum 報錯. 無法複制.
hadoop 1.x 的檔案校驗用的crc32
hadoop 2.x 的檔案校驗用的CRC32C 兩個版本的hadoop 的校驗方法不同,會報錯.無法遷移資料.
在hadoop 2.x hdfs-site.xml 裡增加 一個配置.
<property>
<name>dfs.checksum.type</name>
<value>CRC32</value>
<description>
when transfer data from hadoop 1.x to hadoop 2.x the data block checksum in hadoop 1.x is crc32
and hadoop 2.x is crc32c . transfer data will fail .
</description>
</property>
然後就ok 了.