Sqoop命令详解

##以上完成后在h3机器上配置sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz

查看sqoop提供的命令
[root@h4 sqoop-1.4.4]# bin/sqoop help
Please set $HCAT_HOME to the root of your HCatalog installation.
usage: sqoop COMMAND [ARGS]

Available commands:
  codegen            Generate code to interact with database records    //生成代码与数据库中的记录进行交互
  create-hive-table  Import a table definition into Hive                    //创建hive表
  eval               Evaluate a SQL statement and display the results      //执行一个SQL语句并显示结果
  export             Export an HDFS directory to a database table         //导出rdbms数据到hdfs上
  help               List available commands                                         //使用sqoop 命令的帮助
  import             Import a table from a database to HDFS                 //导入rdbms数据到hdfs上
  import-all-tables  Import tables from a database to HDFS               //导入rdbms指定数据库所有的表数据到hdfs上
  job                Work with saved jobs                                     //sqoop的作业,可创建作业、执行作业、删除作业
  list-databases     List available databases on a server                     //通过sqoop的这个命令列出jdbc连接地址中所有的数据库
  list-tables        List available tables in a database                           //通过sqoop的这个命令列出jdbc链接地址数据库中所有的表
  merge              Merge results of incremental imports                     //合并增量数据
  metastore          Run a standalone Sqoop metastore                     //运行sqoop的元存储
  version            Display version information                                   //查看sqoop的版本

See 'sqoop help COMMAND' for information on a specific command.

//使用sqoop列出mysql中所有的数据库
[root@h4 sqoop-1.4.4]# bin/sqoop list-databases --connect jdbc:mysql://h4:3306/ --username root --password 123456

//使用sqoop列出mysql的hive库中所有的表
[root@h4 sqoop-1.4.4]# bin/sqoop list-tables --connect jdbc:mysql://h4:3306/hive --username root --password 123456

//使用sqoop将mysql的test库中所有的表导入到hdfs(我这里有4个表,默认每个表为一个作业,每个作业会并行使用4个map任务来加速导入,每个map任务的数据都会写到一个单独的文件且这些文件都在一个目录中,导出的数据默认以逗号分隔)
[root@h4 sqoop-1.4.4]# bin/sqoop import-all-tables --connect jdbc:mysql://h4:3306/test --username root --password 123456
 
//使用sqoop复制mysql的test库中的address表结构到hive中(只复制表结构,不复制数据)
[root@h4 sqoop-1.4.4]# bin/sqoop create-hive-table --connect jdbc:mysql://h4:3306/test --username root --password 123456 --table address --hive-table address

//使用sqoop将mysql的test库中的address表数据导入到hive的address表中
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://h4:3306/test --username root --password 123456 --table address --hive-import --hive-table address -m 1 s

//使用sqoop将hive的product表数据导出到mysql的test库中的product表中(要求mysql的test库中必须有product表,且表结构与hive的product表相同)
[root@h4 sqoop-1.4.4]# sqoop export --connect "jdbc:mysql://h4:3306/test?useUnicode=true&characterEncoding=utf8" --username root --password root --table product --export-dir /user/hive/test.db/product --input-fields-terminated-by '\t' --input-null-string 'null' --input-null-non-string 'null'

//将宿主机上MySql的test库中的users表的数据导入到HDFS,默认Sqoop会起4个Map运行MapReduce进行导入到HDFS,存放在HDFS路径为/user/root/users(user:默认用户root:MySql数据库的用户,test:表名)目录下有四个输出文件
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123456 --table users

//将mysql表数据导入到指定目录下,并对导入的数据的MapReduce作业自定义启动mapper的数量为2
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123456 --table users --target-dir /sqoop/tb1 -m 2

//指定mysql表的某些字段按照\t为分隔符导入到指定的目录下,并对导入的数据的MapReduce作业自定义启动mapper的数量为2
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123456 --table users --target-dir /sqoop/tb2 -m 2 --fields-terminated-by '\t' --columns "id,username,password"

//按条件导出mysql表中的数据用\t为分隔符导入到指定的目录下,并对导入的数据的MapReduce作业自定义启动mapper的数量为2
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123456 --table users --target-dir /sqoop/tb3_2 -m 2 --fields-terminated-by '\t' --where 'id > 1 and id <= 5'
  
//使用sql语句导出mysql表中的数据,默认为,分隔
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://192.168.1.10:3306/test --username root --password 123456 --query 'SELECT * FROM users where id > 2 AND $CONDITIONS' --split-by users.id --target-dir '/sqoop/tb5'

//将hdfs/testdata/users1/part-m-00000数据文件导入到mysql的test库中的users表中,数据格式用\t分隔,起一个Mapper任务
[root@h4 sqoop-1.4.4]# bin/sqoop export --connect jdbc:mysql://h4:3306/test --username root --password 123456 --table users --export-dir /testdata/users1/part-m-00000 --fields-terminated-by ',' -m 1

//将mysql的test库中的users表的数据导入到hbase的users表中(hbase中该表不存在,由sqoop导入数据是创建)起1个Mapper任务
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://h4:3306/test --username root --password 123456 --table users --hbase-create-table --hbase-table users --column-family info --hbase-row-key id -m 1

如果出现:ERROR tool.ImportTool: Error during import: HBase jars are not present in classpath, cannot import to HBase!这个错解决办法是在/etc/profile中配置$HBASE_HOME环境变量即可

//将mysql的test库中的test表数据导入到hdfs中的/testdata/sqoop/mysql_testdb/test路径下,如果test库中的test表有空列则使用##代替
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://h4:3306/test --username root --password 123456 --table test --target-dir '/testdata/sqoop/mysql_testdb/test' --fields-terminated-by '\t' --null-string '##' -m 1

Sqoop支持两种增量导入模式
 1、追加模式append:通过检查递增的ID列,--incremental append  --check-column id --last-value 0  //指定Sqoop如何确定哪些行是新的。对于模式的合法值包括追加和上次更改时间。检查列应为整型,不能是CHAR/NCHAR/VARCHAR/VARNCHAR/LONGVARCHAR/LONGNVARCHAR类型(官方API描述)。指定从以前的导入检查列的最大值开始。
 2、最后修改模式lastmodified:通过检查最后修改的时间戳列,--incremental lastmodified --check-column create_time --last-value '2014-07-14 23:07:00' //导入create_time比'2014-07-14 23:07:00'更大的数据。

//将mysql的test库中的test表的新增数据导入到hdfs中sqoop默认的/user/root/test路径下(通过检查上次导入的最大id确定增量导入。追加模式),如果test库中的test表有空列则使用##代替  (导出的数据文件为part-m-00000、part-m-00001...依次递增
[root@h4 sqoop-1.4.4]# bin/sqoop import --connect jdbc:mysql://h4:3306/test --username root --password 123456 --table test --fields-terminated-by '\t' --null-string '##' -m 1 --append --check-column 'id' --incremental append --last-value 4 

//创建一个sqoop的job  
[root@h4 sqoop-1.4.4]# bin/sqoop job --create impTestTabJob -- import --connect jdbc:mysql://h4:3306/test --username root --password 123456 --table test --fields-terminated-by '\t' --null-string '##' -m 1 --append  

//查看sqoop的job
[root@h4 sqoop-1.4.4]# bin/sqoop job --list

//执行sqoop的job
[root@h4 sqoop-1.4.4]# bin/sqoop job --exec impTestTabJob

 
 

原文地址:https://www.cnblogs.com/mengyao/p/4235038.html