Sqoop1: commands -- import

本文介绍如何使用 Sqoop 工具从 MySQL 导入数据到 HDFS,包括连接配置、指定表及列、条件筛选等操作,并展示了通过 SQL 查询进行复杂数据加载的方法。

Import



 

 

import --connect jdbc:mysql://192.168.122.1:3306/sample 
    --username zhj --password 123456 
    --table actor
    --columns "id, name, birthday"
    --where "id>40"
    --m 3
    --target-dir /user/zhj/sqoop/actor        // or --warehouse-dir  /user/zhj/sqoop

 

 

 

import --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' 
       --split-by a.id --target-dir /user/foo/joinresults

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

root@educoder:~# mysql -uroot -p123123 -h127.0.0.1 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 37 Server version: 5.5.59-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE DATABASE hdfsdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.00 sec) mysql> USE hdfsdb; Database changed mysql> CREATE TABLE student ( -> stu_no INT PRIMARY KEY, -> stu_name VARCHAR(20), -> stu_age INT -> ); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO student (stu_no, stu_name, stu_age) VALUES -> (202001, 'zhangsan', 18), -> (202002, 'lisi', 19), -> (202003, 'wangwu', 20); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM student; +--------+----------+---------+ | stu_no | stu_name | stu_age | +--------+----------+---------+ | 202001 | zhangsan | 18 | | 202002 | lisi | 19 | | 202003 | wangwu | 20 | +--------+----------+---------+ 3 rows in set (0.00 sec) mysql> exit Bye root@educoder:~# sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student; 25/03/28 11:17:03 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 25/03/28 11:17:04 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 25/03/28 11:17:04 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. 25/03/28 11:17:04 INFO tool.CodeGenTool: Beginning code generation 25/03/28 11:17:04 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `student` AS t LIMIT 1 2
03-29
<think>嗯,用户想知道如何用Sqoop将MySQL数据导入HDFS,还要解析日志。首先,我需要回忆一下Sqoop的基本用法。记得Sqoop是用于在Hadoop和关系数据库之间传输数据的工具。用户可能已经安装了Sqoop,但可能需要确认环境变量和依赖库是否正确配置,比如MySQL的JDBC驱动是否放到了Sqoop的lib目录下。 接下来,基本命令的结构。Sqoop import命令需要指定连接字符串、用户名、密码、表名或查询语句,还有目标目录。用户提到的示例可能需要包含这些参数。比如,连接MySQL的jdbc URL,数据库名,表名,以及HDFS的目标路径。同时,可能需要指定并行任务的数量,比如--m参数。 然后,日志解析部分。用户执行Sqoop命令后,控制台会输出很多信息,需要指出关键部分。比如,开始时的配置信息,确认连接是否成功;然后是数据切分的部分,比如split-by的字段,生成多少个map任务;接着是map任务的进度,是否有错误;最后是输出目录和导入行数的统计。这些信息对于用户排查问题很重要,比如连接失败、权限问题或者数据切分不合理导致的性能问题。 可能还需要考虑用户的实际场景。比如,如果用户的数据量很大,可能需要调整m参数来优化并行度。或者用户可能使用了查询语句而不是整表导入,这时候要注意where条件中的$CONDITIONS和split-by字段的必要性。此外,如果用户需要将数据导入Hive,可能需要添加--hive-import参数,但用户的问题主要是导入到HDFS,所以示例中不需要这部分。 另外,用户可能遇到的常见错误有哪些?比如JDBC驱动找不到,这时候日志中会有ClassNotFoundException。或者数据库连接失败,可能是网络问题或权限错误。还有可能split-by的字段选择不当,导致数据倾斜,影响导入性能。这些都需要在日志解析部分提到,帮助用户理解如何排查问题。 最后,生成相关问题时,要考虑用户可能进一步想知道的内容。比如性能优化,如何调整并行任务数;或者导入到Hive的具体步骤;以及导出数据回MySQL的方法。这些都是用户在使用Sqoop时常见的后续问题,应该包含在相关问题里,引导用户深入学习。 总结一下,回答的结构应该是先给出一个完整的示例命令,分步骤解释每个参数的作用,然后详细解析执行后的日志信息,指出关键部分和常见错误。最后提供相关问题,帮助用户扩展知识。</think>### Sqoop导入MySQL数据到HDFS操作指南 #### 一、基础操作示例 以下是使用Sqoop将MySQL表数据导入HDFS的标准命令格式: ```bash sqoop import \ --connect jdbc:mysql://<host>:<port>/<database> \ --username <username> \ --password <password> \ --table <table_name> \ --target-dir </hdfs/output/path> \ --m <num_mappers> ``` **参数解析**: - `--connect`:MySQL数据库连接地址(示例:`jdbc:mysql://192.168.1.100:3306/testdb`) - `--table`:需要导出的源表名称 - `--target-dir`:HDFS存储路径(需保证路径不存在) - `--m`:并行任务数(默认1,建议根据数据量调整) #### 二、完整执行示例 ```bash sqoop import \ --connect jdbc:mysql://secondmgt:3306/spice \ --username hive \ --password hive \ --table users \ --target-dir /output/users_data \ --m 4 ``` #### 三、日志关键信息解析 执行后输出日志包含以下核心内容: 1. **环境配置验证** ``` INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset ``` 验证JDBC驱动加载和MySQL连接配置[^3] 2. **数据切分逻辑** ``` INFO mapreduce.ImportJobBase: Transferred 256.45 MB in 32.456 seconds (7.897 MB/sec) INFO mapreduce.ImportJobBase: Retrieved 1000000 records ``` 显示数据总量与传输速率,用于性能评估 3. **并行任务状态** ``` INFO mapreduce.Job: map 0% reduce 0% INFO mapreduce.Job: map 25% reduce 0% INFO mapreduce.Job: map 100% reduce 0% ``` 展示MapReduce任务进度,帮助定位任务卡顿位置 4. **输出结果确认** ``` INFO mapreduce.ImportJobBase: Transferred 1.2 GB in 2min 35sec INFO util.NativeCodeLoader: Loaded the native-hadoop library ``` 最终输出包含数据量、耗时和HDFS存储路径验证[^1] #### 四、常见错误解析 1. **连接拒绝** ``` ERROR manager.SqlManager: Error executing statement: Communications link failure ``` 检查MySQL服务状态、防火墙设置、用户远程访问权限 2. **路径冲突** ``` ERROR tool.ImportTool: Import failed: Directory already exists ``` 添加`--delete-target-dir`参数覆盖目标目录 3. **数据类型不兼容** ``` ERROR orm.CompilationManager: Could not compile code for class Users ``` 使用`--map-column-java`参数指定字段类型映射
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值