sqoop 安装及使用



#sqoop安装
##环境准备

  1. java-1.8.111
  2. hadoop-2.8.2
  3. 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就会出现没有数据的情况

导入hbase不现实中文 数据源为utf-8格式的汉字被自动转换为二进制文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值