Sqoop数据迁移
-
sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具
- 将数据从RDBMS导入到Hadoop
- HDFS,HIVE,HBASE
- 从Hadoop到处数据到RDBMS
- 将导入或导出命令翻译成MapReduce程序来并行操作和容错
- 将数据从RDBMS导入到Hadoop
-
sqoop安装
-
解压后复制hadoop的jar包和链接mysql驱动包到sqoop的lib文件夹下
cp /opt/soft/hadoop/share/hadoop/common/hadoop-common-2.6.0-cdh5.14.2.jar /opt/soft/sqoop/lib/ cp /opt/soft/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.6.0-cdh5.14.2.jar /opt/soft/sqoop/lib/ cp /opt/soft/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0-cdh5.14.2.jar /opt/soft/sqoop/lib
-
配置sqoop-env.sh文件
export HADOOP_COMMON_HOME=/opt/soft/hadoop export HAOOP_MAPRED_HOME=/opt/soft/hadoop export HABSE_HOME=/opt/soft/hbase export HIVE_HOME=/opt/soft/hive export ZOOCFGDIR=/opt/soft/zk/conf
-
配置环境变量
-
-
sqoop list命令
sqoop list-databases --username root --password root --connect jdbc:mysql://localhost:3306/ sqoop list-tables --username root --password root --connect jdbc:mysql://localhost:3306/
-
从RDB导入数据到HDFS
-
sqoop import命令
-
到如表到HDFS
-
sqoop import
--connect jdbc:mysql://localhost:3306/hr
--driver com.mysql.jdbc.Driver
//--query "select * from user where host !='127.0.0.1 and \$CONDITIONS'" (所有查询都应该以\$CONDITIONS结束;sqoop内部使用该条件将记录范围分发给所有Mapper)
--table user
//--where "order_date>'2015-10-10'" (可指定where条件)
//--columns "host,name,age" (可指定导入列)
--username root
--password hadoop
//--incremental append (增量导入方式为append追加数据至已存在的HDFS数据集)
//check-column order_date (指定递增的列)
//--last-value '2015-10-10' (指定上一次导入的最大值)
//--delete-target-dir (如果目标存在则删除)
--target-dir/data/user/
--m 3 (mapper数量)
--as-textfile (导入数据为text文件)
//--as-avrodatafile (为avro文件)
//--as-sequencefile (为sequence文件)
//--as-parquetfile (为parquet文件)
-
从RDB导入数据到Hive
–create-hive-table:自动创建表,生产中 一般不使用
–hive-overwrite:覆盖原有表数据
sqoop import
--connect jdbc:mysql://localhost:3306/hr
--driver com.mysql.jdbc.Driver
--table orders
--username root
--password root
--hive-import (通过hive-import导入到hive)
--create-hive-table
--hive-database retail_db
--hive-table orders
//--hive-partition-key "order_date" --hive-partition-value "2014" (指定分区字段和分区值)
--m 3
--as-parquetfile
-
从RDB导入数据到Hbase
导入MySql数据到Hbase
sqoop import --connect jdbc:mysql://localhost:3306/retail_db --username root --password hadoop --table products --columns "customernum, customername" --hbase-table customercontactinfo --column-family CustomerName --hbase-row-key customernum -m 1
-
导出HDFS数据到MySql
-
sqoop export命令
-
在Mysql中建表
-
到处数据到Mysql
-
sqoop export
--connect jdbc:mysql://localhost:3306/sqoop
--username root
--password hadoop
--table emp_demo
--export-dir /data/sqoop/emp
-m 1