Executar parâmetros de comparação no HBase

Concluído

O YCSB (Yahoo! Cloud Serving Benchmark é um pacote de especificação e programa de software livre para avaliar o desempenho relativo de sistemas de gerenciamento de banco de dados NoSQL. Neste exercício, você executará o parâmetro de comparação para o desempenho de dois clusters HBase, com um deles usando o recurso de gravações aceleradas. Sua tarefa é entender as diferenças de desempenho entre as duas opções. Pré-requisitos do exercício

Caso queira executar as etapas no exercício, verifique se você tem o seguinte:

  • Assinatura do Azure com autorização para criar um cluster HBase do HDInsight.
  • Acesso a um cliente SSH como Putty (Windows)/Terminal (Macbook)

Provisionar cluster HBase do HDInsight com o Portal de Gerenciamento do Azure

Para provisionar o HBase do HDInsight com a nova experiência no Portal de Gerenciamento do Azure, execute as etapas a seguir.

  1. Acesse o portal do Azure. Faça logon usando suas credenciais de conta do Azure.

    Logging into the Azure Portal.

  2. Começamos com a criação de uma Conta de Armazenamento de Blobs de Blocos Premium. Na Nova página, clique em Conta de armazenamento.

    Create a storage account in the Azure Portal.

  3. Na página Criar conta de armazenamento, preencha os campos abaixo

    • Assinatura: deve ser preenchida automaticamente com os detalhes da assinatura

    • Grupo de recursos: insira um grupo de recursos para manter a implantação do HBase do HDInsight

    • Nome da conta de armazenamento: insira um nome para sua conta de armazenamento para uso no cluster Premium.

    • Região: insira o nome da região de implantação (verifique se a conta de armazenamento e o cluster estão na mesma região)

    • Desempenho: Premium

    • Tipo de conta: BlockBlobStorage

    • Replicação: LRS (armazenamento com redundância local)

    • Nome de usuário de logon do cluster: insira o nome de usuário do administrador do cluster (padrão: admin)

      Create storage account screen in the Azure Portal.

  4. Deixe todas as outras guias como padrão e clique em Revisar + criar para criar a conta de armazenamento.

  5. Depois que a conta de armazenamento for criada, clique em Chaves de acesso à esquerda e copie key1. Usaremos isso posteriormente no processo de criação do cluster.

    Storage account Access Keys in the Azure Portal.

  6. Agora vamos iniciar a implantação de um cluster HBase do HDInsight com gravações aceleradas. Selecione Criar um recurso –> Análise –> HDInsight

    Screenshot shows Azure H D insight highlighted in Analytics in the Azure Marketplace.

  7. Na guia Noções básicas, preencha os campos abaixo com o intuito de criar um cluster HBase.

    • Assinatura: deve ser preenchida automaticamente com os detalhes da assinatura

    • Grupo de recursos: insira um grupo de recursos para manter a implantação do HBase do HDInsight

    • Nome do cluster: insira o nome do cluster. Uma marca de seleção verde será exibida caso o nome do cluster esteja disponível.

    • Região: insira o nome da região de implantação

    • Tipo de cluster: tipo de cluster – HBase. Versão – HBase 2.0.0(HDI 4.0)

    • Nome de usuário de logon do cluster: insira o nome de usuário do administrador do cluster (padrão: admin)

    • Senha de logon do cluster: insira a senha para logon do cluster (padrão: sshuser)

    • Confirmar a senha de logon do cluster: confirme a senha inserida na última etapa

    • Nome de usuário do Secure Shell (SSH): insira o usuário de logon SSH (padrão: sshuser)

    • Usar senha de logon do cluster para SSH: marque a caixa para usar a mesma senha para logons de SSH e Ambari etc.

      Define Azure HDInsight settings in the Azure Portal.

  8. Clique em Avançar: Armazenamento para inicializar a guia Armazenamento e preencha os campos abaixo

    • Tipo de armazenamento primário: armazenamento do Azure.

    • Método de seleção: escolha o botão de opção Usar chave de acesso

    • Nome da conta de armazenamento: insira o nome da conta de armazenamento de Blob de blocos Premium criada anteriormente

    • Chave de acesso: insira a chave de acesso key1 que você copiou anteriormente

    • Contêiner: o HDInsight deve propor um nome de contêiner padrão. Você pode escolher essa opção ou criar um nome próprio.

      Define Storage settings for Azure HDInsight in the Azure Portal.

  9. Deixe o restante das opções como estão e role para baixo para marcar a caixa de seleção Habilitar gravações aceleradas do HBase. (Observe que, posteriormente, criaremos um segundo cluster sem gravações aceleradas usando as mesmas etapas, mas com essa caixa desmarcada.)

    Enable HBase accelerated writes in Azure HDInsight in the Azure Portal.

  10. Deixe o painel Segurança + rede com suas configurações padrão, sem alterações, e vá para a guia Configuração + preço.

  11. Na guia Configuração + preços, observe que, agora, a seção Configuração de nó tem um item de linha intitulado Discos Premium por nó de trabalho.

  12. Para o Nó de região, escolha 10 e, para o Tamanho do nó, escolha DS14v2 (você também poderia escolher um número menor de VMs e de SKU de VM, mas verifique se ambos os clusters têm um número idêntico de nós e de SKU da VM para garantir a paridade na comparação).

    Configuring nodes in Azure HDInsight in the Azure Portal.

  13. Clique em Próximo: Revisar + criar

  14. Na guia Revisar e criar, verifique se as Gravações aceleradas do HBase estão habilitadas na seção Armazenamento.

    Azure HDInsight validation in the Azure Portal.

  15. Clique em Criar para iniciar a implantação do primeiro cluster com gravações aceleradas.

  16. Repita as mesmas etapas novamente para criar um segundo cluster HBase do HDInsight, mas, dessa vez, sem gravações aceleradas. Observe as alterações abaixo

    • Use uma conta de armazenamento de blobs normal que seja recomendada por padrão

    • Mantenha a caixa de seleção Habilitar gravações aceleradas desmarcada na guia Armazenamento.

      Screenshot shows Enable Accelerated Writes checkbox unchecked, in the Create H D Insight cluster page.

  17. Na guia Configuração + preços desse cluster, observe que a seção Configuração de nó NÃO tem um item de linha de Discos Premium por nó de trabalho.

  18. Para o Nó de região, escolha 10 e, para o Tamanho do nó, escolha D14v2. (Observe também a falta de tipos de VM da série DS como anteriormente). (Você também poderia escolher um número menor de VMs e de SKU de VM, mas verifique se ambos os clusters têm um número idêntico de nós e de SKU da VM para garantir a paridade na comparação.)

    Configure nodes on Azure HDInsight in the Azure Portal.

  19. Clique em Criar para iniciar a implantação do segundo cluster sem gravações aceleradas.

  20. Agora que terminamos as implantações de cluster, na próxima seção, configuraremos e executaremos testes de YCSB nesses dois clusters.

Execução de testes do YCSB

  1. Faça logon no shell do HDInsight

    • As etapas para configurar e executar testes do YCSB em ambos os clusters são idênticas.

    • Na página de cluster no portal do Azure, navegue até o Logon SSH + cluster e use o nome do host e o caminho do SSH para o ssh no cluster. O caminho deve ter o formato abaixo.

    • ssh <sshuser>@<clustername>.azurehdinsight.net

      Connecting to the Azure HDInsight cluster in the Azure Portal.

  2. Crie a tabela

    • Execute as etapas a seguir para criar as tabelas do HBase, as quais serão usadas para carregar os conjuntos de dados

    • Inicialize o shell do HBase e defina um parâmetro para o número de divisões de tabela. Defina as divisões de tabela (10 * Número de servidores de região)

    • Criar a tabela do HBase, a qual seria usada para executar os testes

    • Saia do shell do HBase

        hbase(main):018:0> n_splits = 100
        hbase(main):019:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}
        hbase(main):020:0> exit
      
  3. Baixe o repositório do YSCB

    • Baixe o repositório do YCSB do destino abaixo

        $ curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz 
      
    • Descompacte a pasta para acessar o conteúdo

        $ tar xfvz ycsb-0.17.0.tar.gz 
      
    • Isso cria uma pasta ycsb-0.17.0. Mova para essa pasta

  4. Execute uma carga de trabalho de gravação intensa em ambos os clusters

    • Use o comando abaixo para iniciar uma carga de trabalho de gravação intensa com os parâmetros abaixo

      • workloads/workloada: indica que a carga/cargas de trabalho anexas precisam ser executadas

      • table: preenche o nome da sua tabela do HBase criada anteriormente

      • columnfamily: preenche o valor do nome da columfamily do HBase da tabela que você criou

      • recordcount: número de registros a serem inseridos (nós usamos 1 milhão)

      • threadcount: número de threads (isso pode variar, mas precisa ser mantido constante entre experimentos)

      • -cp /etc/hbase/conf: ponteiro para definições de configuração do HBase

      • -s | tee -a: forneça um nome de arquivo para gravar a saída.

          bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat
        
    • Execute a carga de trabalho de gravação intensa para carregar 1 milhão de linhas na tabela do HBase criada anteriormente.

    Observação

    Ignore os avisos que podem surgir depois de enviar o comando.

Resultados de exemplo para o HBase do HDInsight com gravações aceleradas

  1. Execute o comando a seguir:

     ```CMD
     $ bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat 
     ```
    
  2. Leia os resultados:

     ```CMD
     2020-01-10 16:21:40:213 10 sec: 15451 operations; 1545.1 current ops/sec; est completion in 10 minutes [INSERT: Count=15452, Max=120319, Min=1249, Avg=2312.21, 90=2625, 99=7915, 99.9=19551, 99.99=113855]
     2020-01-10 16:21:50:213 20 sec: 34012 operations; 1856.1 current ops/sec; est completion in 9 minutes [INSERT: Count=18560, Max=305663, Min=1230, Avg=2146.57, 90=2341, 99=5975, 99.9=11151, 99.99=296703]
     ....
     2020-01-10 16:30:10:213 520 sec: 972048 operations; 1866.7 current ops/sec; est completion in 15 seconds [INSERT: Count=18667, Max=91199, Min=1209, Avg=2140.52, 90=2469, 99=7091, 99.9=22591, 99.99=66239]
     2020-01-10 16:30:20:214 530 sec: 988005 operations; 1595.7 current ops/sec; est completion in 7 second [INSERT: Count=15957, Max=38847, Min=1257, Avg=2502.91, 90=3707, 99=8303, 99.9=21711, 99.99=38015]
     ...
     ...
     2020-01-11 00:22:06:192 564 sec: 1000000 operations; 1792.97 current ops/sec; [CLEANUP: Count=8, Max=80447, Min=5, Avg=10105.12, 90=268, 99=80447, 99.9=80447, 99.99=80447] [INSERT: Count=8512, Max=16639, Min=1200, Avg=2042.62, 90=2323, 99=6743, 99.9=11487, 99.99=16495]
     [OVERALL], RunTime(ms), 564748
     [OVERALL], Throughput(ops/sec), 1770.7012685303887
     [TOTAL_GCS_PS_Scavenge], Count, 871
     [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 3116
     [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.5517505152740692
     [TOTAL_GCS_PS_MarkSweep], Count, 0
     [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
     [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
     [TOTAL_GCs], Count, 871
     [TOTAL_GC_TIME], Time(ms), 3116
     [TOTAL_GC_TIME_%], Time(%), 0.5517505152740692
     [CLEANUP], Operations, 8
     [CLEANUP], AverageLatency(us), 10105.125
     [CLEANUP], MinLatency(us), 5
     [CLEANUP], MaxLatency(us), 80447
     [CLEANUP], 95thPercentileLatency(us), 80447
     [CLEANUP], 99thPercentileLatency(us), 80447
     [INSERT], Operations, 1000000
     [INSERT], AverageLatency(us), 2248.752362
     [INSERT], MinLatency(us), 1120
     [INSERT], MaxLatency(us), 498687
     [INSERT], 95thPercentileLatency(us), 3623
     [INSERT], 99thPercentileLatency(us), 7375
     [INSERT], Return=OK, 1000000
     ```
    
  3. Explore o resultado do teste. Entre algumas observações de exemplo dos resultados acima, podemos ter:

    • O teste levou 538663 milissegundos (8,97 minutos) para executar
    • Return=OK, 1000000 indica que todas as entradas de 1 milhão foram gravadas com êxito, **
    • A taxa de transferência de gravação foi de 1.856 operações por segundo
    • 95% das inserções tiveram uma latência de 3.389 milissegundos
    • Poucas inserções levaram mais tempo; talvez elas tenham sido bloqueadas por servidores de região devido à alta carga de trabalho

Resultados de exemplo para o HBase do HDInsight sem gravações aceleradas

  1. Execute o comando a seguir:

     $ bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat 
    
  2. Leia os resultados:

     2020-01-10 23:58:20:475 2574 sec: 1000000 operations; 333.72 current ops/sec; [CLEANUP: Count=8, Max=79679, Min=4, Avg=9996.38, 90=239, 99=79679, 99.9  =79679, 99.99=79679] [INSERT: Count=1426, Max=39839, Min=6136, Avg=9289.47, 90=13071, 99=27535, 99.9=38655, 99.99=39839]
     [OVERALL], RunTime(ms), 2574273
     [OVERALL], Throughput(ops/sec), 388.45918828344935
     [TOTAL_GCS_PS_Scavenge], Count, 908
     [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 3208
     [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.12461770760133055
     [TOTAL_GCS_PS_MarkSweep], Count, 0
     [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
     [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
     [TOTAL_GCs], Count, 908
     [TOTAL_GC_TIME], Time(ms), 3208
     [TOTAL_GC_TIME_%], Time(%), 0.12461770760133055
     [CLEANUP], Operations, 8
     [CLEANUP], AverageLatency(us), 9996.375
     [CLEANUP], MinLatency(us), 4
     [CLEANUP], MaxLatency(us), 79679
     [CLEANUP], 95thPercentileLatency(us), 79679
     [CLEANUP], 99thPercentileLatency(us), 79679
     [INSERT], Operations, 1000000
     [INSERT], AverageLatency(us), 10285.497832
     [INSERT], MinLatency(us), 5568
     [INSERT], MaxLatency(us), 1307647
     [INSERT], 95thPercentileLatency(us), 18751
     [INSERT], 99thPercentileLatency(us), 33759
     [INSERT], Return=OK, 1000000
    
  3. Compare os resultados:

    Parâmetro Unidade Com gravações aceleradas Sem gravações aceleradas
    [GERAL], RunTime(ms) Milissegundos 567.478 2.574.273
    [OVERALL], Throughput(ops/sec) Operações/s 1770 388
    [INSERT], Operations Nº de operações 1.000.000 1.000.000
    [INSERT], 95thPercentileLatency(us) Microssegundos 3623 18751
    [INSERT], 99thPercentileLatency(us) Microssegundos 7375 33.759
    [INSERT], Return=OK Nº de registros 1.000.000 1.000.000
  4. Entre algumas observações de exemplo que podem ser feitas pelas comparações, temos:

    • [OVERALL], RunTime(ms): tempo total de execução em milissegundos
    • [OVERALL], Throughput(ops/sec): número de operações/s em todos os threads
    • [INSERT], Operations: o número total de operações de inserção, com latências média, mín., máx., média e de percentil 95º e 99º abaixo
    • [INSERT], 95thPercentileLatency(us): 95% das operações de INSERÇÃO têm um ponto de dados abaixo desse valor
    • [INSERT], 99thPercentileLatency(us): 99% das operações de INSERÇÃO têm um ponto de dados abaixo desse valor
    • [INSERT], Return=OK: gravar OK indica que todas as operações de INSERÇÃO foram bem-sucedidas com a contagem ao lado
  5. Cogite experimentar uma variedade de outras cargas de trabalho para fazer comparações. Os exemplos incluem:

    • Maioria lida (95% de leitura e 5% de gravação): workloadb

      bin/ycsb run hbase12 -P workloads/workloadb -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=100000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloadb.dat
      
    • Somente leitura (100% de leitura e 0% de gravação): workloadc

      bin/ycsb run hbase12 -P workloads/workloadc -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=100000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloadc.dat