pigpy

Una herramienta de Python para administrar informes de cerdos
Descargar ahora

pigpy Clasificación y resumen

Anuncio publicitario

  • Rating:
  • Licencia:
  • MIT/X Consortium Lic...
  • Precio:
  • FREE
  • Nombre del editor:
  • Marshall Weir

pigpy Etiquetas


pigpy Descripción

Una herramienta de Python para gestionar los informes de cerdos. PIGFY es una biblioteca de Python para administrar los informes de cerdos. El cerdo proporciona un conjunto increíble de herramientas para crear procesos relacionales complejos en la parte superior de Hadoop, pero tiene algunas piezas que faltan: 1) Construcciones de bucle para crear fácilmente múltiples informes similares 2) Caching de cálculos intermedios. 3) Gestión de datos y código de limpieza. 4) Pruebas fáciles de la corrección del informe PyPIG es un intento de completar estos agujeros proporcionando un módulo de Python que conozca cómo hablar con un clúster de Hadoop y puede crear y administrar estructuras de informes complejos. H1. Empezando H2. Instalación Actualmente no hay un procedimiento de instalación real. Realizar el tronco actual y jugar con él desde allí. El único requisito que soy consciente es que el ejecutable Java debe estar en su camino y debe ser 1.6 o más nuevo. El archivo grunt.py en el nivel superior debe ser un ejemplo razonable de dónde comenzar a usar este módulo, además de este tutorial. Pigy ha sido probado en OS X y Debian Linux. H2. Enviando informes En su nivel básico, PyPIG es una herramienta para enviar trabajos de cerdo a Hadoop y presionar y tirar de los datos en un clúster. Supongamos que tenemos un informe de cerdo llamado report.pig en el directorio actual. de Bacon.Hadoop Import HadoopclassPaths = local_home = os.path.join (os.path.dirname (__ file__), "externo", "hadoop-0.18.3") name_node = "Archivo: ///" hadoop = hadoop (local_home, name_node, classpaths) hadoop.run_pig_job ("report.pig") hadoop.copytolocal ("/ informes / salputación.csv", "OUTPUT.CSV") Este código ejecuta el informe sobre cualquier grupo que se especifique por Name_Node, y luego tire de la salida (suponiendo que la ruta de salida es /Reports/output.csv) al sistema de archivos local. El argumento Name_Node puede ser cualquier URL HDFS (por ejemplo, HDFS: // hadoop_cluster_ip: 54310). El código de prueba se puede escribir fácilmente para apuntar a los datos en el sistema de archivos local o un clúster de prueba para hacer que la verificación de los resultados correctos sea más fácil. H2. Creando informes complejos Más allá de solo presentar informes, PyPIG proporciona herramientas para crear informes muy complejos utilizando Python y Pig Latin en lugar de solo Latín de cerdo. Esto le permite usar las construcciones de python de nivel superior para generar código de cerdo en lugar de mantener informes grandes a mano. A continuación se muestra un ejemplo de un informe muy simple que proporciona estadísticas sobre los automóviles por color. Desde Bacon.Hadoop Import Hadoopfrom Bacon.Reports Import Report, Plan, PlanRunnerhadoop = (Código de inicialización de Hadoop) Datos = Informe ("car_color_data", "cargar 'car_colors.tsv' como (marca, modelo, precio, color);") Color_Reports = [] Para el precio en : Color_Reports.Aply (informe ("% s_cars"% precio, padres = {"color_data": data} Code = "" "% (esto) s = Filtro% (Color_DATA) S por precio <"" "+ STR (Precio) +" "";% (esto) s = foreach (grupo% (esto) s por color) {Generar grupo.color, AVG (% ( esto) S.Precio);} "" ") Plan = Plan (" / TMP / Reports ", Color_Reports) Print Plan.PIGFILEPLAN_RUNNER = PlanRunner (Plan, Hadoop) Plan_Runner.Run_Reports () plan_runner.save_reports (" ~ / informes ") plan_runner.cleanup () Esto imprimirá el siguientefil de pigfile y luego lo ejecutará y guardará los resultados en la máquina local: Cargar 'car_colors.tsv' como (hacer, modelo, precio, color); 5000_cars = filter car_color_data por precio <5000; 5000_Cars = foreach (Grupo 5000_Cars por color) {Generar group.color, AVG (5000_Cars.Precio); } Tienda 5000_Cars en '/tmp/Reports/1244375262.84/5000_Cars' usando PIKSTORAGE (','); 10000_Cars = Filter Car_Color_Data por precio <10000; 10000_Cars = foreach (Grupo 10000_Cars por color) {Generar group.color, AVG (10000_Cars.Precio); } Tienda 10000_CARS en '/Tmp/Reports/1244375262.84/10000_Cars' usando PigStorage (','); 15000_Cars = Filter Car_Color_Data por precio <15000; 15000_Cars = foreach (Grupo 15000_Cars por color) {Generar grupo.color, AVG (15000_Cars.Precio); } Tienda 15000_Cars en '/tmp/reports/1244375262.84/15000_cars' usando PIKSTORAGE (','); 20000_Cars = Filter Car_Color_Data por precio <20000; 20000_Cars = foreach (Grupo 20000_Cars por color) {Generar Group.Color, AVG (20000_Cars.Precio); } Tienda 20000_Cars en '/Tmp/Reports/1244375262.84/20000_Cars' usando PIKSTORAGE (','); 150000_Cars = Filter Car_Color_Data por precio <150000; 150000_Cars = foreach (Grupo 150000_Cars por color) {Generar Group.Color, AVG (150000_Cars.Precio); } Tienda 150000_Cars en '/tmp/reports/1244375262.84/150000_Cars' usando PigStorage (','); Si bien este ejemplo es trivial que hacer en el latín de cerdo crudo (y se puede escribir mucho mejor con un grupo inteligente ... incluso aquí es mucho más fácil alterar los resultados para cada informe en la envoltura de Python que en el cerdo resultante Latín. Además, si hubiera sido perezoso y no renombrado a cada alias, en su lugar, llamando a cada informe CAR_PRICE, el módulo cambió el nombre de cada alias car_price, car_price_1, car_price_2, etc. Aquí, no hará ninguna diferencia, ya que estamos escribiendo de inmediato cada datos. Bolsa al sistema de archivos y no realizando más procesamiento. Esta propiedad de renombramiento es por eso que uso% (esto) S en la plantilla de informe en el bucle. Cuando el objeto de informe está escrito en el archivo de cerdo, auto y los padres se llenan por la interpolación de cadenas de diccionarios. % (esto) S es una clave especial utilizada para extraer el nombre real del informe actual. No hay ningún requisito para usar ninguna de esta funcionalidad, el informe podría ser el código de resultados y evitar el uso del bucle o los padres, pero esto hace que sea mucho más difícil alterar los informes en el futuro. Los caminos en el sistema de archivos de Hadoop son bastante horribles de acceder directamente, por lo que el PlanRunner puede tratar con guardarlos al directorio local. El nombre de la carpeta es solo la marca de tiempo para tratar de evitar que la carpeta se queje si la carpeta ya existe. El método SAVE_REPORTS Tirará las cosas a un directorio especificado por el usuario desde cualquier ruta horrible que se use en Hadoop, y el método de limpieza en el PlanRunner eliminará todas las huellas del trabajo de cerdo de los HDFS. H2. Resultados intermedios en caché El siguiente código genera 3 informes para guardar, todos en función de los mismos resultados iniciales. Para el propósito de este ejemplo, asuma que la UDF personalizada lleva horas para procesar los archivos y cada informe final toma unos minutos. de pigpy.hadoop Import hadoopfrom pigpy.reports importar informe, plan, planrunnerhadoop = (código de inicialización de Hadoop) Slow_Report = Informe ("Demográfico_agregado", código = "" "% (esto) s = cargar 'us_census.tsv' como (edad, salario, family_size, estado);% (esto) s = (horrible filtrado / agrupación de UDF personalizado) a medida que (edad, salario, family_size, estado, cuenta); "" ") State_Reports = [] para el estado en : State_Reports.Append (Report (State, Padres = {"Demo": Slow_Report}, Code = "%% (esto) S = Filtro %% (Demo) S por State == '% S '; "PLAN = PLAN = PLAN = PLAN (" / TMP / Informes ", State_Reports) Print Plan.PIGFILEPLAN_RUNNER = PLANRUNNER (PLAN, HADOOP) PLAN_RUNNER.RUN_REPORTS () PLAN_RUNNER.SAVE_REPORTS (" ~ / INFORMES ") PLAN_RUNNER.CLEANUP () Este código generará y ejecutará el siguiente informe de cerdo: Demográfico_aggregate = cargar 'us_census.tsv' como (edad, salario, family_size, estado); Demográfico_aggregate = (filtrado horrible / agrupación de la UDF personalizada) a medida que (edad, salario, family_size, estado, conde); Michigan = Filtro Demográfico_aggregate por estado == 'Michigan'; Almacene Michigan en '/tmporports/1244588320.16/michigan' usando PigStorage (','); Ohio = Filtro Demográfico_aggregado por estado == 'Ohio'; Almacene Ohio en '/Tmp/Reports/1244588320.16/OHIO' Usando Pigstorage (','); Nevada = Filtro Demográfico_aggregado por estado == 'Nevada'; Tienda Nevada en '/tmporports/1244588320.16/Nevada' usando PigStorage (','); Con la versión actual de PIG (0.2.0 en el momento de este tutorial), este trabajo de cerdo volverá a ejecutar el Demográfico_agregado para cada uno de los 3 informes subsidiarios. Con suerte, esto se corregirá en una futura liberación de cerdo, pero hasta entonces, Pigfy puede forzar el almacenamiento en caché de estos resultados para usted. Si configura un controlador de registro para Pig Fy.Reports, debe ver la siguiente advertencia: ADVERTENCIA: Picpy.Reports: Informe Demográfico_aggregado debe ser almacenado en caché, pero no tiene cache_columns Esto significa que Pigfy ha encontrado un informe que cree que debe almacenarse en caché, pero no puede encontrar sugerencias adecuadas para guardarla y cargarla. Si modificamos el desmontable_agregado a esto: Slow_Report = Informe ("Demográfico_agregado", código = "" "% (esto) s = cargar 'us_census.tsv' como (edad, salario, family_size, estado);% (esto) s = (Filtrado horrible / agrupación de UDF personalizado) A medida que (edad, salario, family_size, estado, cuenta); "" ", cache_columns =" ​​Edad, salario, Family_Size, estado, conde ") PIGFY agregará estas dos líneas al informe de cerdo después de que el Demográfico_aggregate haya ejecutado su horrible cálculo: Tienda Demográfico_aggregate en '/tmp/reports/1244589140.23/demográfico_aggregate' usando pigstorage (','); Demográfico_aggregate = cargar '/tmp/reports/1244589140.23/Demográfico_agregado' usando PIGSORAGE (',') AS (edad, salario, family_size, estado , contar); El cerdo verá este código y ahorrará los resultados para que se archiven Demográficamente. Cuando los alias futuros usan Demographic_aggregate, iterirán de nuevo a través del informe y encontrarán la línea de carga y cargarán los resultados anteriores en lugar de volver a ejecutar los cálculos. Si utiliza el almacenamiento en caché, es muy importante asegurarse de que el método de limpieza se llama, o que sus hdfs se llenarán muy rápidamente. Además, Pigfy no es muy inteligente sobre el almacenamiento en caché, por lo que forzará el almacenamiento en caché cada vez que suministre cache_columns y hay más de un informe subsidiario. Esto puede causar que los trabajos adicionales reducen el mapa para ejecutarse en su clúster. En Zattoo, los valores intermedios de almacenamiento en caché se han mejorado un rendimiento hasta 10 veces dependiendo de la cantidad de informes subsidiarios. Requisitos: · Python


pigpy Software relacionado