Для Hbase, есть ли такая функция, как EXPLAIN в MySQL?

Пожалуйста, потерпите меня, не имея знаний о следующих технологиях.

Мы сделали несколько запросов (60 тыс. Запросов), на выполнение которых уходило 45 минут. Теперь, это займет 3 часа 20 минут примерно столько же. Человека, который его кодировал, больше нет, поэтому мы не до конца знаем, что может происходить.

Руководитель моей команды попросил меня проверить, есть ли в SQL команда вроде EXPLAIN, чтобы узнать, как hbase проходит через регионы при поиске ключа строки. Я пытался гуглить за это, но это не похоже, что есть. Есть ли какая-то команда в Hbase, похожая на EXPLAIN в SQL?

В случае, если это поможет с вопросом, мы храним данные временных рядов. Формат строки:

hashOfName_elementName_epochtime

Мы думаем, что Hbase должен знать, какие регионы следует избегать из-за времени и elementName, к которым мы обращаемся, и, таким образом, не требуется так много времени для запроса, но мы не уверены. Надеемся, что эта команда существует, чтобы мы могли видеть, как запрашивает Hbase, чтобы мы знали, нужно ли нам перепроектировать схему или переделать ключ строки или что количество хранимых данных влияет на скорость.

Обновление: мы запрашиваем временной диапазон для списка элементов. Данные сохраняются раз в минуту для элементов в hbase. Когда мы делаем сканирование, мы можем сканировать в течение 1 часа или 1 дня. Из сообщений отладки я вижу, что когда мы сканируем, мы сканируем этот блок времени.

e.g. hash_elementName_timestamp.  timestamp is a 10 digit epoch time
hash = murmur3_128 hash function of the element name
154_eee_0000000000
154_eee_0000000060
154_eee_0000000120
...
..
154_eee_0000003600

167_aaa_0000000000
167_aaa_0000000060
...
...
167_aaa_0000003600

Вот фрагмент кода из нашего метода сканирования:

public Map<String,String> scan(String name, String columnFamilyName, String columnName, long start, long end,
boolean reversed, int limit) throws IOException {

Map<String,String> m = new LinkedHashMap<String,String>();

Table table = null;
ResultScanner scanner = null;

try {

    String hash = makeHash(name,fType.getNumberOfRegion());
    String key = hash + "_" + name +"_";

    Scan scan;
    if (reversed) {
        //swap the start and end keys when reversed
        scan = new Scan(Bytes.toBytes(key + end),Bytes.toBytes(key + start));
        scan.setReversed(true);
    } else {
        scan = new Scan(Bytes.toBytes(key + start),Bytes.toBytes(key + end));
    }
    scan.addColumn(Bytes.toBytes(columnFamilyName), Bytes.toBytes(columnName));
    table =  fCconnection.getTable(fTablename);
    scanner = table.getScanner(scan);

    int count = 0;
    for (Result result = scanner.next(); result != null; result = scanner.next()) {
        //if a limit was set, then only scan until we hit the limit
        if (limit > 0 && count > limit) {
            break;
        }

        m.put(Bytes.toString(result.getRow()), Bytes.toString((result.getValue(Bytes.toBytes(columnFamilyName), Bytes.toBytes(columnName)))));
        count++;
    }

1 ответ

Ну, HBase - это не SQL. Таким образом, у вас нет объяснения. В вашем случае вам необходимо изучить поведение запросов и начать настройку. Я знаю это заявление очень высокого уровня.

Вы упомянули, что у вас есть вопросы. Как вы их исполняете? Пожалуйста, добавьте детали - для получения дополнительной информации

Другие вопросы по тегам