use of org.bson.BSONDecoder in project mongo-hadoop by mongodb.
the class BSONWritable method readFields.
/**
* {@inheritDoc}
*
* @see Writable#readFields(DataInput)
*/
public void readFields(final DataInput in) throws IOException {
BSONDecoder dec = new BasicBSONDecoder();
BSONCallback cb = new BasicBSONCallback();
// Read the BSON length from the start of the record
byte[] l = new byte[4];
try {
in.readFully(l);
int dataLen = Bits.readInt(l);
if (LOG.isDebugEnabled()) {
LOG.debug("*** Expected DataLen: " + dataLen);
}
byte[] data = new byte[dataLen + 4];
System.arraycopy(l, 0, data, 0, 4);
in.readFully(data, 4, dataLen - 4);
dec.decode(data, cb);
doc = (BSONObject) cb.get();
if (LOG.isTraceEnabled()) {
LOG.trace("Decoded a BSON Object: " + doc);
}
} catch (Exception e) {
/* If we can't read another length it's not an error, just return quietly. */
// TODO - Figure out how to gracefully mark this as an empty
LOG.info("No Length Header available." + e);
doc = new BasicDBObject();
}
}
use of org.bson.BSONDecoder in project mongo-hadoop by mongodb.
the class BSONSplitterTest method testReadSplitsForFile.
@Test
public void testReadSplitsForFile() throws IOException {
Configuration readSplitsConfig = new Configuration(conf);
SPLITTER.setConf(readSplitsConfig);
// Only one split if reading splits is disabled.
MongoConfigUtil.setBSONReadSplits(readSplitsConfig, false);
SPLITTER.readSplitsForFile(file);
List<BSONFileSplit> splitsList = SPLITTER.getAllSplits();
assertEquals(1, splitsList.size());
BSONFileSplit theSplit = splitsList.get(0);
assertOneSplit(theSplit);
// Actually compute splits.
MongoConfigUtil.setBSONReadSplits(readSplitsConfig, true);
// Set split size to be really small so we get a lot of them.
readSplitsConfig.set("mapreduce.input.fileinputformat.split.maxsize", "5000");
SPLITTER.readSplitsForFile(file);
splitsList = SPLITTER.getAllSplits();
// Value found through manual inspection.
assertEquals(40, splitsList.size());
// Make sure that all splits start on document boundaries.
FSDataInputStream stream = fs.open(file.getPath());
BSONDecoder decoder = new BasicBSONDecoder();
BSONCallback callback = new BasicBSONCallback();
for (BSONFileSplit split : splitsList) {
stream.seek(split.getStart());
decoder.decode(stream, callback);
BSONObject doc = (BSONObject) callback.get();
assertTrue(doc.containsField("_id"));
}
}
use of org.bson.BSONDecoder in project mongo-hadoop by mongodb.
the class MongoUpdateWritable method readFields.
/**
* {@inheritDoc}
*
* @see Writable#readFields(DataInput)
*/
public void readFields(final DataInput in) throws IOException {
BSONDecoder dec = new BasicBSONDecoder();
BSONCallback cb = new BasicBSONCallback();
// Read the BSON length from the start of the record
byte[] l = new byte[4];
try {
in.readFully(l);
int dataLen = Bits.readInt(l);
byte[] data = new byte[dataLen + 4];
System.arraycopy(l, 0, data, 0, 4);
in.readFully(data, 4, dataLen - 4);
dec.decode(data, cb);
query = (BasicBSONObject) cb.get();
in.readFully(l);
dataLen = Bits.readInt(l);
data = new byte[dataLen + 4];
System.arraycopy(l, 0, data, 0, 4);
in.readFully(data, 4, dataLen - 4);
dec.decode(data, cb);
modifiers = (BasicBSONObject) cb.get();
upsert = in.readBoolean();
multiUpdate = in.readBoolean();
replace = in.readBoolean();
} catch (Exception e) {
/* If we can't read another length it's not an error, just return quietly. */
// TODO - Figure out how to gracefully mark this as an empty
LOG.info("No Length Header available." + e);
query = new BasicDBObject();
modifiers = new BasicDBObject();
}
}
use of org.bson.BSONDecoder in project graylog2-server by Graylog2.
the class BsonReader method readBsonFile.
protected List<DBObject> readBsonFile(String filename) {
Path filePath = Paths.get(filename);
List<DBObject> dataset = new ArrayList<>();
try {
ByteArrayInputStream fileBytes = new ByteArrayInputStream(Files.readAllBytes(filePath));
BSONDecoder decoder = new BasicBSONDecoder();
BSONObject obj;
while ((obj = decoder.readObject(fileBytes)) != null) {
final DBObject mongoDocument = new BasicDBObject(obj.toMap());
dataset.add(mongoDocument);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("Can not open BSON input file.", e);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new RuntimeException("Can not parse BSON data.", e);
} catch (IOException e) {
//EOF
}
return dataset;
}
Aggregations