Processamento de Big Data com bancos de dados NoSQL

Propaganda
Processamento de Big Data com bancos de dados NoSQL para desenvolvedores Java Fernando Babadopulos (@babadopulos) Eu tenho um Big Data? Ok, tenho um Big Data, e agora? Mas como funciona o hadoop? faPa dos dados faPa dos faPa dos grande quanPdade de dados dados dados faPa dos dados CLUSTER HADOOP node 1 node 2 node 3 resultado do processamento Talvez outro Big Data!?!? node N Vou processar distribuído, mas onde eu armazeno os dados? Como dividir meus dados em vários servidores? Replicação 02 | fji5| 03 01 9| 1| ijf6 0 2 || ijf7 1 3 || ijf8... 2... 4... database 01 database 02 01 | f1| f2 | f3 | f4... 01 | f1| f2 | f3 | f4... 02 | i5| i6 | i7 | i8... 02 | i5| i6 | i7 | i8... 03 | j9| j0 | j1 | j2... 03 | j9| j0 | j1 | j2... Sharding 02 | lfji9| 03 01 04 08 07 06 5| 1| lijf0 6 2 || lijf1 7 3 || lijf2... 8... 4... 05 database 01 database 02 database 03 database 04 01 | f1| f2 | f3 | f4... 02 | i5| i6 | i7 | i8... 03 | j9| j0 | j1 | j2... 04 | l9| l0 | l1 | l2... 05 | l9| l0 | l1 | l2... 06 | f1| f2 | f3 | f4... 07 | j9| j0 | j1 | j2... 08 | i5| i6 | i7 | i8... Hashing •  Rápido •  Consistente Ex.: •  Murmur •  RIPEMD-­‐160 Replicação ou sharding? E o HDFS, onde entra? Leitura e gravação geram os mesmos problemas? Todos os bancos de dados são iguais? •  Rápido •  Armazenado na memória RAM •  Diversas estruturas de dados •  Strings, Hashs, Lists, Sets, Sorted Sets <dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
<type>jar</type>
</dependency>
Jedis jedis = new Jedis("localhost");
jedis.set("key", "value");
String value = jedis.get("key");
* hips://github.com/xetorthio/jedis •  Índice armazenado em RAM •  Persistência em SSD •  Cluster naPvo <dependency>
<groupId>com.aerospike</groupId>
<artifactId>aerospike-client</artifactId>
<version>3.0.0</version>
<type>jar</type>
</dependency>
AerospikeClient client = new AerospikeClient("localhost",3000);
Key key = new Key("test", "demo", "key");
Bin bin1 = new Bin("bin1", "value1");
Bin bin2 = new Bin("bin2", "value2");
String value = jedis.get("foo");
client.put(null, key, bin1, bin2);
Record record = client.get(null, key);
* hip://www.aerospike.com/docs/client/java/ • 
• 
• 
• 
• 
Orientado a documentos Registros desestruturados Persistência em disco Auto-­‐sharding Pesquisa em documentos aninhados <dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.0.2</version>
<type>jar</type>
</dependency>
MongoClient mongoClient = new MongoClient("localhost");
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("test");
*hip://docs.mongodb.org/ecosystem/drivers/java/ {
"name": "example",
"code": 7,
"point": {
"x": 100,
"y": 200
}
}
Document doc = new Document("name", "example")
.append("code", 7)
.append("point",
new Document("x", 100).append("y", 200)
);
collection.insertOne(doc);
Document myDoc = collection.find().first();
*hip://docs.mongodb.org/ecosystem/drivers/java/ Morphia <dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<version>1.0.0</version>
<type>jar</type>
</dependency>
Facilita a manipulação de objetos *hip://mongodb.github.io/morphia/ • 
• 
• 
• 
Orientado a documentos Pesquisa em tempo real Distribuído e escalável O documento todo pode ser indexado <dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>1.6.0</version>
<type>jar</type>
</dependency>
IndexResponse response = client.prepareIndex("myIndex", "docs")
.setSource(json)
.execute()
.actionGet();
GetResponse response = client.prepareGet("myIndex", "docs", "1")
.execute()
.actionGet();
* hips://www.elasPc.co/guide/en/elasPcsearch/client/java-­‐api Sampling 705.166 62ms 1.288.822.081 1,5h 6.931 x 1.190.642.440 651.448 = 12.667.692 Erro ≈ 0.088% 12.678.931 Total de registros conhecido amostragem Total de registros amostrados REDIS 01 REDIS 02 REDIS 03 REDIS 04 for (Jedis jedis : cluster.getAllShards()) {
.
long dbSize = jedis.dbSize();
.
.
String key = jedis.randomKey();
String value = jedis.get(key);
.
.
}
REDIS 05 A
BF 0.728 ED
C
IN OUT Tamanho da amostra final F 0.728 0.314 0.352 0.461 0.816 0.831 Reservoir Sampling private SortedMap<Double, MyObject> reservoir;
.
.
if (reservoir.size() < SAMPLE_SIZE) {
reservoir.put(score, myObject);
} else if (score > reservoir.firstKey()) {
reservoir.remove(reservoir.firstKey());
reservoir.put(score, myObject);
}
Reservoir Sampling Apache Crunch import org.apache.crunch.lib.Sample;
Sample.reservoirSample(Pcollection<T> input, int sampleSize);
Perguntas? Fernando Babadopulos (@babadopulos) Obrigado! Fernando Babadopulos (@babadopulos) 
Download