#sqoop安装
##环境准备
- java-1.8.111
- hadoop-2.8.2
- sqoop-1.4.6
##下载sqoop
[http://mirror.bit.edu.cn/apache/sqoop/1.4.6/](http://mirror.bit.edu.cn/apache/sqoop/1.4.6/)
解压sqoop
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop-1.4.6
##配置环境变量
vim /etc/profile
SQOOP_HOME=/opt/sqoop-1.4.6
PATH=$PATH:$SQOOP_HOME/bin
export PATH SQOOP_HOME
source /etc/profile
##配置sqoop变量
cp $SQOOP_HOME/conf/sqoop-env-template.sh $SQOOP_HOME/conf/sqoop-env.sh
vi $SQOOP_HOME/conf/sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/hadoop-2.8.2
export HADOOP_MAPRED_HOME=/opt/hadoop-2.8.2
export HBASE_HOME=/opt/hbase-1.1.3
export HIVE_HOME=/opt/apache-hive-2.3.0-bin
export ZOOCFGDIR=/opt/zookeeper-3.4.10
根据需要进行配置,如果没有使用的可以不配置
##拷贝数据库jar包
cp /opt/mysql-connector-java-5.1.44-bin.jar $SQOOP_HOME/lib (mysql jar)
cp /opt/odbc6.jar $SQOOP_HOME/lib (oracle jar)
##验证
sqoop list-databases --connect jdbc:mysql://host1:3306 --username root --password 123456
sqoop list-tables --connect jdbc:mysql://host1:3306/test --username root --password 123456
sqoop import --connect jdbc:mysql://host1:3306/test --username root --password 123456 --table test --target-dir /user/sqoop/mysql/input/test
##错误
#sqoop学习笔记
sqoop官方用户手册:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html
简介: sqoop是工具,一个可以把ORACLE、MYSQL中的数据导入到HDFS、HIVE、HBASE中(反过来也可以)的工具。下面是一些使用的例子。
##sqoop导入导出
#从Mysql中抽取数据到HDFS
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test --target-dir /user/sqoop/mysql/input -m 1
#向已经存在HDFS目录追加数据
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test --append --target-dir /user/test/sqoop
#name 是string类型的,如果是null,导入的时候用nothing替换
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test --null-string ‘nothing‘ --append --target-dir /user/test/sqoop
#age是int类型,如果是null,导入的时候用-1替换
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test --null-string ‘nothing‘ --null-non-string -1 --append --target-dir /user/test/sqoop
#仅仅导入id,name两个字段
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test --columns id,name --null-string ‘nothing‘ --append --target-dir /user/test/sqoop
#字段间以|分割
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test --columns id,name --fields-terminated-by ‘|‘ --null-string ‘nothing‘ --append --target-dir /user/test/sqoop
#只导入name不为null的id,name
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test --columns id,name --where "name is not null" --fields-terminated-by ‘|‘ --null-string ‘nothing‘ --append --target-dir /user/test/sqoop
#使用--query代替--table --cloumns --where
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --query "select id,name from st where id > 10 and \$CONDITIONS" --split-by id --fields-terminated-by ‘|‘ --null-string ‘nothing‘ --append --target-dir /user/test/sqoop
#将所有数据放到一个文件中(东东那么少)
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --query "select id,name from st where id > 10 and \$CONDITIONS" --split-by id --fields-terminated-by ‘|‘ --null-string ‘nothing‘ --append --target-dir /user/test/sqoop -m 1
#查看Mysql有哪些数据库
sqoop list-databases --connect jdbc:mysql://192.168.56.151:3306/ --username root --password 123456
#查看Mysql数据库mysql中有哪些表
sqoop list-tables --connect jdbc:mysql://192.168.56.151:3306/mysql --username root --password 123456
#查看ORACLE数据库中有哪些数据库
sqoop list-databases --connect jdbc:oracle:thin:@10.10.244.136:1521:wilson --username system --password 123456
#将Oracle中system.ost表导入HDFS
sqoop import --connect jdbc:oracle:thin:@10.10.244.136:1521:wilson --username system --password 123456 --table SYSTEM.OST --delete-target-dir --target-dir /user/test/sqoop
#只导入到一个文件中
sqoop import --connect jdbc:oracle:thin:@10.10.244.136:1521:wilson --username system --password 123456 --table SYSTEM.OST --delete-target-dir --target-dir /user/test/sqoop -m 1
#hdfs到mysql
sqoop export --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table test1 --export-dir /user/sqoop/mysql/output --fields-terminated-by ','
#hdfs到oracle
sqoop export --connect jdbc:oracle:thin:@192.168.56.150:1521/orcl --username yue --password yue --table TEST2 --export-dir /user/sqoop/mysql/output --fields-terminated-by ','
##sqoop on hive
#mysql 到hive
sqoop import --connect jdbc:mysql://host1:3306/test --username root --password 123456 --table test --hive-table default.t1 --fields-terminated-by "\001" --hive-import --hive-overwrite --create-hive-table --delete-target-dir
/user/hive/warehouse/ip140.db/test_sqoop/dt=2016-04-15 --fields-terminated-by '\t'
#oracle 到hive
sqoop import --connect jdbc:oracle:thin:@host1:1521/orcl --username yue --password yue --table TEST1 --target-dir /user/hive/warehouse/ip140.db/test_sqoop/dt=2016-04-14 --fields-terminated-by '\t'
#hive创建表
create table test_sqoop(id int,name string)
partitioned by (dt string)
row format delimited fields terminated by '\t' stored as textfile;
#修复表分区
MSCK REPAIR TABLE test_sqoop;
#导出数据和hdfs相同
sqoop export --update-key id_card --update-mode allowinsert -m 1 --connect "jdbc:mysql://XXX" --username "test" --password "123456" --table mysqltable --columns "mysqlcol" --hcatalog-database hivedatabaseX --hcatalog-table hiveTableX --hcatalog-partition-keys partition_keyX --hcatalog-partition-values "2017-12-08" --input-fields-terminated-by ','
##sqoop on hbase
#从Mysql中抽取数据到Hbase
sqoop import --connect jdbc:mysql://192.168.56.151:3306/test --username root --password 123456 --table mt --hbase-create-table --hbase-table mt --column-family cf --hbase-row-key year,month,day,sta_id
#将ORACLE中数据导入到Hbase
sqoop import --connect jdbc:oracle:thin:@192.168.56.150:1521/orcl --username yue --password yue --table TEST1 --hbase-create-table --hbase-table user:testoracle --column-family cf --hbase-row-key ID
#将oracle中数据导入到hbase,用多个字段做row-key
sqoop import --connect jdbc:oracle:thin:@192.168.56.151:1521/orcl --username yue --password yue --table SYSTEM.OMT --hbase-create-table --hbase-table omt --column-family cf --hbase-row-key YEAR,MONTH,DAY,STA_ID -m 1
#从Hbase中抽取数据到Mysql(目前不可以)
报错java.lang.NoSuchMethodError:
org.apache.hadoop.hbase.HTableDescriptor.addFamily 最新版本的hbase1.1.3和sqoop1.4.6不兼容,解决办法 换成0.98版本的hbase即可 ###导入没有数据 (已解决) 指定为rowkey的列就不再存在列中了,如果把所有列都指定为rowkey就会出现没有数据的情况