Sqoop - 使用场景
Oracle >> HDFS
sqoop import --connect jdbc:oracle:thin:@<oracle_host>:<oracle_port>/<database_name> \
--username <username> \
--password <password> \
--fetch-size 1000 -m 1 \
--query "select column1,to_char(column2,'yyyy-mm-dd hh24:mi:ss')
from <table_name>
where column2 >= to_date('2021-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
and column2 < to_date('2023-12-29 00:00:00','yyyy-mm-dd hh24:mi:ss');" \
--target-dir /resource/data202312 \
--fields-terminated-by "\\01" \
--hive-drop-import-delims \
--null-string '\\N' \
--null-non-string '\\N'
<oracle_host>:<oracle_port>
:是Oracle服务器的地址和端口号(一般为1521)
<database_name>
:是数据库名称
<username>
和<password>
:是MySQL的用户名和密码
--fetch-size 1000
:是用于指定每次从源数据库中读取的记录数。默认情况下,Sqoop会使用JDBC的fetchSize属性来设置这个值,通常默认为32767。设置较小的fetchSize值可以减少内存使用量,但可能会增加网络IO次数。而设置较大的fetchSize值则可以减少网络IO次数,但可能会增加内存使用量。
-m 1
:是用于指定并行度,即要使用的MapReduce任务数。默认情况下,Sqoop会根据目标表的大小和集群的资源情况自动选择合适的并行度。通过设置-m
参数,可以手动指定并行度,以更好地控制数据抽取的速度和资源消耗。
--fields-terminated-by "\01"
:这个参数指定字段之间的分隔符为\01
(ASCII码中的控制字符)。这通常用于处理以非标准字符(如制表符)分隔的文件,或者需要自定义分隔符的情况。
--hive-drop-import-delims
:这个参数指示Sqoop在将数据导入Hive时删除输入字段之间的分隔符。这有助于避免在Hive表中创建额外的字段。
--null-string '\\N'
:这个参数指定空字符串的表示方式为\N
。在处理文本数据时,这有助于正确识别和处理空值。
--null-non-string '\\N'
:这个参数指定非字符串类型的空值的表示方式为\N
。这有助于在处理复杂数据类型时正确识别和处理空值。
MySQL >> HDFS
sqoop import \
--connect jdbc:mysql://<mysql_host>:<mysql_port>/<database_name> \
--username <username> \
--password <password> \
--table <table_name> \
--target-dir /user/<hdfs_user>/<hdfs_directory>
--num-mappers <num_of_mappers> \
--mappers-per-node <mappers_per_node> \
--split-by <split_column>
<mysql_host>:<mysql_port>
是MySQL服务器的地址和端口号
<database_name>
是数据库名称
<username>
和<password>
是MySQL的用户名和密码
<table_name>
是要抽取的表名
/user/<hdfs_user>/<hdfs_directory>
是HDFS的目标目录
<num_of_mappers>
是并行度(即,要使用的MapReduce任务数)
<mappers_per_node>
是每个节点上要运行的MapReduce任务数
<split_column>
是用于分区的列
参数优化
--num-mappers
:该参数用于控制并行度,即要使用的MapReduce任务数。根据数据量和集群规模进行调整,以提高数据抽取的速度。增加并行度可以提高速度,但也会增加资源消耗。--mappers-per-node
:该参数用于指定每个节点上要运行的MapReduce任务数。根据集群的节点数和每个节点的资源情况进行调整,以充分利用集群资源并提高数据抽取的速度。--split-by
:该参数用于指定用于分区的列。根据实际情况选择适当的列进行分区,以提高数据抽取的并行度和效率。--compress
:使用压缩可以减少数据传输的大小,提高数据传输的速度。Sqoop支持多种压缩格式,如Snappy和Lz4等。根据实际情况选择适当的压缩格式进行数据压缩。--compress-codec
:该参数用于指定压缩编解码器。根据实际情况选择适当的编解码器进行数据压缩。--num-fetchers
:该参数用于控制同时从MySQL数据库中读取数据的线程数。根据实际情况进行调整,以提高数据抽取的速度。增加线程数可以提高速度,但也会增加资源消耗。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南