O recurso de gravação retomável permite escrever dados em mídias de armazenamento com semântica EXACTLY_ONCE. Este tópico descreve como usar o Apache Flink em um cluster E-MapReduce (EMR) para gravar dados no OSS-HDFS de forma retomável.
Exemplo
-
Configurações gerais
Para gravar dados no serviço OSS-HDFS com semântica EXACTLY_ONCE, conclua as seguintes configurações:
-
Ative os checkpoints do Flink.
Exemplo:
-
Crie um objeto StreamExecutionEnvironment conforme o exemplo a seguir.
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); -
Execute o comando a seguir para ativar os checkpoints.
env.enableCheckpointing(<userDefinedCheckpointInterval>, CheckpointingMode.EXACTLY_ONCE);
-
Use uma source de dados que permita replay, como o Kafka.
-
-
Uso básico
Não são necessárias dependências extras. Para gravar dados, use um caminho que comece com o prefixo oss:// e especifique o bucket e o endpoint do serviço OSS-HDFS.
-
Adicione um sink.
O exemplo a seguir mostra como gravar um objeto DataStream<String> no serviço OSS-HDFS.
String outputPath = "oss://{user-defined-oss-hdfs-bucket.oss-hdfs-endpoint}/{user-defined-dir}"; StreamingFileSink<String> sink = StreamingFileSink.forRowFormat( new Path(outputPath), new SimpleStringEncoder<String>("UTF-8") ).build(); outputStream.addSink(sink);ImportanteA parte
.{oss-hdfs-endpoint}do caminho é opcional. Se você omitir essa parte, configure corretamente o endpoint do serviço OSS-HDFS no componente Flink ou Hadoop. Use
env.execute()para executar o job do Flink.
-
(Opcional) Defina configurações personalizadas
Defina parâmetros personalizados ao enviar jobs do Flink para ativar recursos específicos.
Use -yD para configurar o envio de jobs do Flink baseados em YARN:
<flink_home>/bin/flink run -m yarn-cluster -yD key1=value1 -yD key2=value2 ...
A injeção de entropia substitui uma string especificada no caminho de destino por uma string aleatória para distribuir as gravações entre partições e melhorar o desempenho.
Configure os seguintes parâmetros para gravações no OSS-HDFS:
oss.entropy.key=<user-defined-key>
oss.entropy.length=<user-defined-length>
Durante as gravações, a string <user-defined-key> no caminho é substituída por uma string aleatória cujo comprimento é igual a <user-defined-length>. O valor de <user-defined-length> deve ser maior que 0.