SqoopApache 基础提供的一种工具,在大数据世界中通常用于异构关系数据库 (RDBMS) 和 Hadoop 分布式文件系统 (HDFS) 之间的导入-导出数百万条记录。这种数据传输可能导致不同的加载时间,从几分钟到几个小时不等。此方案是全世界数据工程师在引擎盖下查看微调设置的情况。性能调整的目标是在更短的时间内加载更多数据,从而提高效率并减少网络超时时数据丢失的机会。
通常,Sqoop 的性能调整可以通过:

控制并行性
控制数据传输过程

控制并行性

Sqoop 适用于在Hadoop 中实现的 MapReduce 编程模型。Sqoop 并行导入大多数关系数据库的数据。每个作业的map任务数决定了其并行性。通过控制并行性,我们可以处理数据库上的负载,从而处理其性能。以下是 Sqoop 作业中利用并行性的几种方法:
更改mapper的数量
默认情况下,典型的 Sqoop作业会启动四个mappers。为了优化性能,将mapper任务(并行进程)增加到整数值 816 可以显示某些数据库中性能的增强。
通过使用 -m或参数–num-mappers,我们可以在 Sqoop 中设置并行性的程度。例如,将映射器的数量更改为 10:

sqoop import
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--num-mappers 10

需要记住的一些事情是,mapper任务的数量应该小于可能的最大并行数据库连接数。并行性程度的增加应小于 MapReduce 群集中可用的增加程度。

按查询拆分
执行并行导入时,Sqoop 需要一个条件,通过该标准可以拆分工作负载。Sqoop 使用拆分列拆分工作负荷。默认情况下,Sqoop 将标识表中的primary key (如果存在),并用作拆分列。从数据库中检索拆分列的低值和高值,并且映射任务对总范围的均匀大小的组件进行操作。
参数根据指定的mapper数量统一拆分列数据。--split-by的语法由以下方法提供:

sqoop import
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--split-by city_id

控制数据传输过程

提高性能的一个流行方法是管理我们导入和导出数据的方式。以下是几种方法:
批处理
批处理意味着在导出数据时,可以将相关的 SQL 语句分组到批处理中。
JDBC 接口公开了一个 API,用于在具有多个值集的准备语句中执行批处理。使用--batch 参数,Sqoop 可以利用此优势。此 API 存在于所有 JDBC 驱动程序中,因为它是 JDBC 接口所需的。
默认情况下,在 Sqoop 中禁用批处理。使用 --batch参数启用 JDBC 批处理。

sqoop export
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--export-dir /data/cities \
--batch

提取大小
可以一次导入的默认记录数为1000。可以使用 Fetch 大小参数覆盖这一点,该参数用于指定 Sqoop 一次可以使用以下语法导入的记录数:

sqoop import
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--fetch-size=n

其中n表示 Sqoop 一次必须获取的条目数。
根据可用内存和带宽,可以增加提取大小参数的值,即需要读取的数据量。

直接模式
默认情况下,Sqoop 导入过程使用 JDBC,它提供合理的跨供应商导入通道支持。但是,某些数据库可以通过使用特定于数据库的实用程序实现更高的性能,因为它们经过优化,可提供最佳的传输速度,同时减少数据库服务器的压力。

通过提供--direct参数,Sqoop 被迫尝试使用直接导入通道。此通道的性能可能高于使用 JDBC

sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--direct

此快速导入具有多种限制。例如,并非所有数据库都有可用的本机实用程序。此模式并非适用于每个受支持的数据库。
Sqoop 仅对 MySQLPostgreSQL 直接提供支持。

自定义边界查询
如之前所见,通过拆分统一分布数据以进行导入。如果列具有非均匀值,则如果单独使用拆分参数时未获得所需结果,则可以使用边界查询。
理想情况下,我们使用min(id) 和 max(id) 以及表名配置边界查询参数。

sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--query 'SELECT normcities.id, \countries.country, \normcities.city \FROM normcities \JOIN countries USING(country_id) \WHERE $CONDITIONS' \
--split-by id \
--target-dir cities \
--boundary-query "select min(id), max(id) from normcities"

此处由 Sqoop 在内部使用,并将展开以选取城市表的最小 ID 和最大 ID 来拆分数据。通过使用自定义值,可以派生高效拆分数据,从而在一般方面提高性能。$CONDITIONS

结论

性能调整的目标是在不损害资源的情况下实现显著的性能。希望使用上述技术,我们应该能够提高效率,并显著缩短数据传输时间。

参考

Performance Tuning Apache Sqoop. Six definite ways to improve efficiency… | by Thomas George Thomas | The Startup | Medium

Apache Sqoop性能调整相关推荐

  1. Sqoop提速性能调整

    Apache Sqoop性能调整 Sqoop 是 Apache 基础提供的一种工具,在大数据世界中通常用于异构关系数据库 (RDBMS) 和 Hadoop 分布式文件系统 (HDFS) 之间的导入-导 ...

  2. apache服务器性能不行,Apache服务器性能调优

    文章目录 [隐藏] 工具 Apache mod_status Apache2Buddy 多处理模块 Prefork Worker Event 模块配置 StartServers MinSpareSer ...

  3. 九、OLTP 性能调整与优化--结语

    OLTP性能调整与优化--结语 根据软件生命周期的瀑布模型,应用程序的性能在其设计阶段就已经有了质的定性.如果在应用程序开发完成之后才想到优化,一般就只能治标不治本,在遇到严重的性能问题时,甚至需要将 ...

  4. Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop

    最近由于要使用Sqoop来到出数据到hdfs,可是发现Sqoop1.4.5跟hadoop2.X不兼容,需要对Sqoop1.4.5进行编译,编译的具体方法见:http://my.codeweblog.c ...

  5. DB2数据库性能调整和优化(第2版)

    <DB2数据库性能调整和优化(第2版)> 基本信息 作者: 牛新庄 出版社:清华大学出版社 ISBN:9787302325260 上架时间:2013-7-3 出版日期:2013 年7月 开 ...

  6. nginx与apache详细性能对比

    之前一直研究nginx的源代码,最近有时间也做了下nginx与apache的性能对比,希望能够够对大家有所帮助! 转载请注明:http://blog.csdn.net/lengzijian/artic ...

  7. WebSphere Application Server性能调整工具包

    IBM已发布了WebSphere Application Server性能调整工具包 ,该工具包具有从Eclipse工作区*监视多个 WebSphere Application Server的功能. ...

  8. Oracle 优化和性能调整

    Oracle 优化和性能调整 分析评价Oracle数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库用户响应时间又可以分为系统服务时间和用户等待时间两项,即:  数据库用户响应时间=系统 ...

  9. sql server 性能_SQL Server硬件性能调整

    sql server 性能 SQL Server Performance Tuning can be a difficult assignment, especially when working w ...

最新文章

  1. android用户界面之WebView教程实例汇总
  2. USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
  3. flutter 主题切换
  4. SSH连接linux时,长时间不操作就断开的解决方案
  5. 通过使用CSS字体阴影效果解决hover图片时显示文字看不清的问题
  6. 只需四步完成java JDK1.8的下载安装与配置【图文详解】
  7. 前端笔记-thymeleaf显示数据及隐藏数据
  8. TTS-零基础入门-10分钟教你做一个语音功能
  9. 图解deconvolution(transpose convolution)
  10. 在线 LaTeX 公式编辑器
  11. 彻底删除VMware !!!
  12. excel在线_图片转Excel表格在线工具,分享几款不错的工具
  13. tp-link tl-wr740n 虚拟服务器,TP-Link TL-WR740N无线wifi无线桥接怎么设置 | tplogin.cn
  14. 普加计划甘特图功能介绍
  15. linux下好用的python编辑器_分享|Linux上几款好用的字幕编辑器
  16. python发邮件图片太长显示不出来_小白入门,用python 发送定时邮件,将Dataframe转为邮件正文,链接显示为图片...
  17. 互动媒体技术A1作业报告
  18. 一些常见的处理器如arm,arduino,stm32,51,树莓派的联系和区别,还有各自的长短板?
  19. unbutu服务器误删文件,Ubuntu误删系统文件修复办法
  20. CameraCaptureSession

热门文章

  1. docker非常详细的介绍
  2. 在 Linux 上监控 CPU 和 GPU 温度
  3. pycharm更改默认项目地址的方法
  4. linux uwsgi 非root,ubuntu-除非root用户,否则uWSGI Emperor权限被拒...
  5. python 文件名以数字开头_python-如何使XML标记以数字开头?
  6. Android移动应用基础教程【广播机制】
  7. java request 原理_JavaWeb response和request对象原理及实例解析
  8. 苹果怎么删除通讯录联系人_苹果手机通讯录怎么恢复?这才是正确的打开方式!...
  9. 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...
  10. python编程语言集合_【python】编程语言入门经典100例--12