Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O HWC (Apache Hive Warehouse Connector) é uma biblioteca que permite que você trabalhe mais facilmente com o Apache Spark e o Apache Hive. Ele dá suporte a tarefas como a movimentação de dados entre os dataframes do Spark e as tabelas do Hive. Além disso, direciona dados de streaming do Spark para tabelas do Hive. O Hive Warehouse Connector funciona como uma ponte entre o Spark e o Hive. Ele também dá suporte a Scala, Java e Python como linguagens de programação para desenvolvimento.
O Hive Warehouse Connector permite que você aproveite os recursos exclusivos do Hive e do Spark para criar aplicativos de Big Data poderosos.
O Apache Hive dá suporte a transações de banco de dados ACID (atômicas, consistentes, isoladas e duráveis). Para obter mais informações sobre ACID e transações no Hive, confira Hive Transactions (Transações do Hive). O Hive também oferece controles de segurança detalhados por meio do Apache Ranger e LLAP (processamento analítico de baixa latência) não disponíveis no Apache Spark.
O Apache Spark tem uma API de streaming estruturado que fornece funcionalidades de streaming não disponíveis no Apache Hive. A partir do HDInsight 4.0, o Apache Spark 2.3.1 e posterior e o Apache Hive 3.1.0 têm catálogos de metastore separados que dificultam a interoperabilidade.
O HWC (Hive Warehouse Connector) facilita o uso do Spark e do Hive juntos. A biblioteca HWC carrega dados de daemons do LLAP para executores do Spark em paralelo. Esse processo torna-o mais eficiente e adaptável do que uma conexão JDBC padrão do Spark com o Hive. Isso apresenta dois modos de execução diferentes para o HWC:
- Modo JDBC do Hive via HiveServer2
- Modo LLAP do Hive usando daemons LLAP [Recomendado]
Por padrão, o HWC é configurado para usar daemons llAP do Hive. Para executar consultas Hive (leitura e gravação) usando os modos acima com suas respectivas APIs, consulte APIs HWC.
Algumas das operações com suporte do Hive Warehouse Connector são:
- Descrever uma tabela
- Criar uma tabela para dados formatados por ORC
- Selecionar dados do Hive e recuperar um dataframe
- Gravar um dataframe no Hive em lote
- Executar uma instrução update do Hive
- Ler dados de tabela do Hive, transformá-los no Spark e gravá-los em uma nova tabela do Hive
- Escrever um dataframe ou um fluxo do Spark para o Hive usando HiveStreaming
Configuração do Hive Warehouse Connector
Importante
- A Biblioteca Hive Warehouse Connector (HWC) não tem suporte para uso com clusters Interactive Query onde o recurso Gerenciamento de Carga de Trabalho (WLM) está ativado.
Em um cenário em que você tem apenas cargas de trabalho do Spark e deseja usar a Biblioteca HWC, verifique se o cluster Interactive Query não tem o recurso Gerenciamento de Carga de Trabalho habilitado (a configuraçãohive.server2.tez.interactive.queuenão está definida nas configurações do Hive).
Para um cenário em que existem cargas de trabalho do Spark (HWC) e cargas de trabalho nativas do LLAP, você precisa criar dois clusters Interactive Query separados com o banco de dados metastore compartilhado. Um cluster para cargas de trabalho LLAP nativas onde o recurso WLM pode ser habilitado conforme a necessidade e outro cluster para carga de trabalho somente HWC onde o recurso WLM não deve ser configurado. É importante observar que você pode exibir os planos de recursos WLM dos dois clusters, mesmo se ele estiver habilitado em apenas um cluster. Não faça nenhuma alteração nos planos de recursos no cluster em que o recurso WLM está desabilitado, pois ele pode afetar a funcionalidade WLM em outro cluster. - Embora o Spark dá suporte a linguagem de computação R para simplificar sua análise de dados, não há suporte para a biblioteca HWC (Hive Warehouse Connector) ser usada com o R. Para executar cargas de trabalho HWC, você pode executar consultas do Spark para o Hive usando a API HiveWarehouseSession no estilo JDBC que dá suporte apenas a Scala, Java e Python.
- Não há suporte para a execução de consultas (leitura e gravação) através do HiveServer2 via modo JDBC para tipos de dados complexos, como matrizes/Struct/mapa.
- O HWC dá suporte à escrita somente em formatos de arquivo ORC. Não há suporte para gravações não ORC (por exemplo: formatos de arquivo de texto e parquet) por meio do HWC.
O Hive Warehouse Connector precisa de clusters separados para cargas de trabalho do Spark e do Interactive Query. Siga estas etapas para configurar esses clusters no Azure HDInsight.
Tipos de cluster e versões com suporte
| Versão do HWC | Versão do Spark | Versão do InteractiveQuery |
|---|---|---|
| v2.1 | Spark 3.3.0 | HDI 5.1 | Consulta Interativa 3.1 | HDI 5.1 |
Criar clusters
Crie um cluster HDInsight Spark 5.1 com uma conta de armazenamento e uma rede virtual personalizada do Azure. Para obter informações sobre como criar um cluster em uma rede virtual do Azure, confira Adicionar o HDInsight a uma rede virtual existente.
Crie um cluster DO HDInsight Interactive Query (LLAP) 5.1 com a mesma conta de armazenamento e rede virtual do Azure que o cluster Spark.
Definir configurações do HWC
Reunir informações preliminares
Em um navegador da Web, navegue até
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HIVE, em que LLAPCLUSTERNAME é o nome do cluster Interactive Query.Navegue até Resumo>URL JDBC interativa do HiveServer2 e observe o valor. O valor pode ser semelhante a:
jdbc:hive2://<zookeepername1>.rekufuk2y2ce.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2ce.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2ce.bx.internal.cloudapp.net:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2-interactive.Navegue até Configurações>Avançado>Site do Hive Avançado>hive.zookeeper.quorum e observe o valor. O valor pode ser semelhante a:
<zookeepername1>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername2>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181,<zookeepername3>.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:2181.Navegue até Configurações>Avançado>Geral>hive.metastore.uris e observe o valor. O valor pode ser semelhante a:
thrift://iqgiro.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083,thrift://hn*.rekufuk2y2cezcbowjkbwfnyvd.bx.internal.cloudapp.net:9083.Navegue até Configurações>Avançado>Site interativo do Hive Avançado>hive.llap.daemon.service.hosts e observe o valor. O valor pode ser semelhante a:
@llap0.
Definir configurações de cluster do Spark
Em um navegador da Web, navegue até
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs, em que CLUSTERNAME é o nome do cluster do Apache Spark.Expanda spark2-defaults personalizados.
Selecione Adicionar propriedade... para adicionar as seguintes configurações:
Configuração Valor spark.datasource.hive.warehouse.load.staging.dirSe você estiver usando a Conta de Armazenamento do ADLS Gen2, use abfss://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.dfs.core.windows.net/tmp
Se você estiver usando Armazenamento de Blobs do Azure Conta, usewasbs://STORAGE_CONTAINER_NAME@STORAGE_ACCOUNT_NAME.blob.core.windows.net/tmp.
Defina como um diretório de teste adequado compatível com HDFS. Se você tiver dois clusters diferentes, o diretório de teste deverá ser uma pasta no diretório de teste da conta de armazenamento do cluster LLAP para que HiveServer2 tenha acesso a ela. SubstituaSTORAGE_ACCOUNT_NAMEpelo nome da conta de armazenamento que está sendo usada pelo cluster eSTORAGE_CONTAINER_NAMEpelo nome do contêiner de armazenamento.spark.sql.hive.hiveserver2.jdbc.urlO valor obtido anteriormente da URL JDBC interativa do HiveServer2 spark.datasource.hive.warehouse.metastoreUriO valor obtido anteriormente de hive.metastore.uris. spark.security.credentials.hiveserver2.enabledtruepara o modo de cluster YARN efalsepara o modo de cliente YARN.spark.hadoop.hive.zookeeper.quorumO valor obtido anteriormente de hive.zookeeper.quorum. spark.hadoop.hive.llap.daemon.service.hostsO valor obtido anteriormente de hive.llap.daemon.service.hosts. Salve as alterações e reinicie todos os componentes afetados.
Configurações adicionais para Spark e Hive
A configuração a seguir precisa ser feita para todos os nós de cabeçalho e de trabalho de seus clusters Spark e Hive.
Use o comando ssh para se conectar aos nós do Apache Spark e do Apache Hive. Edite o comando abaixo substituindo CLUSTERNAME pelo nome do cluster e, em seguida, insira o comando:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.netAcrescente o conteúdo do arquivo de /etc/hosts do cluster hive no arquivo /etc/hosts do cluster spark e vice-versa.
Depois que todos os nós forem atualizados, reinicie os dois clusters.
Configurar o HWC para clusters do ESP (Enterprise Security Package)
O ESP (Enterprise Security Package) fornece funcionalidades de nível empresarial como autenticação baseada no Active Directory, suporte a multiusuário e controle de acesso baseado em função para clusters Apache Hadoop no Azure HDInsight. Para obter mais informações, confira Usar o Enterprise Security Package no HDInsight.
Além das configurações mencionadas na seção anterior, adicione a configuração a seguir para usar o HWC nos clusters ESP.
Na interface do usuário da Web do Ambari do cluster Spark, navegue até Spark2>CONFIGURAÇÕES>spark2-defaults personalizados.
Atualize as propriedades a seguir.
Configuração Valor spark.sql.hive.hiveserver2.jdbc.url.principalhive/<llap-headnode>@<AAD-Domain>Em um navegador da Web, vá até
https://CLUSTERNAME.azurehdinsight.net/#/main/services/HIVE/summary, em que CLUSTERNAME é o nome do cluster Interactive Query. Clique em HiveServer2 Interactive. Você verá o FQDN (nome de domínio totalmente qualificado) do nó de cabeçalho no qual o LLAP está em execução, conforme mostrado na captura de tela. Substitua<llap-headnode>por esse valor.
Use o comando ssh para se conectar ao cluster Interactive Query. Procure o parâmetro
default_realmno arquivo/etc/krb5.conf. Substitua<AAD-DOMAIN>por esse valor como uma cadeia de caracteres em maiúsculas. Caso contrário, a credencial não será encontrada.
Por exemplo,
hive/hn*.mjry42ikpruuxgs2qy2kpg4q5e.cx.internal.cloudapp.net@PKRSRVUQVMAE6J85.D2.INTERNAL.CLOUDAPP.NET.
A configuração a seguir precisa ser feita para todos os nós de cabeçalho e de trabalho de seus clusters Spark e Hive.
Use o comando ssh para se conectar aos nós do Apache Spark e do Apache Hive. Edite o comando abaixo substituindo CLUSTERNAME pelo nome do cluster e, em seguida, insira o comando:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.netAcrescente o nome de domínio do locatário (por exemplo, "fabrikam.onmicrosoft.com") na última linha de /etc/resolv.conf em nós de cabeçalho e de trabalho de seus clusters Spark e Hive.
Salve as alterações e reinicie os componentes conforme necessário.
Uso do Hive Warehouse Connector
Você pode escolher entre alguns métodos diferentes para se conectar ao seu cluster Interactive Query e executar consultas usando o Hive Warehouse Connector. Os métodos com suporte incluem as seguintes ferramentas:
Abaixo estão alguns exemplos para se conectar ao HWC do Spark.
Spark-Shell
Essa é uma maneira de executar o Spark interativamente por meio de uma versão modificada do shell do Scala.
Use o comando ssh para se conectar ao cluster do Apache Spark. Edite o comando abaixo substituindo CLUSTERNAME pelo nome do cluster e, em seguida, insira o comando:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.netEm sua sessão SSH, execute o seguinte comando para anotar a versão de
hive-warehouse-connector-assembly:ls /usr/hdp/current/hive_warehouse_connectorEdite o código abaixo com a versão de
hive-warehouse-connector-assemblyidentificada acima. Em seguida, execute o comando para iniciar o shell do Spark:spark-shell --master yarn \ --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-<VERSION>.jar \ --conf spark.security.credentials.hiveserver2.enabled=falseDepois de você iniciar o shell do Spark, uma instância do Hive Warehouse Connector pode ser iniciada usando os seguintes comandos:
import com.hortonworks.hwc.HiveWarehouseSession val hive = HiveWarehouseSession.session(spark).build()
Spark-submit
Spark-submit é um utilitário para enviar qualquer programa spark (ou trabalho) para clusters Spark.
O spark-submit trabalho configurará e configurará o Conector do Spark e do Hive Warehouse de acordo com nossas instruções, executará o programa que passamos para ele e, em seguida, liberará corretamente os recursos que estavam sendo usados.
Depois de criar o código do Scala/Java junto com as dependências em um assembly jar, use o comando abaixo para iniciar um aplicativo Spark. Substitua <VERSION> e <APP_JAR_PATH> pelos valores reais.
Modo de cliente YARN
spark-submit \ --class myHwcApp \ --master yarn \ --deploy-mode client \ --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-<VERSION>.jar \ --conf spark.security.credentials.hiveserver2.enabled=false /<APP_JAR_PATH>/myHwcAppProject.jarModo de cluster YARN
spark-submit \ --class myHwcApp \ --master yarn \ --deploy-mode cluster \ --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-<VERSION>.jar \ --conf spark.security.credentials.hiveserver2.enabled=true /<APP_JAR_PATH>/myHwcAppProject.jar
Esse utilitário também é usado quando escrevemos o aplicativo inteiro em pySpark e empacotamos em arquivos .py (Python), para que possamos enviar o código interno para o cluster do Spark para execução.
Para aplicativos Python, passe um arquivo. py no lugar do /<APP_JAR_PATH>/myHwcAppProject.jar, e adicionar o arquivo de configuração abaixo (Python .zip) ao caminho de pesquisa com --py-files.
--py-files /usr/hdp/current/hive_warehouse_connector/pyspark_hwc-<VERSION>.zip
Executar consultas em clusters do ESP (Enterprise Security Package)
Use kinit antes de iniciar o spark-shell ou spark-submit. Substitua NOME DE USUÁRIO pelo nome de uma conta de domínio com permissões para acessar o cluster e execute o seguinte comando:
kinit USERNAME
Protegendo dados em clusters do Spark ESP
Crie uma tabela
democom alguns dados de exemplo inserindo os seguintes comandos:create table demo (name string); INSERT INTO demo VALUES ('HDinsight'); INSERT INTO demo VALUES ('Microsoft'); INSERT INTO demo VALUES ('InteractiveQuery');Veja o conteúdo da tabela com o comando a seguir. Antes de você aplicar a política, a tabela
demomostra a coluna completa.hive.executeQuery("SELECT * FROM demo").show()
Aplique uma política de mascaramento de coluna que mostre apenas os últimos quatro caracteres da coluna.
Vá para a interface do usuário administrador do Ranger em
https://LLAPCLUSTERNAME.azurehdinsight.net/ranger/.Clique no serviço do Hive para seu cluster em Hive.
Clique na guia Mascaramento e em Adicionar Nova Política
Forneça um nome de política desejado. Selecione o banco de dados: Padrão, tabela Hive: demonstração, coluna Hive: nome, Usuário: rsadmin2, Tipos de acesso: selecionar e Máscara parcial: mostra os últimos quatro no menu Selecionar Opção de Mascaramento. Clique em Adicionar.
Veja o conteúdo da tabela novamente. Depois de aplicar a política do Ranger, podemos ver apenas os últimos quatro caracteres da coluna.