Apache Sqoop 教程:从 RDBMS 导入导出数据到 Hadoop

需积分: 10 0 下载量 193 浏览量 更新于2024-09-08 收藏 711KB PDF 举报
该资源主要介绍了Apache Sqoop的使用,特别是Sqoop1版本的相关命令,包括从RDBMS获取信息、列出数据库表、执行SQL评估、创建Hive表、导出数据到MySQL以及从MySQL导入数据到Hadoop HDFS。 Sqoop是一个用于在Hadoop和关系型数据库之间进行数据迁移的工具。它支持将结构化数据从传统的关系型数据库管理系统(RDBMS)如MySQL导入到Hadoop的HDFS中,或者将HDFS中的数据导出回RDBMS。以下是对文中提到的Sqoop命令的详细解释: 1. RDBMS info: `sqoop list-databases` 或 `sqoop list-tables` 命令用于获取数据库信息,例如列出所有可用的数据库或表。在示例中,`list-tables` 命令被用来连接到`jdbc:mysql://192.168.1.15:3306/test`,并以`root`用户身份列出名为`test`的数据库中的所有表。 2. Eval: `sqoop eval` 命令允许你执行一个SQL查询,并打印结果。在给出的例子中,它运行了一个查询`SELECT count(1) FROM user_info`,以统计`user_info`表中的行数。 3. Create Hive Table: `sqoop create-hive-table` 命令用于创建一个新的Hive表,与RDBMS中的表结构匹配。例子中,它创建了名为`hive_user_info_test_create`的Hive表,与`mysql://192.168.1.15:3306/test`数据库中的`user_info`表结构相同,字段分隔符为逗号,行结束符为换行符。 4. Export: `sqoop export` 用于将HDFS中的数据导出到RDBMS。在这个例子中,数据从`/user/hivetest/user_info/part-m-00000`目录导出到`jdbc:mysql://192.168.1.15:3306/test`数据库的`user_info`表,字段分隔符为逗号。 5. Import: `sqoop import` 是将RDBMS中的数据导入到Hadoop HDFS的命令。例子中展示了从`jdbc:mysql://192.168.1.4:3306/t`导入数据到HDFS的用法,但没有提供完整的命令,通常会指定表名和HDFS的目标路径。 除了这些基本操作,Sqoop还支持增量导入(incremental import),这允许只导入自上次导入以来更改的数据。有两种类型的增量导入方式:基于last modified时间戳或基于last value(例如,一个递增的主键)。这使得在大数据环境中进行实时数据同步成为可能。 在实际使用中,Sqoop还提供了其他功能,如设置连接参数、指定分隔符、处理复杂数据类型、映射字段等。此外,随着Sqoop的发展,Sqoop2引入了更多的管理和监控特性,以适应更复杂的ETL(提取、转换、加载)流程。然而,本文主要关注的是Sqoop1的基本用法。如果你需要了解更多关于Sqoop的信息,可以参考官方文档(http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html)。

[root@zhaosai conf]# sqoop import --connect jdbc:mysql://zhaosai:3306/mydb --username root --password jqe6b6 --table news --target-dir /user/news --fields-terminated-by “;” --hive-import --hive-table news -m 1 Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../hbase does not exist! HBase imports will fail. Please set $HBASE_HOME to the root of your HBase installation. Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../zookeeper does not exist! Accumulo imports will fail. Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation. 23/06/10 16:07:14 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 23/06/10 16:07:15 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 23/06/10 16:07:15 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. 23/06/10 16:07:15 INFO tool.CodeGenTool: Beginning code generation 23/06/10 16:07:15 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:875) at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:59) at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:763) at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:786) at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:289) at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:260) at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:246) at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:327) at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1872) at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1671) at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:106) at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:501) at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:628) at org.apache.sqoop.Sqoop.run(Sqoop.java:147) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) at org.apache.sqoop.Sqoop.main(Sqoop.java:252)

2023-06-11 上传