Considerações e limitações para usar o Hudi no Amazon EMR - Amazon EMR

Considerações e limitações para usar o Hudi no Amazon EMR

  • O campo de chave de registro não pode ser nulo nem estar em branco: o campo especificado como o campo de chave de registro não pode ter valores null nem em branco.

  • Esquema atualizado por padrão na atualização e inserção — o Hudi fornece uma interface HoodieRecordPayload que determina como o DataFrame de entrada e o conjunto de dados Hudi existente são mesclados para produzir um conjunto de dados novo e atualizado. O Hudi fornece uma implementação padrão dessa classe, OverwriteWithLatestAvroPayload, que substitui os registros existentes e atualiza o esquema conforme especificado no DataFrame de entrada. Para personalizar essa lógica a fim de implementar atualizações parciais e de mesclagem, é possível fornecer uma implementação da interface HoodieRecordPayload usando o parâmetro DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY.

  • A exclusão requer um esquema: ao excluir, você precisa especificar a chave de registro, a chave de partição e os campos de chave de pré-combinação. Outras colunas podem ficar null ou em branco, mas o esquema completo é necessário.

  • Limitações das tabelas MoR: as tabelas MoR não são compatíveis com pontos de salvamento. Você pode consultar tabelas MoR usando a visão otimizada para leitura ou a visão em tempo real (tableName_rt) do Spark SQL, Presto ou Hive. O uso da visão otimizada para leitura expõe apenas os dados do arquivo básico e não expõe uma visão mesclada dos dados básicos e de log.

  • Hive

    • Para registrar tabelas no metastore do Hive, o Hudi espera que o servidor Thrift do Hive esteja em execução na porta padrão 10000. Se você substituir essa porta por uma porta personalizada, transmita a opção HIVE_URL_OPT_KEY conforme mostrado no exemplo a seguir.

      .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:override-port-number
    • O tipo de dados timestamp no Spark é registrado como tipo de dados long no Hive, e não como o tipo timestamp do Hive.

  • Presto

    • O Presto não é compatível com a leitura de tabelas MoR em tempo real em versões do Hudi anteriores à 0.6.0.

    • O Presto só oferece suporte a consultas de snapshots.

    • Para o Presto interpretar corretamente colunas de conjuntos de dados do Hudi, defina o valor hive.parquet_use_column_names como true.

      • Para definir o valor de uma sessão, execute o seguinte comando no shell Presto:

        set session hive.parquet_use_column_names=true
      • Para definir o valor no nível do cluster, use a classificação de configuração presto-connector-hive para definir hive.parquet.use_column_names como true, conforme mostrado no exemplo a seguir. Para obter mais informações, consulte Configurar aplicações.

        [ { "Classification": "presto-connector-hive", "Properties": { "hive.parquet.use-column-names": "true" } } ]
  • Índice do HBase

    • A versão do HBase usada para criar o Hudi pode ser diferente da listada no Guia de versões do EMR. Para extrair as dependências corretas da sua sessão do Spark, acesse o comando a seguir.

      spark-shell \ --jars /usr/lib/spark/external/lib/spark-avro.jar,/usr/lib/hudi/cli/lib/*.jar \ --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \ --conf "spark.sql.hive.convertMetastoreParquet=false"