SQOOP导入、导出数据相关案例

本文详细介绍了如何使用Sqoop工具从MySQL数据库全量导入数据至Hive及HDFS,包括配置参数说明与常见注意事项,适用于大数据平台数据迁移场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、全量导入数据:mysql -> hive中

sqoop import \
--connect jdbc:mysql://hadoop01:3306/qfbap_ods \
--driver com.mysql.jdbc.Driver \
--username root \
--password 123456 \
--table user \
--hive-import \
--hive-table gp_ods.ods_user

注意点:

  1. mysql中的数据库正常并且权限正常访问,没有权限的请看上一篇文章。
  2. hive中的库和表是应该存在的
  3. hive中的表和mysql中的字段一一对应。

2、直接导hdfs的方式:


首先确定hive中ods_user表在HDFS上的路径:

路径为:

/user/hive/warehouse/gp1919_qfbap_ods.db/ods_user

hive的创建表的本质就是创建一个目录,加载数据的本质就是读取对应路径下的数据文件。

所以我们可以直接将mysql的数据导入到hdfs相对应的路径中去:

sqoop import \
--connect jdbc:mysql://hadoop01:3306/qfbap_ods \
--driver com.mysql.jdbc.Driver \
--username root \
--password 123456 \
--table user \
--delete-target-dir \
--target-dir  /user/hive/warehouse/gp1919_qfbap_ods.db/ods_user \
--fields-terminated-by '\001' \
;

备注:运行过程中的日志显示有不少错误,但是没有影响结果,我也没有深究,如果有大神能够解释,请赐教。

显示成功:

在hive中查询一下数据进行测试:

 

 

### Sqoop 配置导出数据到 HDFS 的解决方案 Sqoop 是一种用于在 Hadoop 和关系型数据库之间传输数据的工具。虽然通常情况下,Sqoop 更常用于将数据从 MySQL 或其他 RDBMS 导入到 HDFS 中,但它也可以反向操作,即将 HDFS 上的数据导出到关系型数据库中。 以下是关于如何使用 Sqoop数据从 HDFS 导出到 MySQL 的具体配置和示例: #### 1. 基本语法结构 要实现从 HDFS 到 MySQL 的数据导出,可以使用 `sqoop export` 命令。其基本形式如下: ```bash bin/sqoop export \ --connect jdbc:mysql://<hostname>:<port>/<database_name> \ --username <username> \ --password <password> \ --export-dir <HDFS_directory_path> \ --input-fields-terminated-by '<delimiter>' \ --table <mysql_table> ``` 其中各个选项的作用说明如下[^1]: - `--connect`: 指定 JDBC 连接字符串,指向目标 MySQL 数据库。 - `--username` 和 `--password`: 提供访问 MySQL 所需的身份验证信息。 - `--export-dir`: 指定 HDFS 文件夹路径,该文件夹下的数据会被导出至 MySQL 表。 - `--input-fields-terminated-by`: 定义字段分隔符,默认为制表符 `\t`。 - `--table`: 指定接收数据的目标 MySQL 表名。 #### 2. 实际案例演示 假设有一个名为 `/user/hive/weblog_data` 的 HDFS 路径,里面存储着日志条目数据,并希望将其导出到 MySQL 数据库中的 `weblogs` 表,则可运行以下命令: ```bash bin/sqoop export \ --connect jdbc:mysql://localhost:3306/testdb \ --username root \ --password secret \ --export-dir /user/hive/weblog_data \ --input-fields-terminated-by ',' \ --table weblogs ``` 此命令会尝试连接本地主机上的 MySQL 数据实例 (`testdb`) 并把位于指定 HDFS 路径内的 CSV 格式的记录写入到 `weblogs` 表中[^2]。 需要注意的是,在执行上述命令前,应该确认几个前提条件已经满足: - **MySQL 表存在**: 目标表必须事先创建完成,因为 Sqoop 不支持自动建表功能。 - **数据匹配度检查**: 确保 HDFS 文档里的每一列都与 MySQL 表定义相吻合,包括顺序、数目以及兼容的数据类型。 #### 3. 处理复杂场景 对于更复杂的环境设置或者特殊需求(比如分区处理),可以通过增加额外参数进一步定制化行为。例如,如果想利用多个 MapReduce 工作线程加速整个过程的话,可以用 `--num-mappers N` 参数指明并发数;又或者是当源数据含有空白字符或其他非标准编码时调整输入格式解析逻辑等。 --- ### 示例代码片段 这里提供一段完整的脚本作为参考模板: ```bash #!/bin/bash # 设置变量简化管理 MYSQL_HOST="localhost" MYSQL_PORT=3306 DATABASE_NAME="my_database" TABLE_NAME="employees" USERNAME="root" PASSWORD="mypassword" # 启动 Sqoop Export 流程 bin/sqoop export \ --connect "jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${DATABASE_NAME}" \ --username ${USERNAME} \ --password ${PASSWORD} \ --export-dir "/path/to/data/in/HDFS" \ --input-fields-terminated-by '\t' \ --lines-terminated-by '\n' \ --table ${TABLE_NAME} ``` 以上脚本封装了必要的细节以便于重复调用或集成进自动化流程里去。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值