Java:使用终止信号确定数据导入的状态
几周前,我正在尝试将约6000万位数据最初导入Neo4j,但我们一直遇到一个问题,即导入过程似乎停滞了,什么也没导入。
很难分辨该过程中发生了什么—采取线程转储只是告诉我们它正在尝试处理CSV行中的一行,并且以某种方式无法执行。
一种帮助调试的方法是在处理过程中打印出CSV的每一行,然后观察它被卡在哪里,但这似乎有点过头了。 理想情况下,我们只希望打印出按需处理的行。
幸运的是,我们可以通过向我们的导入过程发送一个终止信号并将其打印出到达的位置来完成此操作。 我们必须确保选择了一个尚未由JVM处理的信号,并决定使用'SIGTRAP',即kill -5 [pid]
我们遇到了一个简洁的博客文章,该文章解释了如何将所有内容连接起来 ,然后创建自己的版本:
class Kill3Handler implements SignalHandler
{private AtomicInteger linesProcessed;private AtomicReference<Map<String, Object>> lastRowProcessed;public Kill3Handler( AtomicInteger linesProcessed, AtomicReference<Map<String, Object>> lastRowProcessed ){this.linesProcessed = linesProcessed;this.lastRowProcessed = lastRowProcessed;}@Overridepublic void handle( Signal signal ){System.out.println("Last Line Processed: " + linesProcessed.get() + " " + lastRowProcessed.get());}
}
然后,我们将其连接如下:
AtomicInteger linesProcessed = new AtomicInteger( 0 );
AtomicReference<Map<String, Object>> lastRowProcessed = new AtomicReference<>( );
Kill3Handler kill3Handler = new Kill3Handler( linesProcessed, lastRowProcessed );
Signal.handle(new Signal("TRAP"), kill3Handler);// as we iterate each line we update those variableslinesProcessed.incrementAndGet();
lastRowProcessed.getAndSet( properties ); // properties = a representation of the row we're processing
这对我们来说确实非常有效,并且我们能够得出结论,我们的CSV文件中的某些数据存在轻微问题,导致数据处理不正确。
由于CSV文件只有几GB的大小,因此我们无法通过肉眼观察到。 因此,我们仅略过几行作为健全性检查。
我什至不知道您可以做到这一点,但是请牢记这是一个巧妙的技巧–我确信它会再次有用。
翻译自: https://www.javacodegeeks.com/2014/07/java-determining-the-status-of-data-import-using-kill-signals.html
Java:使用终止信号确定数据导入的状态相关推荐
- 用java把excel数据导入oracle日期转换,Java代码兑现excel数据导入到Oracle
Java代码实现excel数据导入到Oracle 1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误) 2.代码: import java.io.File; ...
- java横向导出excel_利用Java进行Excel的数据导入导出
1. 引言 MS 的电子表格(Excel)是Office 的重要成员,是保存统计数据的一种常用格式.在一 个Java 应用中,将一部分数据生成Excel 格式,是与其他系统无缝连接的重要手段.在远程 ...
- java 实现的excel数据导入及导入模板下载
/** * 下载导入数据模板 * @param response * @param redirectAttributes * @return */ ...
- JAVA实现数据库数据导入/导出到Excel(POI)
原文地址为: JAVA实现数据库数据导入/导出到Excel(POI) 准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/ ...
- java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)
一.简介 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中.SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIREC ...
- HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
1.上传tar包 这里我上传的是apache-hive-1.2.1-bin.tar.gz 2.解压 mkdir -p /home/tuzq/software/hive/ tar -zxvf apach ...
- vb.net datagridview数据批量导入sql_导入:Java实现大批量数据导入导出(100W以上)
阅读文本大概需要3分钟. 来源:https://www.cnblogs.com/barrywxx/p/10700221.html 最近业务方有一个需求,需要一次导入超过100万数据到系统数据库.可能大 ...
- Java实现Excel导入数据库,数据库中的数据导入到Excel
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1. ...
- java大批量数据导入(MySQL)
© 版权声明:本文为博主原创文章,转载请注明出处 最近同事碰到大批量数据导入问题,因此也关注了一下.大批量数据导入主要存在两点问题:内存溢出和导入速率慢. 内存溢出:将文件中的数据全部取出放在集合中, ...
最新文章
- 大咖专栏|拨云见月,专注于深度学习本身
- Django——restframework(serializers序列化工具)
- 统计函数——汇总统计时间类数据
- C++ : STL常用算法: inner_product , sort ,itoa
- java jdk 检测安装_JDK如何安装和配置环境变量以及检验是否成功安装JDK的方法
- Interview and paper based test
- travis-cli 使用
- 使用CSS设置JavaFX饼图样式
- leetcode1053. 交换一次的先前排列(贪心算法)
- python界面编程pdf_Python Qt GUI快速编程——PyQt编程指南 中文pdf完整版[99MB]
- QQ号终于可以当传家宝了!没车没房的,就留几个游戏账号给儿子吧?
- Seq2Seq中的Attention
- 检查和安装过程中的常见的问题
- 微信公众平台系列-7拓展(如何使用微信扫一扫登录自己的网站)
- SQLyog注册激活码
- 马哥教育42期第一周作业
- 一文带你了解python opencv中霍夫变换(Hough transform)的常用操作
- 手游虚拟机服务器,手游大话西游虚拟机镜像一键服务端+配套客户端+启动教程+GM后台...
- 解决问题:cannot create symlink in “/etc/docker“: existing file in the way
- 热烈庆祝女朋友的生日
热门文章
- Redis非阻塞I/O多路复用机制
- 在html页面中怎么打印区域,在HTML中指定打印区域进行打印机打印
- html 中一个格子拆分成两个_一个效果惊人的数字游戏
- Post请求如何取消异步
- apache ignite_Apache Ignite变得简单:第一个Java应用程序
- aws 堆栈模板_使用Arquillian和LocalStack脱机测试AWS云堆栈
- 提取javadoc_使用JavaParser从源文件中提取JavaDoc文档
- java ee打印功能_Java EE:异步构造和功能
- 摇滚bono_Java比以往任何时候都摇滚
- gradle文件不识别_识别Gradle约定