Realizar benchmarking no HBase

Concluído

O Yahoo! Cloud Serving Benchmark (YCSB) é uma especificação de código aberto e pacote de programas para avaliar o desempenho relativo de sistemas de gerenciamento de banco de dados NoSQL. Neste exercício, você executará o benchmark para o desempenho de dois clusters HBase, um dos quais está usando o recurso de gravação acelerada. Sua tarefa é entender as diferenças de desempenho entre as duas opções. Pré-requisitos do exercício

Se você deseja executar as etapas do exercício, certifique-se de ter o seguinte:

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

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

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

  1. Aceda ao portal do Azure. Faça logon usando suas credenciais de conta do Azure.

    Logging into the Azure Portal.

  2. Começaríamos com a criação de uma Conta de Armazenamento de Blob de Bloco 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 o cluster e a conta de armazenamento estão na mesma região)

    • Desempenho: Premium

    • Tipo de conta: BlockBlobStorage

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

    • Nome de utilizador de início de sessão do cluster: Introduza o nome de utilizador para o administrador do cluster (predefiniçã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 a chave1. Usaríamos isso mais tarde no processo de criação do cluster.

    Storage account Access Keys in the Azure Portal.

  6. Vamos agora começar a implantar um cluster HBase HDInsight com gravações aceleradas. Selecione Criar um recurso - Analytics ->> 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 para a criação de 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 aparecerá se o nome do cluster estiver 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 utilizador de início de sessão do cluster: Introduza o nome de utilizador para o administrador do cluster (predefinição:admin)

    • Senha de login do cluster: digite a senha para o login do cluster (padrão:sshuser)

    • Confirmar palavra-passe de início de sessão do Cluster: Confirme a palavra-passe introduzida no último passo

    • Nome de usuário do Secure Shell(SSH): insira o usuário de login SSH (default:sshuser)

    • Use a senha de login do cluster para SSH: Marque a caixa para usar a mesma senha para logins SSH e Logins Ambari etc.

      Define Azure HDInsight settings in the Azure Portal.

  8. Clique em Next:Storage para iniciar a guia Storage e preencher os campos abaixo

    • Tipo de armazenamento principal: Armazenamento do Azure.

    • Método de seleção: Escolha o botão de opção Use a tecla de acesso

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

    • Chave de Acesso: Introduza a chave de acesso key1 que copiou anteriormente

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

      Define Storage settings for Azure HDInsight in the Azure Portal.

  9. Deixe o restante das opções intactas e role para baixo para marcar a caixa de seleção Ativar gravações aceleradas do HBase. (Observe que mais tarde estaríamos criando um segundo cluster sem gravações aceleradas usando as mesmas etapas, mas com esta caixa desmarcada.)

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

  10. Deixe a folha Segurança + Rede para suas configurações padrão sem alterações e vá para a guia Configuração + preço.

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

  12. Escolha o nó Região para 10 e Tamanho do Nó para DS14v2 (você pode escolher números menores de VMs e SKU de VM menor, mas garantir que ambos os clusters tenham número idêntico de nós e SKU de VM para garantir paridade em comparação)

    Configuring nodes in Azure HDInsight in the Azure Portal.

  13. Clique em Seguinte : Rever + Criar

  14. Na guia Revisar e Criar, verifique se Gravações Aceleradas do HBase está Habilitado na seção Armazenamento .

    Azure HDInsight validation in the Azure Portal.

  15. Clique em Criar para começar a implantar o primeiro cluster com gravações aceleradas.

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

    • Usar uma conta de armazenamento de blob normal recomendada por padrão

    • Mantenha a caixa de seleção Ativar 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ço para este cluster, observe que a seção Configuração do nó NÃO tem um disco Premium por item de linha do nó de trabalho.

  18. Escolha o nó Região como 10 e o Tamanho do nó como D14v2.( Observe também a falta de tipos de VM da série DS, como anteriormente). (você pode escolher números menores de VMs e SKUs de VM menores, mas garantir que ambos os clusters tenham o mesmo número de nós e SKU de VM para garantir a paridade em 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 YCSB em ambos os clusters.

Executando testes YCSB

  1. Faça login no shell do HDInsight

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

    • Na página do cluster no portal do Azure, navegue até o logon SSH + Cluster e use o nome do host e o caminho SSH para 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. Criar a tabela

    • Execute as etapas abaixo para criar as tabelas do HBase, que serão usadas para carregar os conjuntos de dados

    • Inicie o HBase Shell e defina um parâmetro para o número de divisões de tabela. Definir as divisões da tabela (10 * Número de Servidores de Região)

    • Crie a tabela HBase, que 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. Faça o download do YSCB Repo

    • Faça o download do repositório YCSB a partir 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 criaria uma pasta ycsb-0.17.0. Mover para esta pasta

  4. Executar uma carga de trabalho pesada de gravação em ambos os clusters

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

      • cargas de trabalho/workloada : indica que a carga de trabalho/carga de trabalho de acréscimo precisa ser executada

      • table: preencha o nome da tabela do HBase criada anteriormente

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

      • recordcount: Número de registos a inserir( usamos 1 milhão)

      • threadcount: Número de threads( isso pode ser variado, mas precisa ser mantido constante em todos os experimentos)

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

      • -s | tee -a: Forneça um nome de arquivo para gravar sua 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 pesada de gravação para carregar 1 milhão de linhas na tabela HBase criada anteriormente.

    Nota

    Ignore os avisos que você pode ver depois de enviar o comando.

Exemplos de resultados para HDInsight HBase com gravações aceleradas

  1. Execute o seguinte comando:

     ```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. Alguns exemplos de observações dos resultados acima podem incluir:

    • O teste levou 538663 (8,97 minutos) milissegundos para ser executado
    • Return=OK, 1000000 indica que todas as entradas de 1 milhão foram gravadas com êxito, **
    • A taxa de transferência de gravação estava em 1856 operações por segundo
    • 95% das pastilhas tinham uma latência de 3389 milissegundos
    • Poucas inserções levaram mais tempo, talvez tenham sido bloqueadas por cortes de região devido à alta carga de trabalho

Exemplos de resultados para HDInsight HBase sem gravações aceleradas

  1. Execute o seguinte comando:

     $ 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 567478 2574273
    [GERAL], Taxa de transferência (ops/seg) Operações/seg 1770 388
    [INSERIR], Operações # de Operações 1000000 1000000
    [INSERIR], 95º PercentileLatency(us) Microssegundos 3623 18751
    [INSERIR], 99º PercentileLatency(us) Microssegundos 7375 33759
    [INSERIR], Return=OK # de registos 1000000 1000000
  4. Alguns exemplos de observações que podem ser feitas das comparações incluem:

    • [GERAL], RunTime(ms) : Tempo total de execução em milissegundos
    • [GERAL], Taxa de transferência (ops/seg): Número de operações/s em todos os threads
    • [INSERT], Operações: Número total de operações de inserção, com latências médias associadas, mínimas, máx, percentis 95 e 99 abaixo
    • [INSERT], 95thPercentileLatency(us): 95% das operações INSERT têm um ponto de dados abaixo deste valor
    • [INSERT], 99thPercentileLatency(us): 99% das operações INSERT têm um ponto de dados abaixo deste valor
    • [INSERT], Return=OK: Record OK indica que todas as operações INSERT foram bem-sucedidas com a contagem ao lado
  5. Considere experimentar uma série de outras cargas de trabalho para fazer comparações. Exemplos incluem:

    • Principalmente Ler (95% Ler e 5% Escrever) : carga de trabalhob

      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 & 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