Sqoop 数据迁移 Sqoop 底层还是运行在MapReduce上,通过Yarn进行调度的,只是Sqoop在做数据迁移过程中,只用到了MapTask,没有用到ReduceTask。 Sqoop 是一个数据迁移工具,可以理解为客户端程序,提供HDFS/Hive/HBase 到 RDS(Oracle,Postgrel,MySql等) 数据的导入导出 Sqoop 需要配置到HDFS端,Sqoop从HDFS/Hive/HBase 导出到 RDB时,需要预先 对RDB进行表结构定义,从RDB导出到Hive/HDFS/HBase时不需要对HBase进行表结构定义,对Hive的定义需要指定分隔符等参数. Sqoop需要指定 Hadopp-Home.xml ,MapReduce-HOME.xml,JAVA-HOME 等系统环境变量 类型类型包含 Export,Import Sqoop 在做数据迁移之前,最好测试下 数据连接是否正常,如果运行不正常,方便进行问题定位。 Sqoop 需要参数配置文件 ***.xml, 如果从 RDB 导出数据到 HDFS 指定 RDB驱动,路径,用户名,密码,库及表等信息 如果为 HDFS 需要执行 HDFS 路径,与Hive数据类似 如果为HBase,则需要指定库信息,路径等 如果从 HDFS/Hive/HBase 到RDB时, 指定HDFS,需要指定路径,分割幅等信息,Hive类似 RDB需要指定 驱动名,URL,User,Pwd,库及表
执行脚本:
bin/sqoop --options-file opt/job_HDFS2RDBMS.opt
定义脚本:
HDFS到 RDB
export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"
RDB到HDFS
import \
--connect jdbc:mysql://localhost:3306/wht \
--username root \
--password cloudera \
--table people \
--fields-terminated-by ',' \
--target-dir /user/hive/warehouse/cust \
--delete-target-dir \
--null-string '' \
--null-non-string '' \
-m 1
RDB到Hive
import \
--connect jdbc:mysql://localhost:3306/wht \
--username root \
--password cloudera \
--table people \
--fields-terminated-by ',' \
--hive-import \
--hive-table db01.peopleseq \
--hive-overwrite \
-m 1