概念
联通数据库(mysql,oracle等)和hadoop数据仓库(hdfs,hive,hbase)
将导入或导出命令翻译成mapreduce程序来实现
安装
1.需要hadoop环境
2.修改配置文件
sqoop-env.sh
export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.1/
export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.1/
export HIVE_HOME=/home/hadoop/apps/hive-1.2.1
3.加入jdbc jar包
cp ~/app/hive/lib/mysql-connector-java-5.1.28.jar $SQOOP_HOME/lib/
sql->hdfs
bin/sqoop import \
--connect jdbc:mysql://ip01:3306/test \
--username root \
--password root \
--target-dir /sqoop \ # hdfs的目录
--fields-terminated-by ‘\001’ \ # 分隔符
--table emp # 表名
--split-by id #使用id字段 划分map任务
--m 1 # maptask个数
如果设置了 --m 1,则意味着只会启动一个maptask执行数据导入
如果不设置 --m 1,则默认为启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据
sql->hive
bin/sqoop import \
--connect jdbc:mysql://ip01:3306/test \
--username root \
--password root \
--target-dir /sqoop \ # hdfs的目录
--hive-import \
--fields-terminated-by ‘\001’ \ # 分隔符
--table emp # 表名
--split-by id #使用id字段 划分map任务
--m 1 # maptask个数
按需导入
bin/sqoop import \
--connect jdbc:mysql://ip1:3306/test \
--username root \
--password root \
--target-dir /wherequery2 \
--query 'select id,name,deg from emp WHERE id>1207 and $CONDITIONS' \ # $CONDITIONS是固定的
--split-by id \
--fields-terminated-by '\t' \
--m 2
hdfs->sql
bin/sqoop export \
--connect jdbc:mysql://ip1:3306/test \
--username root \
--password root \
--table emp \
--export-dir /user/hadoop/emp/
hive->sql
bin/sqoop export \
--connect jdbc:mysql://ip1:3306/test \
--username root \
--password root \
--fields-terminated-by '\t' \
--table emp \
--export-dir /user/hive/warehouse/t # 直接输入hive在hdfs中的文件
--m 1