Porque é que o Hadoop precisa de classes como texto ou escrita em vez de texto ou inteiro?
4 answers
Text
em vez de java String
. A classe Text
do hadoop é semelhante a um java String
, no entanto, Text
implementa interfaces como Comparable
, Writable
e WritableComparable
Estas interfaces são todas necessárias para o MapReduce; a interface Comparable
é usada para comparar quando o redutor ordena as chaves, e Writable
pode escrever o resultado para o disco local. Ele não usa o java Serializable
porque java Serializable
é muito grande ou muito grande pesado para hadoop, Writable
pode ser serializável o objeto hadoop de uma forma muito leve.
Porque em um grande mundo de dados, objetos estruturados precisam ser serializados para um fluxo de bytes para se mover sobre a rede ou persistir para o disco no cluster...e depois voltou a ser desertificado, se necessário. Quando você tem uma grande quantidade de dados, como a escala do Facebook para armazenar e mover, seus dados precisam ser eficientes e tomar o menor espaço possível para armazenar e tempo para se mover.
String
e Integer
são simplesmente demasiado "gordos"."Text
e IntWritable
, respectivamente, fornecem uma abstracção muito mais fácil sobre topo das matrizes de bytes que representam o mesmo tipo de informação.
Mais algumas boas informações:
Eles têm duas características que são relevantes.Eles têm a interface "Writable" - eles sabem como escrever para um fluxo de DataOutput e ler a partir de um fluxo de DataInput-explicitamente.
Eles têm os seus conteúdos actualizados através da operação set (). Isto permite-lhe reutilizar o mesmo valor, repetidamente, sem criar novas instâncias. É muito mais eficiente se o mesmo mapeador ou redutor é chamado repetidamente: você apenas criar suas instâncias do writables in the constructor and reuse them
Em comparação, o framework serializável de Java" magicamente " serializa objetos-mas ele o faz de uma forma que é um pouco frágil e é geralmente impossível de ler em valores gerados por versões mais antigas de uma classe. o fluxo de objetos Java é projetado para enviar um grafo de objetos de volta -ele tem que lembrar cada referência de objeto empurrado para fora já, e fazer o mesmo no caminho de volta. Os writables são projetados para ser self contained.
Isto é ... de: http://hortonworks.com/community/forums/topic/why-hadoop-uses-default-longwritable-or-intwritable/Da documentação Apache Página:
Writable
a interface é descrita como
Com esta nova API, não tens complicações. O processo de serialização com estas novas classes éUm objecto serializável que implementa um protocolo de serialização simples, eficiente, baseado em
DataInput
eDataOutput
.
crisp
e compact
.
Para a eficácia do Hadoop, o processo de serialização/de-serialização deve ser optimizado porque um grande número de chamadas remotas acontecem entre os nós no grupo. Então o formato de serialização deve ser rápida, compacta, extensível e interoperável. Devido a esta razão, o framework Hadoop surgiu com uma classe IO para substituir os tipos de dados primitivos java. por exemplo, IntWritbale
para int
, LongWritable
para long
, Text
para String
, etc.
Você pode encontrar mais detalhes sobre este tópico em Hadoop the definitive guide: 4th Edition