Mam tabelę w Hbase, powiedzmy "tbl" i chciałbym zapytać o nią przy użyciu Ula Hive. Dlatego odwzorowane stół do ula następująco:Tuning Hive Queries, który używa tabeli bazowej HBase
CREATE EXTERNAL TABLE tbl(id string, data map<string,string>)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,data:")
TBLPROPERTIES("hbase.table.name" = "tbl");
Zapytania jak:
select * from tbl", "select id from tbl", "select id, data
from tbl
są naprawdę szybkie.
Ale zapytań jak
select id from tbl where substr(id, 0, 5) = "12345"
select id from tbl where data["777"] IS NOT NULL
są bardzo powolne.
W Przeciwnie, gdy uruchomiony z HBase skorupy:
"scan 'tbl', {
COLUMNS=>'data', STARTROW='12345', ENDROW='12346'}" or
"scan 'tbl', { COLUMNS=>'data', "FILTER" =>
FilterList.new([qualifierFilter('777')])}"
jest szybki jak błyskawica!
Kiedy spojrzał w mapred pracy generowanych przez ula na jobtracker I odkrył, że „map.input.records” zlicza wszystkie elementy w tabeli HBase, oznacza pracę sprawia, że pełne skanowanie tabeli, zanim jeszcze zacznie żadnych mappers !! Co więcej, podejrzewam, że kopiuje on wszystkie dane z tabeli Hbase do hdfs na folder wejściowy tmp przed uruchomieniem.
Tak, moje pytania są - Dlaczego hbase obsługa magazynu dla ula nie tłumaczy kwerendy hive do odpowiednich funkcji hbase? Dlaczego skanuje wszystkie rekordy , a następnie dzieli je na segmenty za pomocą klauzuli "where"? Jak można go ulepszyć?
Wszelkie sugestie dotyczące poprawy wydajności kwerendy Hive (mapowane do tabeli HBase).
Czy możemy utworzyć indeks wtórny na tabelach HBase?
Używamy integracji HBase i Hive i próbujemy dostroić wydajność zapytań Hive.
Czy masz jakieś liczby dla zapytań, które działają przeciwko Hive's Text vs ORC vs integracja HBase? W jaki sposób taryfy Tpch są rozliczane według powyższych formatów pamięci masowej? Dziękuję i pozdrawiam! – user1393608
Hej @Ram, czy kiedykolwiek znalazłeś odpowiednie rozwiązanie/obejście tego problemu? – Havnar