sqoop使用总结

Sqoop 使用小结

sqoop是将数据从sql导到hadoop的工具,当然也支持部分hadoop到sql。具体的机制不讲了。这里记录一下用法。

sqoop常用命令有这样一些

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

import

将数据从sql导入HDFS/HBase。一个导入hdfs的例子

1
2
3
4
5
6
7
8
sqoop import --connect jdbc:mysql://192.168.66.96:3306/sqoop \
--username sqoop \
--password sqoop \
--table students \
-m 1 \
--columns "SD_ID,CD_ID,LOCATION" \
--where "sd_id > 100" \\
--fields-terminated-by '\t'
  • connect:jdbc连接字符
  • table:要导入的table
  • m:mapper数量
  • target-dir: hdfs文件地址
  • columns 要导入的列
  • where: 可以用来filter
  • fields-terminated-by hdfs中的分隔符

导入hbase

1
2
3
4
5
6
7
8
sqoop import --connect jdbc:mysql://mysqlserver_IP/databaseName \
--username \
--password password \
--table datatable \
--hbase-create-table \
--hbase-table hbase_tablename \
--column-family col_fam_name \
--hbase-row-key key_col_name
  • databaseName 和datatable 是mysql的数据库和表名,
  • hbase_tablename是要导成hbase的表名,
  • key_col_name可以指定datatable中哪一列作为hbase新表的rowkey
  • col_fam_name是除rowkey之外的所有列的列族名
  • split-by 这个应该是按照什么分

导入hive

自动创建hive table

1
2
3
4
5
6
sqoop create-hive-table \
--connect jdbc:mysql://ip/database \
--table tb1 \
--hive-table tb1 \
--username user \
-P

创建并导入hive

1
2
3
4
5
sqoop import--connect jdbc:mysql://ip/database \
--table tb1 \
--username user \
-P \
--hive-import

可以加–query执行一条query。

一些导入hive的问题

至于反向导入,一般用export

merge

将两个数据集合并的工具,对于相同的key会覆盖老的值。

  • –class-name 指定merge job使用的类名称
  • –jar-file 合并时引入的jar包,该jar包是通过Codegen工具生成的jar包
  • –merge-key 指定作为merge key的列名
  • –new-data 指定newer数据目录
  • –onto 指定older数据目录
  • –target-dir 指定目标输出目录

eval

用户可以很快的使用sql语句对数据库进行操作。这使得用户在执行import操作之前检查sql语句是否正确。

job

用来生成sqoop任务。存在sqoop的metastore中,之后可以直接用job-id运行:

  • –create 创业一个新的sqoop作业.
  • –delete 删除一个sqoop job
  • –exec 执行一个 –create保存的作业
  • –show 显示一个作业的参数
  • –list 显示所有创建的sqoop作业

一个例子:

1
2
3
4
5
6
sqoop job --create myimportjob \
-- import \
--connect jdbc:mysql://192.168.81.176/hivemeta2db \
--username root \
-password passwd \
--table TBLS

job提供了一个增量导入的机制,主要是这样三个参数:

  • –check-column (col):指定一个“标志列”用于判断增量导入的数据范围,该列不能是字符型,最好是数字或者日期型
  • –incremental (mode):指定增量模式,包含“追加模式” append 和“最后修改模式” lastmodified (该模式更满足常见需求)。
  • –last-value (value):指定“标志列”上次导入的上界。如果“标志列”是最后修改时间,则–last-value为上次执行导入脚本的时间。

当incremental时lastmodified时,每次运行后会自动记录last-value。这个在业务中非常实用。

参考文献


本文采用创作共用保留署名-非商业-禁止演绎4.0国际许可证,欢迎转载,但转载请注明来自http://thousandhu.github.io,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://thousandhu.github.io/2016/07/04/sqoop使用总结/