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数据库中读取数据的线程数。根据实际情况进行调整,以提高数据抽取的速度。增加线程数可以提高速度,但也会增加资源消耗。

 

posted @ 2024-01-19 17:00  HOUHUILIN  阅读(39)  评论(0编辑  收藏  举报