我正在逐行处理一些文本文件BufferReader.readlLine().
两个文件具有相同的大小130MB,但一个需要40秒才能处理,而其他文件需要75秒.
我注意到一个文件有180万行,而其他文件有210万行.但是,当我尝试处理具有相同大小的300万行的文件时,需要30分钟来处理.
所以我的问题是:
这种行为是因为寻求缓冲区读取器的时间(我想知道如何BufferedReader逐行工作或解析文件?)
有没有什么方法可以更快地逐行读取文件?
好的朋友,我提供更多细节.
我正在使用正则表达式将该行拆分为三个部分,然后使用SimpleUnsortedWriter(由Cassandra提供)我将其作为键,列和值写入某个文件.处理完16MB数据后,它会刷新到磁盘.
但是处理逻辑对于所有文件都是相同的,甚至一个大小为330MB的文件,但是在30秒内没有大约100万行的处理逻辑.可能是什么原因?
deviceWriter = new SSTableSimpleUnsortedWriter(
directory,
keyspace,
"Devices",
UTF8Type.instance,
null,
16);
Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)
{
//split the line i n row column and value
long timestamp = System.currentTimeMillis() * 1000;
deviceWriter .newRow(bytes(rowKey));
deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);
}
Run Code Online (Sandbox Code Playgroud)
已经改变了,-Xmx256M to -Xmx 1024M但无论如何都没有帮助.
更新: 根据我的观察,当我写入缓冲区(在物理内存中)时,就像没有.写入缓冲区正在增加新的写入需要时间.(这是我的猜测)
请回复.
知道如何删除此文件并释放根空间吗?
我在ec2上有6个节点的cassandra集群,很多时候我发现集群中的所有节点都已启动并运行,但是当我从客户端执行描述集群时,它会显示一些节点无法访问.
我可以登录个人机器
可以使用cassandra客户端连接到cassandra节点
可以使用JMX连接到各个节点.
我正在使用"hadoop-0.20.203.0rc1.tar.gz"进行群集设置.每当我设定job.setMapOutputKeyClass(ByteBuffer.class);
并运行我得到以下异常的工作:
12/01/13 15:09:00 INFO mapred.JobClient: Task Id : attempt_201201131428_0005_m_000001_2, Status : FAILED
java.lang.ClassCastException: class java.nio.ByteBuffer
at java.lang.Class.asSubclass(Class.java:3018)
at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:776)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:958)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:673)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369)
at org.apache.hadoop.mapred.Child$4.run(Child.java:259)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
at org.apache.hadoop.mapred.Child.main(Child.java:253)
Run Code Online (Sandbox Code Playgroud)
另外我注意到ByteBuffer是Comparable而不是Writable是否会产生任何差异?如果需要任何其他信息,请与我们联系.
1)根据datastax密钥缓存存储rowkey的主键索引.
2)在我们的例子中,我们为密钥缓存分配了足够的内存,并且在具有不同列的多个sstables中存在相同的密钥.
3)如果没有调用从多个sstables访问所有这些相同的密钥,那么索引如何存储在密钥缓存中?它会存储所有sstables的索引还是仅存储最近访问密钥的最后一个sstable?
想要输出1亿个整数,我的系统只有1 GB的RAM.什么是最快速有效的排序方式?
假设我们在文本文件中输入每行一个整数.
我们正在使用java程序进行排序.
我已经指定了RAM,因为我们无法保存RAM中的所有输入整数.
更新:整数是7位数字.
我有Cassandra的最新源代码.
我对cassandra代码做了一些更改以满足我的需求.
现在我想将这个Cassandra打包到debian包中,以便我可以轻松安装它.
我对debian和所有人都不太了解.任何人都可以解释一步一步的程序吗?
(我不知道我是否应该在这里问这个)我想运行两次相同的java程序,其中大部分变量都是静态的.
如果我运行这两次(同时)这些静态变量将具有相同的值或不同?
由于静态变量是类变量,这让我感到困惑.
根据我的一点点java知识程序应该在它抛出运行时异常后终止.
但是在我的应用程序抛出运行时异常后它没有终止,并且因为我在linux上执行它我必须使用ctrl + c来终止它,否则它只是不会终止.
我在windows sytem上创建jar并将其复制粘贴到linux中.
我也在我的应用程序中启用了日志记录.
更新: 我没有捕获任何异常没有使用多线程.