Code is attached.
Fetch is one request into single buffer of size 1GB (that is my claim,
anyway) which comprises the entire file.
File was previously pushed into crail via:
/usr/local/apache-crail-1.2-incubating/bin/crail fs -copyFromLocal
/root/G1.txt /
Fetch results:
[root@sgt-pepper ~]# java com.research.crail.Test
file.capacity=1073741824
ret=1.073741824E9
execution time 0.98
Which says it took about 1 sec. to fetch 1GB file from crail into my Test
app's memory. All running in single CentOS 7 VM with 8GB memory and 2
CPUs, crail name and data daemons are each in their own docker container.
Comments?
Lou.
package com.research.crail;
import java.nio.ByteBuffer;
import org.apache.crail.CrailBuffer;
import org.apache.crail.CrailFile;
import org.apache.crail.CrailInputStream;
import org.apache.crail.CrailStore;
import org.apache.crail.conf.CrailConfiguration;
import org.apache.crail.memory.OffHeapBuffer;
public class Test {
public static void main(String[] args) {
try {
CrailConfiguration conf = CrailConfiguration.createConfigurationFromFile();
CrailStore store = CrailStore.newInstance(conf);
String filename = "G1.txt";
CrailFile file = store.lookup(filename).get().asFile();
int capacity = (int) file.getCapacity();
System.out.println("file.capacity"+"="+capacity);
CrailBuffer buf = OffHeapBuffer.wrap(ByteBuffer.allocateDirect(capacity));
CrailInputStream directStream = file.getDirectInputStream(file.getCapacity());
long start = System.currentTimeMillis();
double ret = (double) directStream.read(buf).get().getLen();
long end = System.currentTimeMillis();
double executionTime = ((double) (end - start)) / 1000.0;
System.out.println("ret"+"="+ret);
System.out.println("execution time " + executionTime);
}
catch(Exception e) {
e.printStackTrace();
}
}
}