pigpia

Uma ferramenta Python para gerenciar relatórios de porcos
Baixe Agora

pigpia Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • MIT/X Consortium Lic...
  • Preço:
  • FREE
  • Nome do editor:
  • Marshall Weir

pigpia Tag


pigpia Descrição

Uma ferramenta Python para gerenciar relatórios de porcos Pigpy é uma biblioteca Python para gerenciar relatórios de porcos. O porco fornece um incrível conjunto de ferramentas para criar processos relacionais complexos em cima do Hadoop, mas tem algumas peças perdidas: 1) Construções de looping para criar facilmente vários relatórios semelhantes 2) Cache de cálculos intermediários 3) Gerenciamento de dados e código de limpeza 4) teste fácil para exatidão do relatório O PyPig é uma tentativa de preencher esses buracos, fornecendo um módulo Python que saiba como falar com um cluster de Hadoop e pode criar e gerenciar estruturas de relatório complexas. H1. Começando H2. Instalação Atualmente não há procedimento de instalação real. Checkout o tronco atual e brincar com ele de lá. O único requisito que estou ciente é que o executável Java deve estar no seu caminho e deve ser 1,6 ou mais novo. O arquivo grunt.py no nível superior deve ser um exemplo razoável de onde começar a usar este módulo, além deste tutorial. Pigpy foi testado no OS X e Debian Linux. H2. Envio de relatórios Em seu nível básico, o PyPig é uma ferramenta para apresentar trabalhos de porcos para Hadoop e empurrar e puxar dados em um cluster. Suponha que tenhamos um relatório de porco chamado Report.Pig no diretório atual. de Bacon.Hadoop Import HadoopClassPaths = local_home = os.path.join (os.path.dirname (__ file__), "externo", "Hadoop-0.18.3") Name_node = "arquivo: ///" hadoop = hadoop (local_home, name_node, classpaths) hadoop.run_pig_job ("report.pig") hadoop.copytolocal ("/ relatórios / output.csv", "outut.csv") Este código executa o relatório em qualquer cluster é especificado pelo nome_node e, em seguida, puxa a saída (assumindo que o caminho de saída é /reports/Output.csv) para o sistema de arquivos local. O argumento Name_Node pode ser qualquer URL HDFS (por exemplo, HDFS: // hadoop_cluster_ip: 54310). O código de teste pode ser facilmente gravado para apontar para dados no sistema de arquivos local ou um cluster de teste para facilitar a verificação dos resultados corretos. H2. Criando relatórios complexos Além de apenas enviar relatórios, o Pypig fornece ferramentas para criar relatórios muito complexos usando o latim de python e porco em vez de apenas porco latino. Isso permite que você use os construtos de python de nível superior para gerar código de porco em vez de manter grandes relatórios à mão. Abaixo está um exemplo de um relatório muito simples, proporcionando estatísticas sobre carros por cor. de Bacon.Hadoop Import HadoopFrom Bacon.Reports Relatório de Importação, Plano, PlanrunnerHadoop = (código de inicialização do Hadoop) Dados = Relatório ("car_color_data", "Carregar 'car_colors.tsv' como (fazer, modelo, preço, cor);") Color_Report = [] para preço em : Color_Reports.Append (Relatório ("% S_CARS"% Preço, Pais = {"Color_Data": Data} Código = "" "% (isto) = Filtro% (color_data) s por preço <"" "+ str (preço) +" "";% (isto) s = foreach (grupo% (este) s por cor) {gerar grupo.color, AVG (% (% (% isto) s.price);} "" "")) Plan = Plan ("/ tmp / relatórios", color_reports) Imprimir plano.pigfileplan_runner = Planrunner (Plan, Hadoop) Plan_runner.run_reports () plan_runner.save_reports ("~ / relatórios ") Plan_runner.Cleanup () Isso imprimirá o seguinte porco e, em seguida, executará e salvar os resultados para a máquina local: Carregar 'car_colors.tsv' como (fazer, modelo, preço, cor); 5000_cars = filtro car_color_data por preço <5000; 5000_cars = foreach (grupo 5000_cars por cor) {gerar grupo.color, avg (5000_cars.price); } Store 5000_cars em '/tmp/reports/1244375262.84/5000_cars' usando porco (','); 10000_cars = filtro car_color_data por preço <10000; 10000_cars = foreach (grupo 10000_cars por cor) {Generate Group.Color, AVG (10000_CARS.PRICE); } Store 10000_cars em '/tmp/reports/1244375262.84/10000_cars' usando porco (','); 15000_cars = filtro car_color_data por preço <15000; 15000_cars = foreach (grupo 15000_cars por cor) {Generate Group.Color, AVG (15000_cars.price); } Store 15000_cars em '/tmp/reports/1244375262.84/15000_cars' usando porco (','); 20000_cars = filtro car_color_data por preço <20000; 20000_cars = foreach (grupo 20000_cars por cor) {gerar grupo.color, avg (20000_cars.price); } Store 20000_cars em '/tmp/reports/1244375262.84/20000_cars' usando porco (','); 150000_cars = filtro car_color_data por preço <150000; 150000_cars = foreach (grupo 150000_cars por cor) {gerar grupo.color, avg (150000_cars.price); } Store 150000_cars em '/tmp/reports/1244375262.84/150000_cars' usando porco (','); Embora este exemplo seja trivial para fazer em latim de porco crus (e pode ser escrito muito melhor com um grupo inteligente ... by), mesmo aqui é muito mais fácil alterar os resultados para cada relatório no invólucro de python do que no porco resultante Latim. Além disso, se eu tivesse sido preguiçoso e não renomeado a cada alias, em vez disso, chamando cada relatório car_price, o módulo renomeará de cada alias car_price, car_price_1, car_price_2, etc. Aqui não faria qualquer diferença, pois estamos imediatamente escrevendo cada dado saco para o sistema de arquivos e não fazer processamento adicional. Esta renomeação é por que eu uso% (esta) s no modelo de relatório no loop. Quando o objeto Relatório é gravado no arquivo de porco, eu e os pais estão preenchidos pela interpolação de string de dicionário. % (isto) s é uma chave especial usada para puxar o nome real do relatório atual. Não há necessidade de usar qualquer uma dessas funcionalidades, o relatório poderia ser apenas o código de resultado e evitar o uso do loop ou pais, mas isso torna muito mais difícil alterar relatórios no futuro. Os caminhos no sistema de arquivos do Hadoop são bastante horríveis para acessar diretamente, e é por isso que o Planrunner pode lidar com eles para o diretório local. O nome da pasta é apenas o registro de data e hora para tentar evitar que a pasta já exista. O método Save_Reports irá puxar as coisas para um diretório especificado pelo usuário de qualquer caminho horrível é usado no Hadoop, e o método de limpeza no Planrunner removerá todos os vestígios do trabalho de porco do HDFS. H2. Resultados intermediários em cache O código a seguir gera 3 relatórios para salvar, todos com base nos mesmos resultados iniciais. Para o propósito deste exemplo, assuma que o UDF personalizado leva horas para processar os arquivos e cada relatório final demora alguns minutos. de Pigpy.Hadoop Import HadoopFrom Pigpy.Reports Relatório de importação, plano, PlanrunnerHadoop = (código de inicialização do Hadoop) Slow_report = Relatório ("demográfico", código = "" "% (isto) s = carga 'us_census.tsv' como (idade, salário, family_size, estado);% (isto) s = (filtro horrível / agrupamento UDF personalizado) como (idade, salário, família_size, estado, contagem); "" "") state_reports = [] para o estado em : estado_reports.appons (estado, pais = {"demo": slow_report}, código = "%% (isto) S = filtro %% (demo) S por estado == '% s '; "% estado)) Plano = Plano (" / tmp / relatórios ", estado_reports) Imprimir plano.pigfileplan_runner = Planrunner (Plan, Hadoop) Plan_runner.run_reports () plan_runner.save_reports (" ~ / relatórios ") Plan_runner.cleanup () Este código gerará e executará o seguinte relatório de porco: Demographic_aggate = carregar 'us_census.tsv' como (idade, salário, família_size, estado); demográfico_agegate = (filtro horrível UDF personalizado) como (idade, salário, família_size, estado, contagem); michigan = filtro demográfico_agregate por estado == 'Michigan'; armazenar Michigan em '/tmp/reports/1244588320.16/michigan' usando porco (','); Ohio = filtro demográfica_aggate por estado == 'Ohio'; armazenar ohio em '/tmp/reports/1244588320.16/OHIO' Usando porco (','); nevada = filtro demográfico_aggate por estado == 'nevada'; armazenar nevada em '/tmp/reports/1244588320.16/nevada' usando bigstorage (','); Com a versão atual do porco (0.2.0 no momento deste tutorial), esse trabalho de porco executará novamente o demográfico_aggrado para cada um dos 3 relatórios subsidiários. Esperançosamente, isso será corrigido em uma futura liberação de porco, mas até então, Pigpy pode forçar o armazenamento em cache desses resultados para você. Se você configurar um manipulador de registro para Pigpy.Reports, você deve ver o seguinte aviso: Aviso: Pigpy.Reports: relatório demográfico_aggate deve ser armazenado em cache, mas não tem cache_columns Isso significa que Pigpy encontrou um relatório que pensa deve ser armazenado em cache, mas não consegue encontrar sugestões apropriadas para salvar e carregá-lo. Se modificarmos o demográfico_aggate para isso: Slow_Report = Relatório ("demográfico", código = ""% (isto) s = carga 'us_census.tsv' como (idade, salário, família_size, estado);% (isto) s = (filtragem horrível / agrupamento UDF personalizado) Como (idade, salário, família_size, estado, contagem); "", cache_columns = "idade, salário, família_size, estado, contagem") Pigpy irá adicionar estas duas linhas ao relatório de porco após o demográfico_aggrado ter executado seu cálculo horrível: Store Demographic_AgRegar em '/tmp/reports/1244589140.23/deMográficas_agregate' Usando porcostorage (','); demografia_aggate = load '/tmp/reports/1244589140.23/demográficas_agegate' Usando porcostorage (',', SALVIMENTO, FAMILY_SIZE, ESTADO , contar); O porco verá este código e economizará os resultados do arquivo demográfico_aggregar no arquivo. Quando os aliases futuros usam demografia_aggate, eles irão fazer backup do relatório e encontrar a linha de carga e carregar os resultados anteriores em vez de executar os cálculos novamente. Se você usar o armazenamento em cache extensivamente, é muito importante certificar-se de que o método de limpeza seja chamado ou seu HDFS preencherá muito rapidamente. Além disso, Pigpy não é muito inteligente sobre o cache, por isso ele forçará o armazenamento em cache toda vez que fornecer cache_columns e há mais de um relatório subsidiário. Isso pode causar tarefas adicionais de redução de mapas para serem executadas em seu cluster. No Zattoo, os valores intermediários em cache têm melhor desempenho até 10x, dependendo do número de relatórios subsidiários. Requisitos: · Pitão


pigpia Software Relacionado

rql.

Linguagem de consulta de relacionamento (RQL) utilitários ...

166

Download