Share via


Apache Phoenix no Azure HDInsight

O Apache Phoenix é uma camada de banco de dados relacional massivamente paralela de código aberto construída no Apache HBase. O Phoenix permite que você use consultas semelhantes a SQL no HBase. Phoenix usa drivers JDBC abaixo para permitir que os usuários criem, excluam, alterem tabelas, índices, exibições e sequências SQL e upsert linhas individualmente e em massa. Phoenix usa compilação nativa noSQL em vez de usar MapReduce para compilar consultas, permitindo a criação de aplicativos de baixa latência sobre o HBase. Phoenix adiciona coprocessadores para suportar a execução de código fornecido pelo cliente no espaço de endereço do servidor, executando o código colocalizado com os dados. Essa abordagem minimiza a transferência de dados cliente/servidor.

O Apache Phoenix abre consultas de big data para não-desenvolvedores que podem usar uma sintaxe semelhante a SQL em vez de programação. Phoenix é altamente otimizado para HBase, ao contrário de outras ferramentas como Apache Hive e Apache Spark SQL. O benefício para os desenvolvedores é escrever consultas de alto desempenho com muito menos código.

Quando você envia uma consulta SQL, Phoenix compila a consulta para chamadas nativas do HBase e executa a verificação (ou plano) em paralelo para otimização. Essa camada de abstração libera o desenvolvedor de escrever trabalhos do MapReduce, para se concentrar na lógica de negócios e no fluxo de trabalho de seu aplicativo em torno do armazenamento de big data da Phoenix.

Otimização do desempenho de consultas e outros recursos

O Apache Phoenix adiciona vários aprimoramentos de desempenho e recursos às consultas do HBase.

Índices secundários

O HBase tem um único índice que é classificado lexicograficamente na chave de linha primária. Esses registros só podem ser acessados através da chave de linha. O acesso aos registos através de qualquer coluna que não seja a chave de linha requer a análise de todos os dados enquanto se aplica o filtro necessário. Em um índice secundário, as colunas ou expressões indexadas formam uma chave de linha alternativa, permitindo pesquisas e verificações de intervalo nesse índice.

Crie um índice secundário com o CREATE INDEX comando:

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

Essa abordagem pode gerar um aumento significativo de desempenho em relação à execução de consultas de indexação única. Este tipo de índice secundário é um índice de cobertura, contendo todas as colunas incluídas na consulta. Portanto, a pesquisa de tabela não é necessária e o índice satisfaz toda a consulta.

Visualizações

As visualizações Phoenix fornecem uma maneira de superar uma limitação do HBase, onde o desempenho começa a se degradar quando você cria mais de 100 tabelas físicas. As exibições Phoenix permitem que várias tabelas virtuais compartilhem uma tabela HBase física subjacente.

Criar um modo de exibição Phoenix é semelhante ao uso da sintaxe padrão do modo de exibição SQL. Uma diferença é que você pode definir colunas para sua exibição, além das colunas herdadas de sua tabela base. Você também pode adicionar novas KeyValue colunas.

Por exemplo, aqui está uma tabela física nomeada product_metrics com a seguinte definição:

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

Defina uma vista sobre esta tabela, com colunas adicionais:

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

Para adicionar mais colunas posteriormente, use a ALTER VIEW instrução.

Saltar análise

Ignorar varredura usa uma ou mais colunas de um índice composto para encontrar valores distintos. Ao contrário de uma varredura de intervalo, a varredura ignorada implementa a varredura dentro de linha, produzindo um desempenho aprimorado. Durante a verificação, o primeiro valor correspondente é ignorado junto com o índice até que o próximo valor seja encontrado.

Uma verificação ignorada usa a SEEK_NEXT_USING_HINT enumeração do filtro HBase. Usando SEEK_NEXT_USING_HINTo , a verificação de pular controla qual conjunto de chaves, ou intervalos de chaves, estão sendo pesquisados em cada coluna. Em seguida, a verificação de pulo pega uma chave que foi passada para ela durante a avaliação do filtro e determina se é uma das combinações. Caso contrário, a verificação de pulo avalia a próxima chave mais alta para a qual saltar.

Transações

Enquanto o HBase fornece transações em nível de linha, o Phoenix integra-se ao Tephra para adicionar suporte a transações entre linhas e tabelas cruzadas com semântica ACID completa.

Tal como acontece com as transações SQL tradicionais, as transações fornecidas através do gerenciador de transações Phoenix permitem que você garanta que uma unidade atômica de dados seja atualizada com êxito, revertendo a transação se a operação upsert falhar em qualquer tabela habilitada para transação.

Para habilitar transações Phoenix, consulte a documentação de transações do Apache Phoenix.

Para criar uma nova tabela com transações habilitadas, defina a TRANSACTIONAL propriedade como true em uma CREATE instrução:

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

Para alterar uma tabela existente para ser transacional, use a mesma propriedade em uma ALTER instrução:

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

Nota

Não é possível mudar uma tabela transacional de volta para não transacional.

Mesas Salgadas

O hotspotting do servidor de região pode ocorrer ao gravar registros com chaves sequenciais no HBase. Embora você possa ter vários servidores de região em seu cluster, todas as gravações estão ocorrendo em apenas um. Essa concentração cria o problema de hotspotting em que, em vez de sua carga de trabalho de gravação ser distribuída por todos os servidores de região disponíveis, apenas um está lidando com a carga. Como cada região tem um tamanho máximo predefinido, quando uma região atinge esse limite de tamanho, ela é dividida em duas pequenas regiões. Quando isso acontece, uma dessas novas regiões bate todos os novos recordes, tornando-se o novo hotspot.

Para atenuar esse problema e obter um melhor desempenho, pré-dividir tabelas para que todos os servidores da região sejam usados igualmente. Phoenix fornece tabelas salgadas, adicionando de forma transparente o byte de salga à chave de linha de uma tabela específica. A tabela é pré-dividida nos limites de bytes de sal para garantir uma distribuição de carga igual entre os servidores da região durante a fase inicial da tabela. Essa abordagem distribui a carga de trabalho de gravação por todos os servidores de região disponíveis, melhorando o desempenho de gravação e leitura. Para salgar uma tabela, especifique a SALT_BUCKETS propriedade table quando a tabela for criada:

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;

Ative e ajuste o Phoenix com o Apache Ambari

Um cluster HBase do HDInsight inclui a interface do usuário do Ambari para fazer alterações de configuração.

  1. Para habilitar ou desabilitar o Phoenix e controlar as configurações de tempo limite de consulta do Phoenix, faça login na interface do usuário da Web do Ambari (https://YOUR_CLUSTER_NAME.azurehdinsight.net) usando suas credenciais de usuário do Hadoop.

  2. Selecione HBase na lista de serviços no menu à esquerda e, em seguida, selecione a guia Configurações .

    Apache Ambari HBase configurations.

  3. Encontre a seção de configuração Phoenix SQL para habilitar ou desabilitar phoenix e defina o tempo limite da consulta.

    Ambari Phoenix SQL configuration section.

Consulte também