笔者在hive1.x迁移旧数据到新集群时,使用了export表格的方式,但数据量大的表格会报一个DistCpOption类找不到的错误。探究了一下,数据量大的文件复制时hive会使用distcp的方式,每一个文件会跑一个mr任务,而不是fs -cp的方式,该方式的问题是需要把所有数据都传输到客户端而导致效率比较低。解决该问题有两种思路:
一、直接hadoop环境下的${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-distcp-2.6.0-cdh5.5.0.jar 包复制到hive 的HiveMetaStore进程所在机器的${HIVE_HOME}/lib目录下,然后重启HiveMetaStore进程及客户端进程。
二、直接复制旧hdfs上数据文件到新hdfs上,然后采用load data inpath的方式建立元数据信息。(新旧集群网络不通时,可以省略复制一步)