热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql数据倾斜_sqoop数据倾斜解决实战

背景:下面导致数据倾斜的sqoop任务,这个数据倾斜是由于源数据导致的-源表的index1分布不均匀,不均匀指每一块的数据量不均匀,范围[min(index),max

背景: 下面导致数据倾斜的sqoop任务,这个数据倾斜是由于源数据导致的- 源表的index1 分布不均匀,不均匀指每一块的数据量不均匀,范围[min(index),max(index)]被分为m块,每块index[0,7]的值在 [min+index*range/8,min+(index+1)*range] 间,如第一块100MB,最后一块1GB的数据量,数据量可在hdfs查看map文件大小。

(数据量,用时):(一千万+条,20分钟)

sqoop import \

--connect "jdbc:mysql://${mysql_host}:${mysql_port}/${mysql_db}?zeroDateTimeBehavior=convertToNull&dontTrackOpenResources=true&tinyInt1isBit=false&defaultFetchSize=10000&useCursorFetch=true&autoReconnect=true&failOverReadOnly=false&useSSL=false" \

--driver com.mysql.jdbc.Driver \

--username ${mysql_user} \

--password ${mysql_password} \

--table ${mysql_table} \

--columns 'field1,field2,...,fieldn' \

--hcatalog-database test \

--hcatalog-table ${hive_table} \

--hcatalog-partition-keys 分区字段 \

--hcatalog-partition-values 分区字段值 \

-m 8 \

--split-by index1

solutionA: 使用–query语句中添加自增ID,作为split-by的参数

用时:8分钟

sqoop import \

--connect "jdbc:mysql://${mysql_host}:${mysql_port}/${mysql_db}?zeroDateTimeBehavior=convertToNull&dontTrackOpenResources=true&tinyInt1isBit=false&defaultFetchSize=10000&useCursorFetch=true&autoReconnect=true&failOverReadOnly=false&useSSL=false" \

--driver com.mysql.jdbc.Driver \

--username ${mysql_user} \

--password ${mysql_password} \

--hcatalog-database test \

--hcatalog-table table \

--hcatalog-partition-keys 分区字段 \

--hcatalog-partition-values 分区字段值 \

--query 'select tt.* from (select @rowNum:=@rowNum+1 as INC_ID, t.* from table t,(select @rowNum:=0) b ) tt where $CONDITIONS' \

-boundary-query "select 1 as min , sum(1) as max from table " \

-m 8 \

--split-by INC_ID

solutionB: 使用另一个均匀索引-index2

用时:8分钟

sqoop import \

--connect "jdbc:mysql://${mysql_host}:${mysql_port}/${mysql_db}?zeroDateTimeBehavior=convertToNull&dontTrackOpenResources=true&tinyInt1isBit=false&defaultFetchSize=10000&useCursorFetch=true&autoReconnect=true&failOverReadOnly=false&useSSL=false" \

--driver com.mysql.jdbc.Driver \

--username ${mysql_user} \

--password ${mysql_password} \

--table ${mysql_table} \

--columns 'field1,field2,...,fieldn' \

--hcatalog-database test \

--hcatalog-table ${hive_table} \

--hcatalog-partition-keys 分区字段 \

--hcatalog-partition-values 分区字段值 \

-m 8 \

--split-by index2

solutionB_update: 查看了planB的执行计划,发现是全表扫描,要通过force index(index) 强制执行索引扫描

用时:3分钟

sqoop import \

--connect --connect "jdbc:mysql://${mysql_host}:${mysql_port}/${mysql_db}?zeroDateTimeBehavior=convertToNull&dontTrackOpenResources=true&tinyInt1isBit=false&defaultFetchSize=10000&useCursorFetch=true&autoReconnect=true&failOverReadOnly=false&useSSL=false" \

--driver com.mysql.jdbc.Driver \

--username ${mysql_user} \

--password ${mysql_password} \

--hcatalog-database test \

--hcatalog-table table \

--hcatalog-partition-keys 分区字段 \

--hcatalog-partition-values 分区字段值 \

--query 'select field1,...,fieldn from table T force index(index2) where $CONDITIONS' \

-m 8 \

--split-by index2

推荐排名:solutionB_update > solutionB > solutionA

适用场景:solutionB_update/solutionB 适用于mysql有均匀索引的情况。没有均匀索引的话,用solutionA。由于一天的数据量很大(1000w+),应该考虑增量更新的方式-canal 导入,但听说使用canal会比较麻烦,有待研究,目前先用这些方案。

sqoop参数说明(来源官网):

7496254f47db35f24b9b5c7cff99fa9f.png

24d715487a23db65086d725b1ce591bd.png

翻译:

7.2.2。选择要导入的数据

Sqoop通常以表为中心导入数据。使用--table参数选择要导入的表。例如,--table employees。此参数还可以标识数据库中的视图或其他类似表的实体。

默认情况下,表中的所有列都被选中进行导入。导入的数据以其“自然顺序”写入HDFS;也就是说,包含列a、B和C的表会导致数据导入,例如:

A1、B1、C1

A2、B2、C2

...

您可以选择列的子集并使用--columns参数控制它们的顺序。这应该包括要导入的列的逗号分隔列表。例如:--列“name,employee_id,jobtitle”。

可以通过向import语句中添加sqlwhere子句来控制导入哪些行。默认情况下,Sqoop生成SELECTFROM

默认情况下,sqoop将使用query select min(),max()from

标签:实战,倾斜,hcatalog,--,sqoop,mysql,table,false,true

来源: https://blog.csdn.net/AnlaGodness/article/details/110090691



推荐阅读
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 本文详细介绍了Oracle数据库中的表空间及其分区技术。表空间作为Oracle数据库的一个逻辑单元,每个数据库可包含一个或多个表空间,每个表空间则关联一个或多个数据文件。通过合理的表空间管理和分区策略,可以显著提升数据库的性能和管理效率。文章还总结了实际应用中的最佳实践,为读者提供了宝贵的参考。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 马蜂窝数据总监分享:从数仓到数据中台,大数据演进技术选型最优解
    大家好,今天分享的议题主要包括几大内容:带大家回顾一下大数据在国内的发展,从传统数仓到当前数据中台的演进过程;我个人认为数 ... [详细]
  • 前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出, ... [详细]
author-avatar
老6李家小宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有