大数据多线程高效批量处理

工作中遇到的场景,这里写个例子出来,实际应用比此处更为健壮和完善

应用场景:

对一张表10万条数据(或100万或1亿+)进行更新操作或写入操作;

菜鸟是一条一条的执行吧,这显然不行啊

我在实际项目中是这样应用的, 批量更新!当然这显然是不够的 要线程批量更新才对吧!

怎么做呢?

举例1:10万条数据 ,我1000条1000条的处理 就是,10万/1000 = 100  ,

这里我就用100个线程同时处理,每个线程负责1000条数据,这里有个关键点,处理的数据不能重复!

给个代码示例吧:

线程池中线程数量可以根据 数据量/单个线程处理数量 来计算

public class DySchedule {
    private static AtomicInteger line = new AtomicInteger(0);
    static ExecutorService pool = Executors.newFixedThreadPool(100);

    public static int getLine(){
        return line.addAndGet(1000);
    }
    public static void doJob(){
        for (int i = 0;i<100;i++){
            Thread thread = new MyThread();
            pool.execute(thread);
        }
        pool.shutdown();

    }
    public static void main(String[] args) {
        DySchedule.doJob();
    }
}

以下是每个线程要执行的内容

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程:" + Thread.currentThread().getName());
        Integer num = DySchedule.getLine();
        System.out.println("startline = " +(num-1000)+",endline = " + num);
    }
}

程序运行结果:

线程:pool-1-thread-1
startline = 0,endline = 1000
线程:pool-1-thread-2
startline = 1000,endline = 2000
线程:pool-1-thread-5
线程:pool-1-thread-3
startline = 2000,endline = 3000
startline = 3000,endline = 4000
线程:pool-1-thread-4
startline = 4000,endline = 5000
线程:pool-1-thread-6
线程:pool-1-thread-7
startline = 6000,endline = 7000
startline = 5000,endline = 6000
线程:pool-1-thread-9
startline = 7000,endline = 8000
线程:pool-1-thread-8
startline = 8000,endline = 9000
线程:pool-1-thread-10
startline = 9000,endline = 10000
线程:pool-1-thread-12
startline = 10000,endline = 11000
线程:pool-1-thread-11
startline = 11000,endline = 12000
线程:pool-1-thread-16
startline = 12000,endline = 13000
线程:pool-1-thread-15
线程:pool-1-thread-19
startline = 14000,endline = 15000
startline = 13000,endline = 14000
线程:pool-1-thread-20
startline = 15000,endline = 16000
....
....

这里只把每个线程要处理的数据行数或分割号列举处理了,

比如以上

线程:pool-1-thread-1
startline = 0,endline = 1000 处理数据库0-1000行的数据

线程:pool-1-thread-2
startline = 1000,endline = 2000  处理1000-2000行的数据

接下来的批量任务内容是不是简单多了,不多少了,记住这里关键点就是保证数据不重复!,不遗漏!

这样子的思路几百万或者几千万级别的批量处理是没有什么问题的,

但是 你有几个亿或者几百亿的数据需要批量处理怎么办呢?  小伙子 别急,作为一名资深程序员当然还是有办法的

需要吧以上思路或方案设计成分布式,多任务,多线程的schedule 就可以了,

累了,点到为止吧..草草记下,不足之处可以留言

时间: 2024-12-26 08:45:12

大数据多线程高效批量处理的相关文章

使用tar+pigz+ssh实现大数据的高效传输

以前我们跨主机拷贝大数据的时候,比如要拷贝超过100GB的mysql原始数据,我们通常的做法如下: 在源端打包压缩为tar.gz文件 采用scp或者rsync等方式拷贝到目标主机 在目标主机解压文件 这三个过程是同步阻塞,即不能同时异步执行,导致效率低下. 现在我们将过程优化为以数据流的方式,同时执行(非阻塞模式),则效率一般可以提高到原来的3倍以上,具体实现如下: 磁盘读取---->打包---->压缩------>传输---->解压缩-->拆包---->落盘 |-&g

王家林最受欢迎的一站式云计算大数据和移动互联网解决方案课程 V3之Android架构设计和实现完整训练:HAL&amp;Framework&amp;Native Service&amp;Android Service&amp;Best Practice

如何理解Android架构设计的初心并开发出搭载Android系统并且具备深度定制和软硬整合能力特色产品,是本课程解决的问题. 课程以Android的五大核心:HAL.Binder.Native Service.Android Service(并以AMS和WMS为例).View System为主轴,一次性彻底掌握Android的精髓. 之所以是开发Android产品的必修课,缘起于: 1,  HAL是Android Framework&Application与底层硬件整合的关键技术和必修技术:

追本溯源 解析“大数据生态环境”发展现状(CSDN)

程学旗先生是中科院计算所副总工.研究员.博士生导师.网络科学与技术重点实验室主任.本次程学旗带来了中国大数据生态系统的基础问题方面的内容分享.大数据的发展越来越快,但是对于大数据的认知大都还停留在最初的阶段——大数据是一类资源.一类工具,其实“大数据”更多的体现的是一个认知和思维,是一种战略.认知和文化. 以下为分享实录全文: 一年多来,通过组织中国大数据技术大会.CCF大数据学术会议以及各类大大小小的应用峰会与学术论坛,结合我们科学院网络数据科学与技术重点实验室所承担的与大数据相关的重大基础课

大数据讲师

云计算学习者的心声: 如何从企业级开发的角度,不断动手实际操作,循序渐进中掌握Hadoop,直到能够直接进行企业级开始,是困惑很多对云计算感兴趣的朋友的核心问题,本课程正是为解决此问题而生,学习者只需要按照一步步的跟着视频动手操作,即可完全无痛掌握Hadoop企业级开发. 同时本课程会对Hadoop的核心源码进行剖析,使学习者具备一定的修改Hadoop框架的能力,从而能够根据实际的业务情况来打造自己的框架. Hadoop领域4个开创先河 1,全程覆盖Hadoop的所有核心内容 2,全程注重动手实

细说Mammut大数据系统测试环境Docker迁移之路

欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 最近几个月花了比较多精力在项目的测试环境Docker迁移上,从最初的docker"门外汉"到现在组里的同学(大部分测试及少数的开发)都可以熟练地使用docker环境开展测试工作,中间也积累了一些经验和踩过不少坑,借此2017复盘的机会,总结一下整个环境的搭建过程,希望可以给其他有志于向docker迁移的项目提供些许参考,同时也想跟其他docker的老司机们一起探讨改进方式. Docker迁移的必要性 这篇文章不对docker的基

大数据技术栈

大数据技术栈 Hadoop 历史: https://www.jikexueyuan.com/course/677_1.html?ss=1 1. Google大数据与Hadoop对比 功能 Google Hadoop 存储 GFS HDFS 计算 MapReduce MapReduce 查询 BigTable HBase 2. 大数据分类 2.1 根据数据类型分类 2.1.1 结构化数据 能够用数据或统一的结构加以表示,人们称之为结构化数据,如数字.符号.传统的关系数据模型,行数据,存储于数据库,

在云计算资源池上自动部署业务应用的大数据平台组件开发实战

在云计算提供的分布式资源池构建能够自动部署业务应用的平台组件,该平台组件能够非常简易的被众多的并发终端使用,从而轻而易举的提供业务支持: 尤其是值得注意的是,如果有需要的话,我们的不同业务组件和业务本身可以发生数据和资源的共享,这对于资源和数据的复用,尤其是对于效率的提升是至关重要的.         课程介绍   基于“在资源池上自动部署业务应用的平台组件”的要求,课程包含Spark的架构设计.Spark编程模型.Spark内核框架源码剖析.Spark的广播变量与累加器.Shark的原理和使用

决胜大数据时代:Hadoop&amp;Yarn&amp;Spark企业级最佳实践(3天)

Hadoop是云计算的事实标准软件框架,是云计算理念.机制和商业化的具体实现,是整个云计算技术学习中公认的核心和最具有价值内容. Yarn是目前公认的最佳的分布式集群资源管理框架: Mahout是目前数据挖掘领域的王者:        工业和信息化部电信研究院于2014年5月发布的“大数据白皮书”中指出: “2012 年美国联邦政府就在全球率先推出“大数据行动计划(Big data initiative)”,重点在基础技术研究和公共部门应用上加大投入.在该计划支持下,加州大学伯克利分校开发了完整

蔡先生论道大数据之(十六) :穷则思变

数据化运营讨论(2) 数据化运营的理念与技术对企业来说是革命性的,它能将现在"卖方市场"商业状态变成为"买方市场". "穷则思变"古话说的好,在当下传统营销方式手段很难明显提升业绩和市场竞争力时"数据化运营"的理念和技术就成为企业未来打破竞争,提升自我强有力地商业武器. 企业通过对数据的分析和挖掘,运营不在盲目,真正做到心中有数,有的放矢.举例,传统的营销活动带来的问题:"我知道投入的广告费有一半打了水漂,收效甚微,