Realizar benchmarking no HBase
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.
Aceda ao portal do Azure. Faça logon usando suas credenciais de conta do Azure.
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.
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)
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 a chave1. Usaríamos isso mais tarde no processo de criação do cluster.
Vamos agora começar a implantar um cluster HBase HDInsight com gravações aceleradas. Selecione Criar um recurso - Analytics ->> HDInsight
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.
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.
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.)
Deixe a folha Segurança + Rede para suas configurações padrão sem alterações e vá para a guia Configuração + preço.
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.
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)
Clique em Seguinte : Rever + Criar
Na guia Revisar e Criar, verifique se Gravações Aceleradas do HBase está Habilitado na seção Armazenamento .
Clique em Criar para começar a implantar o primeiro cluster com gravações aceleradas.
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.
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.
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)
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 YCSB em ambos os clusters.
Executando testes YCSB
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>
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
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
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
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 ```
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. 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
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
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 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 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
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