[Sqoop]Sqoop使用

Posted SunnyYoona

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Sqoop]Sqoop使用相关的知识,希望对你有一定的参考价值。

Sqoop的本质还是一个命令行工具,和HDFS,MapReduce相比,并没有什么高深的理论。

我们可以通过sqoop help命令来查看sqoop的命令选项,如下:

 
  1. 16/11/13 20:10:17 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
  2. usage: sqoop COMMAND [ARGS]
  3. Available commands:
  4.  codegen            Generate code to interact with database records
  5.  create-hive-table  Import a table definition into Hive
  6.  eval               Evaluate a SQL statement and display the results
  7.  export             Export an HDFS directory to a database table
  8.  help               List available commands
  9.  import             Import a table from a database to HDFS
  10.  import-all-tables  Import tables from a database to HDFS
  11.  import-mainframe   Import datasets from a mainframe server to HDFS
  12.  job                Work with saved jobs
  13.  list-databases     List available databases on a server
  14.  list-tables        List available tables in a database
  15.  merge              Merge results of incremental imports
  16.  metastore          Run a standalone Sqoop metastore
  17.  version            Display version information
  18. See 'sqoop help COMMAND' for information on a specific command.

其中使用频率最高的选项还是import 和 export 选项。

1. codegen

将关系型数据库表的记录映射为一个Java文件,Java class类以及相关的jar包,该命令将数据库表的记录映射为一个Java文件,在该Java文件中对应有表的各个字段。生成的jar和class文件在Metastore功能使用时会用到。该命令选项的参数如下图所示:


举例:

 
  1. sqoop codegen --connect jdbc:mysql://localhost:3306/test --table order_info -outdir /home/xiaosi/test/ --username root -password root

上面实例以test数据库的order_info表来生成Java代码,其中-outdir指定了Java代码生成的路径

运行结果信息如下:

 
  1. 16/11/13 21:50:34 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
  2. Enter password:
  3. 16/11/13 21:50:38 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
  4. 16/11/13 21:50:38 INFO tool.CodeGenTool: Beginning code generation
  5. 16/11/13 21:50:38 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `order_info` AS t LIMIT 1
  6. 16/11/13 21:50:38 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `order_info` AS t LIMIT 1
  7. 16/11/13 21:50:38 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /opt/hadoop-2.7.2
  8. 注: /tmp/sqoop-xiaosi/compile/ea41fe40e1f12f6b052ad9fe4a5d9710/order_info.java使用或覆盖了已过时的 API
  9. 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
  10. 16/11/13 21:50:39 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-xiaosi/compile/ea41fe40e1f12f6b052ad9fe4a5d9710/order_info.jar

我们还可以使用-bindir指定编译成的class文件以及将生成文件打包为jar的jar包文件输出路径:

 
  1. 16/11/13 21:53:55 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
  2. Enter password:
  3. 16/11/13 21:53:58 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
  4. 16/11/13 21:53:58 INFO tool.CodeGenTool: Beginning code generation
  5. 16/11/13 21:53:58 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `order_info` AS t LIMIT 1
  6. 16/11/13 21:53:58 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `order_info` AS t LIMIT 1
  7. 16/11/13 21:53:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /opt/hadoop-2.7.2
  8. 注: /home/xiaosi/data/order_info.java使用或覆盖了已过时的 API
  9. 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
  10. 16/11/13 21:53:59 INFO orm.CompilationManager: Writing jar file: /home/xiaosi/data/order_info.jar

上面实例指定编译成的class文件(order_info.class)以及将生成文件打包为jar的jar包文件(order_info.jar)输出路径为/home/xiaosi/data路径,java文件(order_info.java)路径为/home/xiaosi/test

2. create-hive-table

这个命令上一篇文章[Sqoop导入与导出]中已经使用过了,作用就是生成与关系数据库表的表结构对应的Hive表。该命令选项的参数如下图所示:

举例:

 
  1. sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table employee --username root -password root --fields-terminated-by ','

3. eval

eval命令选项可以让Sqoop使用SQL语句对关系性数据库进行操作,在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。

3.1 选择查询评估计算

使用eval工具,我们可以评估计算任何类型的SQL查询。我们以test数据库的order_info表为例子:

 
  1. sqoop eval --connect jdbc:mysql://localhost:3306/test --username root --query "select * from order_info limit 3" -P

运行结果信息:

 
  1. 16/11/13 22:25:19 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
  2. Enter password:
  3. 16/11/13 22:25:22 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
  4. ------------------------------------------------------------
  5. | id                   | order_time           | business   |
  6. ------------------------------------------------------------
  7. | 358574046793404      | 2016以上是关于[Sqoop]Sqoop使用的主要内容,如果未能解决你的问题,请参考以下文章

    从 SAP HANA 导入数据时出现 sqoop 问题

    使用 ojdbc6 连接器导入 Sqoop

    [Sqoop]Sqoop使用

    在 sqoop 中使用 java api 导入 avro 数据

    sqoop 将数据导入hive

    Sqoop学习之二Sqoop使用