Key Value System Client API
- Visão Geral
- Acessando o Sistema Key-Value em Aplicações Java
- Acessando o Sistema Key-Value dentro do Hadoop MapReduce
- Parametros de Configuração para o Sistema Key-Value
Visão Geral
Além do Filesystem API que permite as aplicações de ler, escrever ou
gerenciar arquivos, o Alluxio também servir como um sistema key-value
sobre o Alluxio
file system
. Assim como nos arquivos do Alluxio file system
, a semântica no sistema
key-value
também são escritas uma única vez:
- Os usuários podem criar um armazenamento
key-value
e inserir pareskey-value
no armazenamento. O armazenamento se torna imutável assim que estiver concluído. - Os usuários podem abrir o armazenamento
key-value
depois que estiver concluído.
Cada armazenamento único key-value
é indicado por um AlluxioURI
como
alluxio://path/my-kvstore
. Dependendo do tamanho total e do tamanho do bloco utilizado pelo
usuário, um único armazenamento key-value
pode consistir de uma ou múltiplas partições mas
é gerenciado interamente pelo Alluxio e é transparente para o usuário.
Acessando o Sistema Key-Value em Aplicações Java
Obtendo um Key-Value System Client
Para obter um Alluxio key-value system client
em código Java
, execute:
KeyValueSystem kvs = KeyValueSystem.Factory.create();
Criando um novo armazenamento key-value
Para criar um novo armazenamento key-valye
, utilize KeyValueSystem#createStore(AlluxioURI)
,
que retorna um escritor
para adicionar o par key-value
. Por exemplo:
KeyValueStoreWriter writer = kvs.createStore(new AlluxioURI("alluxio://192.168.1.200:19998/path/my-kvstore"));
// Insert key-value pair ("100", "foo")
writer.put("100", "foo");
// Insert key-value pair ("200", "bar")
writer.put("200", "bar");
// Close and complete the store
writer.close();
Atentem que:
- Antes que o
escritor
feche, o armazenamento não está completo e não pode ser lido; - É possível que o armazenamento seja maior que o tamanho máximo permitido de uma partição, e
neste caso, o
escritor
vai armazenar os pareskey-value
em múltiplas partições. Esta operação é transparente. - As chaves para inserir devem ser ordenadas e não podem possuir valores duplicados.
Readquirindo valores de um armazenamento
Para buscar um armazenamento key-value
completo, utilize o KeyValueSystem#openStore(AlluxioURI)
,
que retorna um leitor
para buscar o valor por chave. Por exemplo:
KeyValueStoreReader reader = kvs.openStore(new AlluxioURI("alluxio://192.168.1.200:19998/path/kvstore/"));
// Return "foo"
reader.get("100");
// Return null as no value associated with "300"
reader.get("300");
// Close the reader on the store
reader.close();
Interagindo pares key-value sobre um armazenamento
KeyValueStoreReader reader = kvs.openStore(new AlluxioURI("alluxio://192.168.1.200:19998/path/kvstore/"));
KeyValueIterator iterator = reader.iterator();
while (iterator.hasNext()) {
KeyValuePair pair = iterator.next();
ByteBuffer key = pair.getkKey();
ByteBuffer value = pair.getValue();
}
// Close the reader on the store
reader.close()
Acessando o Sistema Key-Value dentro do Hadoop MapReduce
MapReduce InputFormat
O Alluxio provê uma implementação do InputFormat
para os programas Hadoop MapReduce
acessarem
o armazenamento key-value
. Este obtém um key-value URI
e emite um par key-value
que está
no armazenamento:
conf.setInputFormat(KeyValueInputFormat.class);
FileInputFormat.setInputPaths(conf, new Path("alluxio://192.168.1.200:19998/input-store"));
MapReduce OutputFormat
Similarmente, o Alluxio também provê implementações de OutputFormat
e OutputCommitter
para
que programas Hadoop MapReduce
criem armazenamentos key-value
através de um key-value URI
,
e salvem os pares key-value
em um armazenamento key-value
:
conf.setOutputKeyClass(BytesWritable.class);
conf.setOutputValueClass(BytesWritable.class);
conf.setOutputFormat(KeyValueOutputFormat.class);
FileOutputFormat.setOutputPath(conf, new Path("alluxio://192.168.1.200:19998/output-store"));
Parametros de Configuração para o Sistema Key-Value
O suporte a key-value
no Alluxio está desabilitado por padrão e pode ser habilitado no
Alluxio através da alteração do parametro alluxio.keyvalue.enabled
para true
(veja os parametros de configuração)
Property Name | Default | Meaning |
---|---|---|
alluxio.keyvalue.enabled | false | Whether the key-value service is enabled. |
alluxio.keyvalue.partition.size.bytes.max | 512MB | Maximum allowable size of a single key-value partition in a store. This value should be no larger than the block size (alluxio.user.block.size.bytes.default). |