Cassandra: Requisições de clientes e integração com Hadoop Jorge Faria Fernandes - 090652 Mycke Richard Guntijo - 090662
Sumário Requisições de Clientes Coordinator Requisições de Leitura Requisições de Leitura em Múltiplos Data Centers Requisições de Escrita
Sumário Hadoop HDFS MapReduce Pig Hive Mahout Sqoop Cassandra File System
Requisições de Clientes Todos os nós no Cassandra são peers. Uma requisição de leitura ou de escrita pode ser destinada a qualquer nó do cluster. Quando um cliente se conecta a um nó do cluster, o respectivo nó se torna o coordinator para tal operação.
Coordinator O papel do nó coordinator é atuar como um proxy entre a aplicação cliente e os nós que possuem os dados requisitados.
Coordinator
Coordinator O nó coordinator determina quais nós do anel devem atender a requisição do cliente baseado em dois parâmetros: Estratégia de replicação de dados; Configuração de particionamento.
Coordinator Estratégia de replicação de dados SimpleStrategy Utilizada em ambientes de single Data Center. Insere a primeira réplica em um nó determinado pelo particionador e as demais são inseridas nos nós do anel que forem mais próximos, no sentido horário.
Coordinator Estratégia de replicação de dados NetworkTopologyStrategy Utilizada em ambientes de múltiplos Data Centers. Determina quantas réplicas haverão em cada Data Center, sendo que elas podem ser em racks diferentes: Duas réplicas por Data Center. Três réplicas por Data Center.
Coordinator Estratégia de replicação de dados
Coordinator Configuração de particionamento Murmur3Partitioner (default) Distribui uniformemente os dados ao longo do cluster de acordo com os valores de hash do MurmurHash. RandomPartitioner Distribui uniformemente os dados ao longo do cluster de acordo com os valores de hash do MD5. ByteOrderedPartitioner Mantém uma distribuição ordenada lexicalmente por chaves de bytes.
Requisições de Escrita O nó coordinator envia uma requisição de escrita para todas as réplicas que contém a row que será gravada. Se todos os nós réplicas estiverem ativos e disponíveis, eles começarão a escrever, independente do nível de consistência especificado pelo cliente. O nível de consistência de escrita determina quantos nós réplicas devem responder com um ack de sucesso para que a gravação seja cosiderada bem sucedida.
Requisições de Escrita "Sucesso" significa que os dados foram escritos no commit log e na memtable.
Requisições de Escrita Níveis de consistência de escrita: ANY: a escrita é realizada com sucesso em pelo menos um nó, incluindo os nós com hinted Handoff. ONE: a escrita é realizada com sucesso no commit log e na memtable de pelo menos um nó réplica. TWO: a escrita é realizada com sucesso no commit log e na memtable de pelo menos dois nós réplicas. THREE: a escrita é realizada com sucesso no commit log e na memtable de pelo menos três nós réplicas. QUORUM: a escrita é realizada com sucesso em um quorum de nós. Quorum = (replication_factor / 2) + 1 *rounded down.
Requisições de Escrita Níveis de consistência de escrita: LOCAL_QUORUM: a escrita é realizada com sucesso em um quorum de nós no mesmo Data Center do nó coordinator. EACH_QUORUM: a escrita é realizada com sucesso em um quorum de nós em cada Data Center. ALL: a escrita é realizada com sucesso em todos os nós réplicas. Se uma das réplicas não responder a operação de escrita é bloqueada ou falha.
Requisições de Escrita Hinted Handoff Para reduzir o tempo de restauração da consistência de um nó que falha após ele retornar ao cluster. Para garantir absoluta disponibilidade de escrita para aplicações não toleráveis a falha de escrita, mas toleráveis a inconsistência de leituras. Quando um réplica está indisponível no momento da escrita, uma réplica ativa armazena uma hint. Hints: A posição da réplica que está indisponível. A chave da row que será inserida posteriormente.
Requisições de Escrita Hinted Handoff Se o nível de consistência de escrita for ANY e todas as réplicas estiverem indisponíveis, a escrita pode ser executada com sucesso. Nesse caso as hints são armazenadas no nó coordinator, mas ficam indisponíveis para leitura até que as réplicas se tornem disponíveis e a escrita seja realizada nelas. O nó coordinator pode armazenar hints independente do nível de consistência, mas caso ele não consiga enviar a hint para as réplicas, caso elas demorem a ficar disponíveis, um TimeOutException é gerado, porém, para o Cassandra um timeout não é considerado falha para
Requisições de Escrita Hinted Handoff Por padrão as hints são armazenadas por uma hora, uma vez que se o tempo for maior que este o nó é considerado morto e nesse caso é necessário utilizar um repair para re-replicar os dados antes da falha ocorrer. Este tempo pode ser configurado através do parâmetro max_hint_window_in_ms no arquivo cassandra.yaml.
Requisições de Escrita
Requisições de Escrita em Múltiplos Data Centers
Requisições de Leitura Existem dois tipos de leituras que um nó coordinator pode enviar para uma réplica: Requisição direta de leitura A quantidade de réplicas contactadas por este tipo de leitura é determinada pelo nível de consistência especificado pelo cliente. Solicitação de repair de leitura em background Tais requisições são enviadas para quaisquer réplicas adicionais que não receberam uma requisição direta, elas garantem que a row requisitada se tornará consistente em todas as réplicas.
Requisições de Leitura Níveis de consistência de leitura: ONE: Retorna uma resposta da réplica mais próxima (determinada pelo snitch). Por padrão, um repair de leitura roda em background para tornar as outras réplicas consistentes.. TWO: Retorna o dado mais recente de duas das réplicas mais próximas. THREE: Retorna o dado mais recente de três das réplicas mais próximas. QUORUM: Retorna o registro com o timestamp mais recente, uma vez que um quorum de réplicas atendeu à solicitação.
Requisições de Leitura Níveis de consistência de leitura: LOCAL_QUORUM: Retorna o registro com o timestamp mais recente, uma vez que um quorum de réplicas do mesmo Data Center que o nó coordinator atendeu à solicitação. Evita a latência de comunicação entre os Data Centers. EACH_QUORUM: Retorna o registro com o timestamp mais recente, uma vez que um quorum de réplicas em cada Data Center do cluster atendeu à solicitação. ALL: Retorna o registro com o timestamp mais recente, uma vez que todas as réplicas atenderam à solicitação. A operação de leitura falhará se uma réplica não responder.
Requisições de Leitura
Hadoop Implementação do algorítmo MapReduce; Alta latência de análise e baixa latência de acesso em tempo real são necessárias; Limitações: Pesquisas repetitivas; Falta de controle de mapeamento e redução.
Hadoop Hadoop Distributed File System; Tolerância a falhas; Reiniciando tarefas; Replicação de dados. Não usado para leituras e escritas randômicas; Execução especulativa.
Hadoop
Hadoop Distributed File System (HDFS) Baseado no Google File System (GFS); Design: Falhas vão ocorrer; Arquivos serão grandes; Uma vez escritos e fechados, serão apenas lidos; Apenas um leitor por vez; Acesso garantido à banda para operações de baixa latência.
Hadoop Distributed File System (HDFS) Arquivos HDFS são unidos em blocos; Dois tipo de nó: NameNode, único, gerencia o namespace: caminho dos mapas de arquivo e nomes com blocos e suas localizações; DataNode, mantém blocos de dados e servidores de requisições r/w de clientes. Decide onde cada bloco de dado replicado é armazenado.
Hadoop Distributed File System (HDFS)
MapReduce Map; Transformar uma entrada de dados em uma saída chave/valor; Reduce; map(key1,value1) -> list<key2,value2> Pega todos os valores de uma chave específica e gera uma nova lista reducida como saída. reduce(key2, list<value2>) -> list<value3>
MapReduce Usualmente HDFS e MapReduce rodam no mesmo datacenter.
HBase Modelado a partir do Google BigTable; Roda em cima do HDFS sanando as mesmas necessidades do uso de BigTable pra Hadoop.
Pig Plataforma para análise de grandes blocos de dados; Linguagem de fluxo de dados orientado a "Pig Latin"; Funções de transformação de dados; Linguagem de alto nível para serialização de dados. Desenvolvido pelo Yahoo!
Pig Operações básicas; LOAD; FOREACH..GENERATE; GROUP; JOIN; DUMP/STORE.
Pig
Hive Baseado em SQL; Análise de grandes quantidades de dados; Processamento de log, mineração de textos, indexação de documentos... Desenvolvido pelo Facebook.
Mahout Componente do Hadoop; Oferece aprendizado; Exemplo: Recomendação de produtos. Gera um.txt da análise.
Sqoop Auxília a transferência de dados entre RDBMS, Hadoop e entre outros, como NoSQL.
Cassandra File System Compressão de blocos com google snappy (Zippy, compressão 250MB/s descompressão 500MB/s); Construido em ColumnFamilies inode e blocks. Dados gravados como ByteBuffer internamente.
HDFS vs CFS Cassandra File System provê uma armazenamento que torna Hadoopmais fácil e rápido de ser aplicado; Baseado em P2P, sem mestre; Completamente transparente, MapReduce, Hive, Pig, Mahout.
HDFS vs CFS Serviços do Hadoop são substituídos, (NameNode, SecundaryNameNode e DataNode); Armazenamento compartilhado não é mais necessário; Performance igual.
Referências 1. Cassandra 1.2 Documentation. http://www.datastax. com/docs/1.2/ 2. Cassandra Consistency level on Write and Read. https://sites.google.com/site/developertips/home/java/howcassandra-writes-and-reads-data 3. Cassandra integration with Hadoop. http://www. datastax.com/docs/datastax_enterprise2.2/solutions/hadoop_index 4. DataStax Combines Hadoop, Cassandra, Hive into One Happy Big Data Family. http: //www.cmswire.com/cms/information-management/datastax-combineshadoop-cassandra-hive-into-one-happy-big-data-family-010661.php
Referências 5. Cassandra The Definitive Guide - O' Reilly. 6. Artigos do DataStax. http://www.datastax.com/wpcontent/uploads/2011/07/brisk_fully_distributed_hadoop.pdf http://www.datastax.com/wpcontent/uploads/2011/04/ds_brisk_datasheet.pdf