zoukankan      html  css  js  c++  java
  • 关于sqoop导入数据的时候添加--split-by配置项对sqoop的导入速度的影响。

    最近在搞sqoop的导入导出操作。但是今天遇到一个表数据量特别大。我们想通过sqoop的导入功能对数据进行导入,但是从oracle当中导入数据的时候,如果是需要平行导入的话必须使用--split-by,也就是设置map的数量。

    一种就是不指定--split-by(切分的字段)直接使用一个map的形式就行导入操作。

    我这张表的数据是40G,我将其用10个map进行导入,然后按照其中一个number类型的字段进行对数据进行切分。然后导入,导入的脚本如下:

    #!/bin/bash
    url="jdbc:oracle:thin:@172.16.250.10:1521:stupor"
    database="XD_CORE"
    tables=("report_residual_money_detail_fields")
    tables_num=${#tables[@]}
    username="qry_read"
    password="****"
    for((i=0;i<tables_num;i++));
    do
    sqoop import 
    --connect ${url} 
    --username ${username} 
    --password ${password} 
    --query 'SELECT residual_pact_money,loan_id,cur_date FROM XD_CORE.report_residual_money_detail where 1=1 and $CONDITIONS'  ---这里是查询的字段
    --target-dir /user/gxg/test1   --这个标签一定要指定,这里是导入数据的临时目录
    --fields-terminated-by 	 
    --split-by loan_id   ---这个地方是按照某个字段进行切分的,一般都是整型的数据类型进行切分。
    -m 10   --这里定义切分的map的个数是10个。
    --hive-import 
    --create-hive-table 
    --hive-database test 
    --hive-table ${tables[i]} 
    --null-non-string '\N'   --这里是到导入的空值进行处理。
    --null-string '\N' 
    --verbose 
    done

    下面是我执行真个脚本的时候导入花费的时间。做了一个对比。

     

    这里可以看出,原来是4个map导入数据,后面换成10个map导入数据。这里的导入时间虽然没有减少很多,但是时间还是减少了一些。

    具体的原理参考下面的连接,这位老哥说的很不错:
    https://blog.csdn.net/weixin_40137479/article/details/79117358

  • 相关阅读:
    陶瓷电容的结构、工艺、失效模式
    Vue.js最佳实践
    Vue 超快速学习
    CSS 小技巧
    HTML5 Canvas
    webkit下面的CSS设置滚动条
    Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them
    JSCS: Please specify path to 'JSCS' package
    React中ref的使用方法
    React 60S倒计时
  • 原文地址:https://www.cnblogs.com/gxgd/p/9720705.html
Copyright © 2011-2022 走看看