Executar parâmetros de comparação no HBase
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.
Acesse o portal do Azure. Faça logon usando suas credenciais de conta do Azure.
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.
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)
Deixe todas as outras guias como padrão e clique em Revisar + criar para criar a conta de armazenamento.
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.
Agora vamos iniciar a implantação de um cluster HBase do HDInsight com gravações aceleradas. Selecione Criar um recurso –> Análise –> HDInsight
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.
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.
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.)
Deixe o painel Segurança + rede com suas configurações padrão, sem alterações, e vá para a guia Configuração + preço.
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.
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).
Clique em Próximo: Revisar + criar
Na guia Revisar e criar, verifique se as Gravações aceleradas do HBase estão habilitadas na seção Armazenamento.
Clique em Criar para iniciar a implantação do primeiro cluster com gravações aceleradas.
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.
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.
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.)
Clique em Criar para iniciar a implantação do segundo cluster sem gravações aceleradas.
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
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
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
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
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
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 ```
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 ```
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
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
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
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 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
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