Выполнение теста производительности в HBase

Завершено

Yahoo ! Cloud Serving Benchmark (YCSB) — это спецификация с открытым исходным кодом и набор программ для оценки относительной производительности систем управления базами данных NoSQL. В этом упражнении вы запустите тест производительности для двух кластеров HBase, один из которых использует функцию ускоренной записи. Задача состоит в том, чтобы понять различия в производительности между двумя вариантами. Предварительные требования для выполнения упражнения

Для выполнения упражнения убедитесь, что у вас есть следующее:

  • подписка Azure с правами на создание кластера HDInsight HBase;
  • доступ к клиенту SSH, например Putty (Windows) или "Терминал" (MacBook).

Подготовка кластера HDInsight HBase с помощью портала управления Azure

Ниже представлен порядок подготовки HDInsight HBase с новым интерфейсом на портале управления Azure.

  1. Переход на портал Azure. Войдите, используя учетные данные Azure.

    Logging into the Azure Portal.

  2. Начнем с создания учетной записи хранилища блочных BLOB-объектов категории "Премиум". На странице "Создать" щелкните Учетная запись хранения.

    Create a storage account in the Azure Portal.

  3. На странице "Создание учетной записи хранения" заполните указанные ниже поля.

    • Подписка: в поле должны автоматически указываться сведения о подписке.

    • Группа ресурсов: введите группу ресурсов для хранения развертывания HDInsight HBase.

    • Имя учетной записи хранения: введите имя учетной записи хранения для использования в кластере категории "Премиум".

    • Регион: введите название региона развертывания (убедитесь, что кластер и учетная запись хранения находятся в одном регионе).

    • Производительность: выберите "Премиум".

    • Тип учетной записи: BlockBlobStorage.

    • Репликация: локально избыточное хранилище (LRS).

    • Имя пользователя для входа в кластер: введите имя пользователя для администратора кластера (по умолчанию: admin).

      Create storage account screen in the Azure Portal.

  4. На всех остальных вкладках оставьте значения по умолчанию и нажмите Проверка и создание, чтобы создать учетную запись хранения.

  5. После создания учетной записи хранения щелкните Ключи доступа слева и скопируйте key1. Мы будем использовать его позже в процессе создания кластера.

    Storage account Access Keys in the Azure Portal.

  6. Теперь начнем развертывание кластера HDInsight HBase с функцией ускоренной записи. Выберите Создать ресурс> -> Аналитика -> >HDInsight.

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

  7. На вкладке "Основные сведения" заполните указанные ниже поля, чтобы создать кластер HBase.

    • Подписка: в поле должны автоматически указываться сведения о подписке.

    • Группа ресурсов: введите группу ресурсов для хранения развертывания HDInsight HBase.

    • Имя кластера: введите имя кластера. Если имя кластера доступно, появится зеленый флажок.

    • Регион: введите название региона развертывания.

    • Тип кластера: "Тип кластера" — HBase. "Версия" — HBase 2.0.0 (HDI 4.0).

    • Имя пользователя для входа в кластер: введите имя пользователя для администратора кластера (по умолчанию: admin).

    • Пароль для входа в кластер: введите пароль для входа в кластер (по умолчанию: sshuser).

    • Подтверждение пароля для входа в кластер: подтвердите пароль, введенный на предыдущем шаге.

    • Имя пользователя Secure Shell (SSH): введите имя пользователя SSH для входа (по умолчанию: sshuser).

    • Использовать логин и пароль кластера при подключении через SSH: установите этот флажок, чтобы использовать один и тот же пароль для имен входа SSH и имен входа Ambari.

      Define Azure HDInsight settings in the Azure Portal.

  8. Нажмите Далее: хранилище, чтобы перейти на вкладку "Хранилище", и заполните указанные ниже поля.

    • Тип основного хранилища: выберите "Служба хранилища Azure".

    • Метод выбора: выберите переключатель "Использовать ключ доступа".

    • Имя учетной записи хранения: введите имя учетной записи хранения блочного BLOB-объекта категории "Премиум", созданной ранее.

    • Ключ доступа: введите ключ доступа key1, скопированный ранее.

    • Контейнер: HDInsight должен предложить имя контейнера по умолчанию. Можно либо выбрать его, либо указать собственное имя.

      Define Storage settings for Azure HDInsight in the Azure Portal.

  9. Оставьте остальные параметры без изменения и прокрутите вниз, чтобы установить флажок "Включить ускоренную запись HBase". (Обратите внимание, что позже мы создадим второй кластер без функции ускоренной записи, используя те же действия, только флажок будет снят.)

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

  10. Оставьте в колонке Безопасность и сеть параметры по умолчанию без изменений и перейдите на вкладку Конфигурация и цены.

  11. На вкладке Конфигурация и цены в разделе Конфигурация узла теперь имеется пункт Диски категории "Премиум" на рабочий узел.

  12. Для параметра "Узел региона" выберите 10, а для параметра Размер узла выберите DS14v2 (можно также выбрать меньшее количество виртуальных машин и их ценовую категорию, однако следует убедиться, что оба кластера имеют одинаковое число узлов и номер SKU виртуальной машины, чтобы обеспечить равенство при сравнении).

    Configuring nodes in Azure HDInsight in the Azure Portal.

  13. Нажмите Далее: проверка и создание.

  14. На вкладке "Проверка и создание" убедитесь, что в разделе Хранилище включен параметр Ускоренная запись HBase.

    Azure HDInsight validation in the Azure Portal.

  15. Нажмите Создать, чтобы начать развертывание первого кластера с ускоренной записью.

  16. Повторите эти же действия, чтобы создать второй кластер HDInsight HBase, но на этот раз без функции ускоренной записи. Обратите внимание на следующие изменения.

    • Укажите обычную учетную запись хранения BLOB-объектов, рекомендуемую по умолчанию.

    • Не устанавливайте флажок "Включить ускоренную запись" на вкладке "Хранилище".

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

  17. На вкладке Конфигурация и цены для этого кластера обратите внимание на то, что в разделе "Конфигурация узла" ОТСУТСТВУЕТ элемент Диски категории "Премиум" на рабочий узел.

  18. Для параметра "Узел региона" выберите 10, а для параметра "Размер узла" выберите DS14v2. (Также обратите внимание на отсутствие виртуальных машин серии DS, которые были ранее.) (Можно также выбрать меньшее количество виртуальных машин и их ценовую категорию, однако следует убедиться, что оба кластера имеют одинаковое число узлов и номер SKU виртуальной машины, чтобы обеспечить равенство при сравнении.)

    Configure nodes on Azure HDInsight in the Azure Portal.

  19. Нажмите Создать, чтобы начать развертывание второго кластера с ускоренной записью.

  20. Теперь после развертывания кластеров мы перейдем к настройке и запуску тестов YCSB для обоих кластеров.

Выполнение тестов YCSB

  1. Войдите в оболочку HDInsight.

    • Действия по настройке и запуску тестов YCSB для обоих кластеров идентичны.

    • На странице кластера на портале Azure перейдите к разделу "SSH и вход в кластер" и укажите имя узла и путь SSH для подключения к кластеру по протоколу SSH. Путь должен иметь следующий формат:

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

      Connecting to the Azure HDInsight cluster in the Azure Portal.

  2. Создайте таблицу.

    • Выполните приведенные ниже действия, чтобы создать таблицы HBase, которые будут использоваться для загрузки наборов данных.

    • Запустите оболочку HBase и задайте количество частей, на которое следует разделить таблицу. Укажите количество частей, на которое следует разделить таблицу (10 * количество региональных серверов).

    • Создайте таблицу HBase, которая будет использоваться для выполнения тестов.

    • Запустите оболочку 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. Скачайте репозиторий YSCB.

    • Скачайте репозиторий YSCB по указанному ниже адресу.

        $ curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz 
      
    • Распакуйте папку для доступа к содержимому.

        $ tar xfvz ycsb-0.17.0.tar.gz 
      
    • При этом будет создана папка ycsb-0.17.0. Перейдите в эту папку.

  4. Выполните рабочую нагрузку с интенсивной записью в оба кластера.

    • Используйте приведенную ниже команду, чтобы запустить рабочую нагрузку с интенсивной записью с указанными ниже параметрами.

      • workloads/workloada: указывает, что для запуска необходимо добавить рабочие нагрузки.

      • table: укажите имя своей таблицы HBase, созданной ранее.

      • columnfamily: укажите значение имени columfamily HBase из созданной таблицы.

      • recordcount: количество вставляемых записей (мы используем 1 000 000).

      • threadcount: количество потоков (может быть разным, но должно быть одинаковым в экспериментах).

      • -cp /etc/hbase/conf: указатель на параметры конфигурации HBase.

      • -s | tee -a: укажите имя файла для записи выходных данных.

          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
        
    • Запустите рабочую нагрузку с интенсивной записью, чтобы загрузить 1 000 000 строк в ранее созданную таблицу HBase.

    Примечание.

    Игнорируйте предупреждения, которые могут появиться после отправки команды.

Пример результатов для HDInsight HBase с ускоренной записью

  1. Выполните следующую команду:

     ```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. Прочитайте результаты.

     ```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. Изучите результаты теста. Вот некоторые примеры наблюдений на основе приведенных выше результатов.

    • Выполнение теста заняло 538 663 миллисекунды (8,97 минуты).
    • "Return = ОК, 1000000" означает, что весь 1 000 000 входных данных был успешно записан **.
    • Пропускная способность записи составила 1856 операций в секунду.
    • 95 % операций вставки имели задержку 3389 миллисекунд.
    • Некоторые операции вставки заняли больше времени (возможно, они были заблокированы региональными серверами из-за высокой рабочей нагрузки).

Пример результатов для HDInsight HBase без ускоренной записи

  1. Выполните следующую команду:

     $ 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. Прочитайте результаты.

     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. Сравните результаты.

    Параметр Единица измерения С ускоренной записью Без ускоренной записи
    [OVERALL], RunTime(ms) Миллисекунды 567 478 2 574 273
    [OVERALL], Throughput(ops/sec) Операций/с 1770 388
    [INSERT], Operations Количество операций 1000 000 1000 000
    [INSERT], 95thPercentileLatency(us) Микросекунды 3623 18751
    [INSERT], 99thPercentileLatency(us) Микросекунды 7375 33759
    [INSERT], Return=OK Количество записей 1000 000 1000 000
  4. Ниже приведены некоторые примеры наблюдений на основе результатов сравнения.

    • [OVERALL], RunTime(ms): общее время выполнения в миллисекундах.
    • [OVERALL], Throughput(ops/sec): количество операций в секунду во всех потоках.
    • [INSERT], Operations: общее количество операций вставки со связанными средней задержкой, минимальной задержкой, максимальной задержкой, 95%-ным и 99%-ным процентилем задержки ниже указанного значения.
    • [INSERT], 95thPercentileLatency(us): 95 % операций INSERT имеет точку данных ниже этого значения.
    • [INSERT], 99thPercentileLatency(us): 99 % операций INSERT имеет точку данных ниже этого значения.
    • [INSERT], Return=OK: значение Record OK означает, что все операции INSERT были успешно выполнены. Рядом указано количество таких операций.
  5. Попробуйте выполнить ряд других рабочих нагрузок для сравнения. Вот некоторые примеры.

    • Прочитана большая часть (95 % чтения и 5 % записи) : 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
      
    • Только чтение (100 % чтения и 0 % записи): 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