首先,目标是写个python脚本,跑spark程序来统计hdfs中的一些数据。参考了别人的代码,故用了luigi框架。

至于luigi的原理 底层的一些东西Google就好。本文主要就是聚焦快速使用,知其然不知其所以然。

python写Spark或mapreduce还有其他的方法,google上很多,这里用luigi只是刚好有参考的代码,而且理解起来还是简单,就用了。

上代码:

import luigi, sys
from datetime import datetime, timedelta
from luigi.contrib.spark import PySparkTask class luigiBase(PySparkTask):
date = luigi.DateParameter(default=datetime.now())
def main(self, sc, *args):
log_rdd = sc.textFile(self.input()[0].path)
#要做的spark操作
  log_rdd.repartition(1).saveAsTextFile(self.output().path)
@property
  def name(self):
return "luigi_test_{}_username".format(format_date(self.date))
def requires(self):
return [HdfsFiles(date=self.date)]
def output(self):
return luigi.hdfs.HdfsTarget(Files().path,format=luigi.hdfs.PlainDir) class luigiStats(luigi.Task):
now = datetime.now()
date = luigi.DateParameter(default=datetime(now.year, now.month, now.day) )
def requires(self):
return luigiBase(self.date) if __name__ == '__main__':
luigi.run(main_task_cls=luigiStats)

1.对于普通的luigi任务,关键是要按需实现requires、output和run三个函数;对于luigi封装好的spark任务,关键是要按需实现requires、output和main三个函数

2.base类继承PySparkTask类,该类还有很多参数可以设置,但作为最最简单的luigi例子,就都剔除了,只要在意requires、output和main三个函数就好。可以把requires理解成输入,output输出,main是要实现的逻辑。name函数之所以也写出来,是因为在将代码pushonline的时候,每个Job都要取名字,而公司对job的名字是有规定的,如果name结尾不是你的用户名,Spark程序是会报错的,就是不让你跑的意思。

3.代码有两个类,base和stats类,执行逻辑是这样的:主函数调用stats,然后发现stats类requires(依赖于)base类,就看看这个依赖的输出存不存在,如果存在就作为自己的输入,然后执行自己类中的代码。如果不存在就执行base类。上面代码中我的stats类中不需要执行上面,就没写main,只是用来检查下base执行了没,没执行就执行base去。

3.该base类中requires和ouput都是hdfs文件,逻辑和stats类一样。base类需要继承PySparkTask类,而luigi.run()的参数需要时继承了luigi.Task的类,所以才分开写成两个类了,我自己是这样理解的。

4.requires函数的返回值不能是个target对象,这里具体的理解就是不能是一个直接读取的hdfs文件,可以封装到一个类中去,这个类可以有个属性是path,是用来返回一个hdfs文件的地址的。依赖不仅限一个,可以是多个,生成一个列表返回。

5.如果不是在自己的电脑上安装的Spark,要注意:由于PySparkTask调用的spark集群不在本地,好像不支持对本地文件的一些操作,开始的时候想把结果写在本地,一直找不到输出结果。

6.一般公司都有相对应得网页可以查看spark和hadoop程序的运行的情况,可以查看日志什么的。

7.base类中可以设置下queue 参数,选择你程序的运行队列,有时候默认的队列好像特别慢,可以设置个其他的。

luigi框架--关于python运行spark程序的更多相关文章

  1. 如何在本地使用scala或python运行Spark程序

    如何在本地使用scala或python运行Spark程序   包含两个部分: 本地scala语言编写程序,并编译打包成jar,在本地运行. 本地使用python语言编写程序,直接调用spark的接口, ...

  2. eclipse运行spark程序时日志颜色为黑色的解决办法

    自从开始学习spark计算框架以来,我们老师教的是local模式下用eclipse运行spark程序,然后我在运行spark程序时,发现控制台的日志颜色总是显示为黑色,哇,作为程序猿总有一种强迫症,发 ...

  3. 使用IDEA运行Spark程序

    使用IDEA运行Spark程序 1.安装IDEA 从IDEA官网下载Community版本,解压到/usr/local/idea目录下. tar –xzf ideaIC-13.1.4b.tar.gz ...

  4. Hadoop:开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary path

    问题: windows开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary ...

  5. 如何运行Spark程序

    [hxsyl@CentOSMaster spark-2.0.2-bin-hadoop2.6]# ./bin/spark-submit --class org.apache.spark.examples ...

  6. Python 运行其他程序

    10.4 运行其他程序 在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程, ...

  7. 运行Spark程序的几种模式

    一. local 模式 -- 所有程序都运行在一个JVM中,主要用于开发时测试    无需开启任何服务,可直接运行 ./bin/run-example 或 ./bin/spark-submit 如:  ...

  8. 在Windows上运行Spark程序

    一.下载Saprk程序 https://d3kbcqa49mib13.cloudfront.net/spark-2.1.1-bin-hadoop2.7.tgz 解压到d:\spark-2.1.1-bi ...

  9. spark学习14(spark local模式运行spark程序的报错)

    报错1 java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. 解 ...

随机推荐

  1. 百度地图API详解之自定义地图类型

    http://blog.csdn.net/sup_heaven/article/details/8461586 今天的文章主要介绍如何利用地图API实现自定义地图. 百度地图API目前默认支持两种地图 ...

  2. Linux的经典shell命令整理

    Linux的经典shell命令整理 1.删除0字节文件find -type f -size 0 -exec rm -rf {} \; 2.查看进程按内存从大到小排列ps -e -o “%C : %p ...

  3. Maven入门使用(一)

    一.什么是maven 一般认为maven是项目构建工具+依赖管理工具+项目信息管理工具. maven是一个强大的构建工具,能够帮助我们自动化构建过程. 清理.编译.测试.生成报告.打包.部署都是可以通 ...

  4. svn代码同步脚本

    碰到一个需求,主要是2个项目需要用到同一份代码,主要是域名和配置信息不一样,而且要把svn更新的代码同步过去.本来考虑提交时用钩子同步过去,但考虑到同步过去的代码还需要测试,而且另一边代码的时效性不强 ...

  5. AppDomain.CurrentDomain.BaseDirectory是什么

    AppDomain.CurrentDomain.BaseDirectory 是获取基目录,它由程序集冲突解决程序用来探测程序集.由显示的路径可以看出,它代表的是程序集所在的目录,它具有读取和写入的属性 ...

  6. BZOJ3619 [Zjoi2014]璀灿光华 构造+dfs

    题意:有一个\(a^3\)个小正方体组成的大正方体,其中有n个正方体会向上下左右前后六个方向中的一个发出光,正方体是透光的,被照亮的正方体有个美丽值\(g_{i}\),给出正方体的相邻关系,问美丽值之 ...

  7. 【9.23校内测试】【抽屉原理】【乱搞??(找众数】【Trie】

    看到题目一开始想到的是一道求子集和的异或和,可以用$bitset$实现求子集和.然而这道题如果要强算子集和肯定是带不动的,况且还要算方案,所以尝试去找题目中的性质. 看到整除,很容易想到如果是一段区间 ...

  8. BZOJ1002輪狀病毒 暴搜 + 找規律 + 高精度

    @[暴搜, 找規律, 高精度] Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个\(n\)轮状基由圆环上\(n\)个不同的基原子和圆心处一个核原子构成的,2个 ...

  9. 【树链剖分/倍增模板】【洛谷】3398:仓鼠找sugar

    P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  10. jquery加载解析XML文件

    xml文件 <?xml version="1.0" encoding="utf-8" ?> <taxrates> <taxrate ...