Usar o Apache Phoenix no HBase do HDInsight

Concluído

Os clusters HBase no HDInsight vêm com Apache Phoenix. O Apache Phoenix é um banco de dados relacional de software livre altamente paralelo criado no Apache HBase. O Apache Phoenix permite que você use consultas do tipo SQL no HBase. Ele usa drivers JDBC subjacentes para permitir que os usuários criem, excluam e alterem tabelas SQL. Você também pode indexar, criar exibições e sequências e executar upsert de linhas individualmente e em massa. O Phoenix usa compilação nativa noSQL, em vez de usar o MapReduce para compilar consultas, permitindo a criação de aplicativos de baixa latência sobre HBase. O Phoenix adiciona coprocessadores para oferecer suporte à execução de código fornecido pelo cliente no espaço de endereço do servidor, executando o código colocalizado junto com os dados. Essa abordagem minimiza a transferência de dados do cliente/servidor. Para obter mais informações, confira a Documentação sobre o Apache Phoenix.

Como Apache Phoenix faz interface com o Apache HBase.

O Apache Phoenix no HBase do HDInsight geralmente é usado para habilitar a análise de autoatendimento e extrair informações conforme descrito abaixo. O Phoenix pode se conectar a qualquer ferramenta de BI compatível com a ODBC e habilitar a análise de SQL ad hoc no HBase.

Autoatendimento com o Apache HBase.

A combinação do Apache HBase e Phoenix pode ser usada como um armazenamento de dados para dados mutáveis. O mecanismo de consulta do Apache Phoenix no HBase vem com alguns recursos importantes.

Índices secundários

Os registros no HBase são acessados usando a chave de linha primária com um único índice que é classificado de modo lexicográfico na chave de linha primária. Se você tentar acessar registros de alguma maneira diferente da linha primária, isso levaria a uma verificação ineficiente de todos os dados na tabela do HBase. O Apache Phoenix permite que você crie índices secundários em colunas e expressões para criar chaves de linha alternativas para permitir pesquisas de ponto ou verificações de intervalo ao longo desse novo índice. Para obter mais informações, confira a Documentação sobre índices secundários do Apache Phoenix.

O comando CREATE INDEX é usado para criar índices secundários no HBase, conforme mostrado abaixo.

CREATE INDEX ix_purchasetype on SALTEDWEBLOGS (purchasetype, transactiondate) INCLUDE (bookname, quantity); 

Exibições

Uma estratégia recomendada é limitar o número de tabelas físicas no HBase e, por sua vez, limitar o número de regiões. As exibições no Phoenix corroboram essa recomendação ao permitir a criação de várias tabelas virtuais que compartilham a mesma tabela física subjacente no HBase. Para obter mais informações, confira a Documentação sobre exibições do Apache Phoenix.

Com a definição de tabela abaixo no HBase

CREATE  TABLE product_metrics (
    metric_type CHAR(1),
    created_by VARCHAR,
    created_date DATE,
    metric_id INTEGER
    CONSTRAINT pk PRIMARY KEY (metric_type, created_by, created_date, metric_id));

Você pode definir a exibição a seguir:

CREATE VIEW mobile_product_metrics (carrier VARCHAR, dropped_calls BIGINT) AS SELECT * FROM product_metric WHERE metric_type = 'm';

Transactions

Embora o HBase funcione apenas com transações de nível de linha, o Apache Phoenix permite transações entre tabelas e entre linhas com suporte completo a ACID ao integrar-se ao Apache Tephra.

Para obter mais informações, confira a Documentação sobre transações do Apache Phoenix.

O exemplo a seguir cria uma tabela chamada my_table e, em seguida, altera-a para habilitar transações.

CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

Tabelas Distribuídas

A geração de ponto de acesso do servidor de região no HBase poderá ocorrer durante gravações sequenciais se as chaves de linha aumentarem de maneira monotônica. O Apache Phoenix pode geração de ponto de acesso ao fornecer uma maneira de distribuir a chave de linha com um byte de distribuição para uma tabela específica. Para obter mais informações, confira a Documentação sobre tabelas distribuídas do Apache Phoenix.

CREATE TABLE Saltedweblogs (
    transactionid varchar(500) Primary Key,
    transactiondate Date NULL,
    customerid varchar(50) NULL,
    bookid varchar(50) NULL,
    purchasetype varchar(50) NULL,
    orderid varchar(50) NULL,
    bookname varchar(50) NULL,
    categoryname varchar(50) NULL,
    invoicenumber varchar(50) NULL,
    invoicestatus varchar(50) NULL,
    city varchar(50) NULL,
    state varchar(50) NULL,
    paymentamount DOUBLE NULL,
    quantity INTEGER NULL,
    shippingamount DOUBLE NULL) SALT_BUCKETS=4;

Ignorar verificação

Para um determinado conjunto de linhas, o Apache Phoenix usa a função de Ignorar verificação para a verificação interna de linhas em relação a uma Verificação de intervalo com o intuito de melhorar o desempenho. A função de ignorar verificação aproveita o filtro SEEK_NEXT_USING_HINT do HBase. Ele armazena informações sobre quais conjuntos/intervalos de chaves estão sendo pesquisados em cada coluna. Depois, ele pega uma chave (passada a ele durante a avaliação do filtro) e descobre se ela está ou não em uma das combinações ou intervalos. Caso contrário, ele descobre a qual é a próxima chave mais alta a ser pulada. Para obter mais informações, confira a Documentação sobre ignorar verificações do Apache Phoenix.

A otimização de desempenho no Apache Phoenix é um recurso opcional solicitado e depende principalmente do desempenho HBase subjacente. A otimização de desempenho é um tópico complexo, estando além do escopo deste curso. No entanto, se você estiver interessado, poderá consultar a documentação sobre as Melhores práticas de desempenho do Apache Phoenix.