Nesta apresentação é demonstrado alguns recursos disponíveis num cluster Hadoop, bem como os principais componentes do ecossistema utilizado no Magazine Luiza. Além disso, temos uma comparação com grandes nomes do mercado que também utilizam esta tecnologia.
16. MapReducecomPYdoop
import pydoop.mapreduce.api as api
import pydoop.mapreduce.pipes as pp
class Mapper(api.Mapper):
def map(self, context):
words = context.value.split()
for w in words:
context.emit(w, 1)
class Reducer(api.Reducer):
def reduce(self, context):
s = sum(context.values)
context.emit(context.key, s)
def __main__():
pp.run_task(pp.Factory(Mapper, Reducer))
20. Hive
Criado pelo Facebook
Expõe MapReduce como SQL
Mapeia arquivos gigantescos
Suporta compressão (particionável)
Recursos e síntaxe similares ao MySQL
Analítico
21. Hiveemação
hive> select keyword, count(1) total from searches group by keyword order by
total desc limit 10;
Hadoop job information for Stage-1: number of mappers: 70; number of reducers:
2
2016-05-17 11:39:27,729 Stage-1 map = 0%, reduce = 0%
2016-05-17 11:40:12,255 Stage-1 map = 100%, reduce = 100%, Cumulative CPU
406.39 sec
OK
sofa 138361
tablet 125837
fogao 106451
geladeira 99641
notebook 92787
celular 92195
tv 87594
iphone 82045
microondas 75806
Time taken: 116.755 seconds, Fetched: 10 row(s)
26. Impala
Usa engine própria (MPP)
Usa metadados do Hive
Aproveita-se bem do Apache Parquet
Bilhões de linhas em pouquíssimos
segundos
Performance linear ao tamanho do cluster
27. Impalaesuasbilhõesdelinhasempoucossegundos
impala-shell> select count(1) total from price_changes;
+------------+
| total |
+------------+
| 2127126382 |
+------------+
Returned 1 row(s) in 2.11s
impala-shell> select status, count(1) total from price_changes group by status;
+-----------+------------+
| status | total |
+-----------+------------+
| 0 | 2119762471 |
| 1 | 7363911 |
+-----------+------------+
Returned 2 row(s) in 2.82s
28.
29. HBase
Baseado no Google BigTable
Colunar (dinâmico): trilhões de colunas e
linhas
Acesso aleatório e em tempo-real
Divide chaves em regiões, que estão em
diferentes máquinas
30. ClientenoHBase
hbase> get customers, '40019869212'
COLUMN CELL
cliente:nomcli
timestamp=1462020386697, value=NELSON FORTE
cliente:numdoc
timestamp=1462020386697, value=598745328
cliente:origem
timestamp=1462020386697, value=ERP
cliente:qtcompras
timestamp=1462020386697, value=3
cliente:sexo
timestamp=1462020386697, value=M
1 row(s) in 0.0910 seconds
32. Pig
Pig Latin
Simplicidade nas expressões
Constrói resultados analíticos com
MapReduce
ETL sobre grandes dados
Extensível (Java, Python, Ruby,
33. Relacionandobasesdecliente
grunt> set output.compression.enable true;
grunt> set output.compression.codec com.hadoop.compression.lzo.LzopCodec;
erp = LOAD 'hbase://customers_erp' USING
org.apache.pig.backend.hadoop.hbase.HBaseStorage('client:customer_id', '-
loadKey=true') AS (id:bytearray, name_erp:chararray);
site = LOAD 'hbase://customers_site' USING
org.apache.pig.backend.hadoop.hbase.HBaseStorage('client:name', '-loadKey=true') AS
(id:bytearray, name_site:chararray);
joined = JOIN erp BY id, site BY id;
stripped = FOREACH joined GENERATE name_erp, LOWER(name_erp) AS lowered_name_erp,
name_site, LOWER(name_site) AS lowered_name_site;
rmf /data/customers/joined
STORE stripped INTO '/data/customers/joined' USING PigStorage('|');
34.
35. Sqoop
Importador de dados estruturados pro HDFS
e vice-versa
Distribui a importação pelas máquinas
(via MapReduce)
Configuração simples
Servidor de Jobs
Resolve problema de leitura sequencial e aleatório (100MB/s) de um disco rígido, distribuindo partes do arquivo em várias máquinas
Taxa de transferência dos discos atuais é muito maior que a velocidade de busca
B-Trees funcionam bem até os gigabytes nessa taxa de transferência
HDDs tem normalmente blocos de 512 bytes
Ext4 tem blocos de 4 Kb
HDFS tem blocos de 128 Mb
Suporta:
S3
FTP
RAID distribuído
Local
WebHDFS (REST)