Diferença entre Pig e Hive? Por que ter os dois? [fechadas]

256

Meu histórico - 4 semanas no mundo do Hadoop. Mexeu um pouco no Hive, Pig e Hadoop usando o Hadoop VM da Cloudera. Leia o artigo do Google sobre Map-Reduce e GFS ( link em PDF ).

Eu entendi aquilo-

  • Linguagem do Pig O Pig Latin é uma mudança do (como os programadores pensam) o SQL como estilo declarativo de programação e a linguagem de consulta do Hive se assemelha ao SQL.

  • O porco fica em cima do Hadoop e, em princípio, também pode ficar em cima do Dryad. Posso estar errado, mas o Hive está intimamente ligado ao Hadoop.

  • Os comandos Pig Latin e Hive são compilados para mapear e reduzir tarefas.

Minha pergunta - Qual é o objetivo de ter os dois quando um (digamos, Porco) pode servir ao propósito. É só porque Pig é evangelizado pelo Yahoo! e Hive pelo Facebook?

Arnkrishn
fonte
24
O Hive é para dados estruturados. Pig é para dados não estruturados.
Programador morto

Respostas:

151

Confira este post de Alan Gates, arquiteto do Pig no Yahoo !, que compara quando usaria um SQL como o Hive, em vez do Pig. Ele faz um caso muito convincente quanto à utilidade de uma linguagem processual como Pig (vs. SQL declarativo) e sua utilidade para designers de fluxo de dados.

Jakob Homan
fonte
Alan também faz um artigo discutindo o Hive especificamente, como j03m compartilhado abaixo. Coisas boas dele!
9339 Dolan Antenucci
14
O Hive é para dados estruturados. Pig é para dados não estruturados.
Programador morto
7
Estou confuso. Você quis dizer "utilidade [...] de uma linguagem processual como o Pig"? Porque o artigo afirma repetidamente que "Pig Latin é processual".
Matt Fenwick
4
Não tenho certeza se é temporário, mas o artigo parece ter sumido. Você pode atualizar o link (não foi possível encontrá-lo com uma pesquisa rápida)?
Peter Klipfel
1
A publicação de Alan Gates está aqui .. por favor, siga-a .. developer.yahoo.com/blogs/hadoop/…
Mr.Chowdary
57

O Hive foi projetado para atrair uma comunidade confortável com o SQL. Sua filosofia era que não precisamos de outra linguagem de script. O Hive suporta mapear e reduzir scripts de transformação no idioma da escolha do usuário (que pode ser incorporado nas cláusulas SQL). É amplamente utilizado no Facebook por analistas confortáveis ​​com SQL e também por programação de mineradores de dados em Python. Os esforços de compatibilidade com SQL no Pig foram abandonados no AFAIK - portanto, a diferença entre os dois projetos é muito clara.

O suporte à sintaxe SQL também significa que é possível integrar-se às ferramentas de BI existentes, como a Microstrategy. O Hive possui um driver ODBC / JDBC (que é um trabalho em andamento) que deve permitir que isso ocorra no futuro próximo. Também está começando a adicionar suporte a índices, o que deve permitir suporte a consultas de detalhamento comuns nesses ambientes.

Finalmente - isso não é pertinente à pergunta diretamente - o Hive é uma estrutura para executar consultas analíticas. Embora seu uso dominante seja o de consultar arquivos simples, não há motivo para que ele não possa consultar outros armazenamentos. Atualmente, o Hive pode ser usado para consultar dados armazenados no Hbase (que é um armazenamento de valores-chave como os encontrados na maioria das RDBMSes), e o projeto HadoopDB usou o Hive para consultar uma camada RDBMS federada.

Joydeep Sen Sarma
fonte
37

Achei isso o mais útil (porém, tem um ano) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Ele fala especificamente sobre Pig vs Hive e quando e onde eles estão empregados no Yahoo. Achei isso muito perspicaz. Algumas notas interessantes:

Em alterações / atualizações incrementais nos conjuntos de dados:

Em vez disso, juntar-se aos novos dados incrementais e usar os resultados juntamente com os resultados da junção completa anterior é a abordagem correta. Isso levará apenas alguns minutos. As operações padrão do banco de dados podem ser implementadas dessa maneira incremental no Pig Latin, tornando o Pig uma boa ferramenta para este caso de uso.

Sobre o uso de outras ferramentas via streaming:

A integração do porco ao streaming também facilita aos pesquisadores pegar um script Perl ou Python que eles já depuraram em um pequeno conjunto de dados e executá-lo em um grande conjunto de dados.

Sobre o uso do Hive para armazenamento de dados:

Nos dois casos, o modelo relacional e o SQL são os mais adequados. De fato, o data warehousing tem sido um dos principais casos de uso do SQL durante grande parte de seu histórico. Ele possui as construções certas para oferecer suporte aos tipos de consultas e ferramentas que os analistas desejam usar. E já está em uso pelas ferramentas e usuários no campo.

O subprojeto Hadoop Hive fornece uma interface SQL e um modelo relacional para o Hadoop. A equipe do Hive começou a trabalhar para se integrar às ferramentas de BI por meio de interfaces como ODBC.

j03m
fonte
1
+1 ótimo para ver uma comparação do Yahoo, que é, pelo que entendi o criador original do Pig, ou pelo menos um grande defensor. Edit: de Jakob acima, vejo que o autor (Alan Gates) é o Arquiteto Porco no Yahoo - tão grande participação :)
Dolan Antenucci
3
O link está morto. Acho que o URL correto no momento é: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
agarie 29/09/14
1
Link atualizado por acima
j03m
Os 2 links compartilhados acima não são mais encontrados.
Keshav Pradeep Ramanath
28

Dê uma olhada no Pig Vs Hive Comparison em uma casca de noz de um artigo "dezyre"

O Hive é melhor que o PIG em: Partições, Servidor, Interface da Web e suporte a JDBC / ODBC.

Algumas diferenças:

  1. O Hive é melhor para dados estruturados e o PIG é melhor para dados semiestruturados

  2. O Hive é usado para geração de relatórios e o PIG para programação

  3. O Hive é usado como SQL declarativo e PIG como linguagem processual

  4. O Hive suporta partições e o PIG não

  5. O Hive pode iniciar um servidor opcional baseado em economia e o PIG não pode

  6. O Hive define tabelas com antecedência ( esquema ) + armazena informações do esquema em um banco de dados e o PIG não possui metadados dedicados do banco de dados

  7. O Hive não suporta Avro, mas o PIG sim. EDIT: Hive suporta Avro, especifique o serde como org.apache.hadoop.hive.serde2.avro

  8. O Pig também suporta o recurso COGROUP adicional para realizar junções externas, mas a seção não. Mas o Hive e o PIG podem se unir, ordenar e classificar dinamicamente.

Ravindra babu
fonte
17

Acredito que a resposta real para sua pergunta é que eles são / eram projetos independentes e não havia um objetivo coordenado centralmente. Eles estavam em espaços diferentes desde o início e passaram a se sobrepor ao tempo, à medida que os dois projetos se expandem.

Parafraseado do livro Hadoop O'Reilly:

Pig: uma linguagem e ambiente de fluxo de dados para explorar conjuntos de dados muito grandes.

Hive: um armazém de dados distribuído

G__
fonte
22
O Hive não é nada como um RDBMS. Ele processa arquivos simples como o Pig. Ambos basicamente fazem a mesma coisa. Observe os otimizadores que eles usam ao compilar o trabalho, pois essa é a maior diferença real.
Steve Severance
12

Você pode obter resultados semelhantes com consultas sobre pig / hive. A principal diferença está na abordagem para entender / escrever / criar consultas.

O Pig tende a criar um fluxo de dados: pequenas etapas nas quais você realiza algum processamento O
Hive fornece uma linguagem semelhante ao SQL para operar em seus dados, portanto, a transformação do RDBMS é muito mais fácil (o Pig pode ser mais fácil para alguém que não teve experiência anterior com SQL)

Também é importante notar que, para o Hive, você pode ter uma interface agradável para trabalhar com esses dados (cera de abelha para HUE ou interface da web do Hive), além de fornecer metastore para obter informações sobre seus dados (esquema etc.), úteis como um informações centrais sobre seus dados.

Eu uso o Hive e o Pig, para consultas diferentes (eu uso aquela em que posso escrever consultas com mais rapidez / facilidade, faço dessa maneira principalmente consultas ad-hoc) - elas podem usar os mesmos dados que uma entrada. Mas atualmente estou fazendo muito do meu trabalho através da cera de abelha.

wlk
fonte
12

O Pig permite carregar dados e código do usuário em qualquer ponto do pipeline. Isso pode ser particularmente importante se os dados forem de fluxo contínuo, por exemplo, dados de satélites ou instrumentos.

O Hive, que é baseado em RDBMS, precisa que os dados sejam primeiro importados (ou carregados) e depois disso possam ser trabalhados. Portanto, se você estivesse usando o Hive no fluxo de dados, teria que continuar preenchendo intervalos (ou arquivos) e usar o hive em cada intervalo preenchido , enquanto usava outros intervalos para continuar armazenando os dados recém-chegados.

Porco também usa avaliação preguiçosa. Permite maior facilidade de programação e pode-se usá-lo para analisar dados de maneiras diferentes com mais liberdade do que em uma linguagem semelhante ao SQL como o Hive. Portanto, se você realmente deseja analisar matrizes ou padrões em alguns dados não estruturados que você possui e deseja fazer cálculos interessantes sobre eles, com o Pig, você pode percorrer uma distância razoável, enquanto com o Hive, precisa de algo mais para brincar com os resultados.

O Pig é mais rápido na importação de dados, mas mais lento na execução real do que em uma linguagem compatível com RDBMS como o Hive.

O Pig é bem adequado para paralelização e, portanto, possivelmente possui uma vantagem para sistemas em que os conjuntos de dados são enormes, ou seja, em sistemas nos quais você se preocupa mais com a taxa de transferência de seus resultados do que com a latência (o tempo para obter qualquer dado específico de resultado).

swarb
fonte
10

Colmeia Vs Porco

O Hive é uma interface SQL que permite usuários experientes em sql ou outras ferramentas como Tableu / Microstrategy / qualquer outra ferramenta ou linguagem que possua interface sql.

O PIG é mais como um pipeline ETL .. com comandos passo a passo, como declarar variáveis, loop, iteração, instruções condicionais etc.

Eu prefiro escrever scripts Pig sobre QL do hive quando quero escrever lógica passo a passo complexa. Quando me sinto confortável escrevendo um único sql para extrair os dados, quero usar o Hive. para o hive, você precisará definir a tabela antes da consulta (como no RDBMS)

O objetivo de ambos é diferente, mas, sob o capô, ambos fazem o mesmo, convertem para mapear programas reduzidos.

Ashwin Aravind
fonte
7
  1. Pig-latin é estilo de fluxo de dados, é mais adequado para engenheiro de software. Enquanto o sql é mais adequado para analistas que estão acostumados ao sql. Para tarefas complexas, para a seção, você deve criar manualmente uma tabela temporária para armazenar dados intermediários, mas isso não é necessário para o porco.

  2. Pig-latin é adequado para estruturas de dados complicadas (como pequeno gráfico). Há uma estrutura de dados no porco chamada DataBag, que é uma coleção de Tuple. Às vezes, você precisa calcular métricas que envolvem várias tuplas (há um link oculto entre as tuplas, neste caso, eu chamaria isso de gráfico). Nesse caso, é muito fácil escrever um UDF para calcular as métricas que envolvem várias tuplas. Claro que isso poderia ser feito na colméia, mas não é tão conveniente quanto no porco.

  3. Escrever UDF em porco é muito mais fácil do que no Hive, na minha opinião.

  4. O Pig não tem suporte a metadados (ou é opcional, no futuro, poderá integrar o hcatalog). O Hive possui os metadados das tabelas armazenados no banco de dados.

  5. Você pode depurar scripts de pig no ambiente local, mas seria difícil para a seção fazer isso. O motivo é o ponto 3. Você precisa configurar os metadados da seção no ambiente local, consumindo muito tempo.

zjffdu
fonte
4

No link: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive ?

O Hive não é um banco de dados completo. As restrições e limitações de design do Hadoop e HDFS impõem limites ao que o Hive pode fazer.

O Hive é mais adequado para aplicativos de data warehouse, onde

1) Dados relativamente estáticos são analisados,

2) Não são necessários tempos de resposta rápidos e

3) Quando os dados não estão mudando rapidamente.

O Hive não fornece recursos cruciais necessários para o OLTP, processamento de transações on-line. Está mais perto de ser uma ferramenta OLAP, o Online Analytic Processing. Portanto, o Hive é mais adequado para aplicativos de data warehouse, onde um grande conjunto de dados é mantido e extraído para insights, relatórios etc.

Margon
fonte
4

Em palavras mais simples, o Pig é uma plataforma de alto nível para a criação de programas MapReduce usados ​​com o Hadoop. Usando scripts do pig, processaremos a grande quantidade de dados no formato desejado.

Depois que os dados processados ​​são obtidos, esses dados são mantidos no HDFS para processamento posterior para obter os resultados desejados.

Além dos dados processados ​​armazenados, aplicaremos comandos SQL do HIVE para obter os resultados desejados; internamente, esses comandos hive sql executam programas MAP Reduce.

user3167459
fonte
isso não é realmente uma adição significativa à base de conhecimento. tente adicionar mais informações
agconti
4

Para fornecer uma visão geral de alto nível de ambos, em resumo:

1) Porco é uma álgebra relacional sobre hadoop

2) Hive é um SQL sobre hadoop (um nível acima do Pig)

exAres
fonte
Comparação álgebra é interessante
Ravindra Babu
3

O que a HIVE pode fazer e que não é possível no PIG?

O particionamento pode ser feito usando o HIVE, mas não no PIG, é uma maneira de ignorar a saída.

O que o PIG pode fazer e que não é possível no HIVE?

Referenciamento posicional - Mesmo quando você não tem nomes de campo, podemos fazer referência usando a posição como $ 0 - para o primeiro campo, $ 1 para o segundo e assim por diante.

E outra diferença fundamental é que o PIG não precisa de um esquema para escrever os valores, mas o HIVE precisa de um esquema.

Você pode conectar-se a partir de qualquer aplicativo externo ao HIVE usando JDBC e outros, mas não com o PIG.

Nota: Ambas são executadas sobre o HDFS (sistema de arquivos distribuídos hadoop) e as instruções são convertidas em programas Map Reduce.

221B
fonte
3

Quando estamos usando Hadoopno sentido, isso significa que estamos tentando um enorme processamento de dados. O objetivo final do processamento de dados seria gerar conteúdo / relatórios a partir dele.

Por isso, consiste internamente em 2 atividades principais:

1) Carregando o processamento de dados

2) Gere conteúdo e use-o para os relatórios / etc.

Carregamento / processamento de dados -> Pig seria útil nele.

Isso ajuda como um ETL (podemos executar operações etl usando scripts pig).

Depois que o resultado é processado, podemos usar o hive para gerar os relatórios com base no resultado processado.

Hive: É construído sobre hdfs para processamento em armazém.

Podemos gerar relatórios ad-hoc facilmente usando o hive a partir do conteúdo processado gerado pelo porco.

shyamshyre
fonte
1

Porco come qualquer coisa! Isso significa que ele pode consumir dados não estruturados.

O Hive requer um esquema.

rbanikaz
fonte
1

O Pig é útil para cargas de trabalho de tipo ETL em geral. Por exemplo, conjunto de transformações que você precisa fazer nos seus dados todos os dias.

O Hive brilha quando você precisa executar consultas ad-hoc ou apenas deseja explorar dados. Às vezes, pode atuar como interface para a sua camada de visualização (Tableau / Qlikview).

Ambos são essenciais e servem a propósitos diferentes.

Krishna Kalyan
fonte