sqoop 将特定列从 hdfs 导出到 mysql

Posted

技术标签:

【中文标题】sqoop 将特定列从 hdfs 导出到 mysql【英文标题】:sqoop export specific columns from hdfs to mysql 【发布时间】:2013-10-10 07:15:56 【问题描述】:

SQOOP 是否支持将特定列从 hdfs 导出到 mysql

例如现在我有一个这样的 hdfs 文件:

866138000211400 4   com.spreadst.validationtools    1   1310090804  0   0
866138000211400 4   com.spreadst.validdate  1   1310090804  0   0
866138000211400 4   com.spreadtrum.android.eng  1   1310090804  0   0
866138000211400 4   com.tencent.mm  261 1310090804  0   0
866138000211400 4   com.tencent.mobileqq    13  1310090804  0   0
866138000211400 4   com.thunderst.radio 1   1310090804  0   0
866138000211400 4   com.uucun51111531.android.cms   2013080901  1310090804  0   0
866138000211400 4   com.yeezonetech.firewall    1   1310090804  0   0
866138000211400 4   com.youku.phone 41  1310090804  0   0
866138000211400 4   org.openintents.cmfilemanager   20  1310090804  0   0

每行有 7 列(imei、platform、packagename、softversion、gathertime、isHidden、isUninstalled),每列以 '\t' 结尾。

mysql的表结构是这样的: imei:varchar(100), platform:char(1), packagename:varchar(100), softversion:varchar(20).

如何使用 sqoop 直接将 hdfs 文件导出到 mysql 与 4 个特定列?

【问题讨论】:

【参考方案1】:

是的,使用 --columns 参数指定要导入的列。

来自 Sqoop Cookbook 的示例:

    sqoop export \
  --connect jdbc:mysql://mysql.example.com/sqoop \
  --username sqoop \
  --password sqoop \
  --table cities \
  --columns country,city

【讨论】:

【参考方案2】:
sqoop import --connect jdbc:mysql://localhost/DataBase_Name \
  --username root --table Table_Name --columns "Col1,Col2" \
  -m 1 --target-dir Hdfs_Dir_Name

【讨论】:

虽然代码很受欢迎,但它应该始终有一个附带的解释。这不必很长,但在意料之中。

以上是关于sqoop 将特定列从 hdfs 导出到 mysql的主要内容,如果未能解决你的问题,请参考以下文章

Sqoop - 在导入到 HDFS 之前操作 Mysql 表

使用 Apache Sqoop 将数据从 Mongo/Cassandra 导出到 HDFS

使用 Sqoop 的 HDFS 到 RDBMS - 表创建

[hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 数据在mysq和hdfs之间的相互转换

关于使用sqoop export 导出hdfs数据到mysql中文乱码问题

Sqoop集群环境搭建 | MySQL数据导出HDFS测试