luigi操作hive表
关于luigi框架下查询hive表的操作
class JoinQuery(HiveQueryTask):
date=luigi.DateParameter()
def hiveconfs(self):
jcs = {}
jcs['mapred.job.name'] = "xxx_xxx_hive_daily_{}_username".format(format_date(self.date))
jcs['mapred.job.queue.name'] = 'root.xxx.xxx'
return jcs def requires(self):
return LogHiveFiles(date=self.date)
def output(self):
return luigi.hdfs.HdfsTarget(hdfs_targets.DailyExprImgHdfsFiles(date=self.date).path,
format=luigi.hdfs.PlainDir)
def query(self):
query="""
INSERT OVERWRITE DIRECTORY '{ot}'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM {tb} WHERE date='{dt}' LIMIT 1
""".format(ot=self.output().path,tb=self.input().table,dt=self.input().partition['date'])
return query class recCountStats(luigi.Task):
now = datetime.now()
date = luigi.DateParameter(default=datetime(now.year, now.month, now.day) - timedelta(days=3)) def requires(self):
return JoinQuery(self.date)
if __name__ == '__main__':
luigi.run(main_task_cls=recCountStats)
直接上的代码,luigi框架不多说了,可以看之前的luigi的文章。HiveQueryTask类是封装好的专门用于hive sql的类,就是把hive的query写在程序中,他帮你查。
1.JoinQuery类是直接继承自HiveQueryTask类的,处理Luigi本身就有的requires和output以外,区别于spark任务,不用写main()或run()方法,写query()方法就好。
2.区别于luigi下执行spark任务,执行hive和执行mapreduce比较像,需要定义hiveconf方法,就是程序的配置。里面需要定义程序的名称和跑该程序的队列,切记,写了名称和队列 公司服务器才会接受运行该程序,要不然报错的。
3.关于查询的query语句,Luigi不捕捉查询任务的输出,要用INSERT DIRECTORY系列语句将查询结果持久化,并作为output输出。看代码!INSERT OVERWRITE DIRECTORY +table名 可以把结果写入hdfs表 ,用LOCAL DIRECTORY的话可以写在本地。
4.关于requires函数中的 返回的类,可参考下面这样定义,和hdfs的有一些区别,hdfs的只要一个地址就行了。hive的:
class LogHiveFiles(luigi.ExternalTask):
date = luigi.DateParameter()
def output(self):
return luigi.hive.HivePartitionTarget(table='xxxs_xxx_log_xxx_daily',partition={'date': format_date(self.date)})
用的是HivePartitionTarget类。
luigi操作hive表的更多相关文章
- spark+hcatalog操作hive表及其数据
package iie.hadoop.hcatalog.spark; import iie.udps.common.hcatalog.SerHCatInputFormat; import iie.ud ...
- spark使用Hive表操作
spark Hive表操作 之前很长一段时间是通过hiveServer操作Hive表的,一旦hiveServer宕掉就无法进行操作. 比如说一个修改表分区的操作 一.使用HiveServer的方式 v ...
- SparkSQL On Yarn with Hive,操作和访问Hive表
转载自:http://lxw1234.com/archives/2015/08/466.htm 本文将介绍以yarn-cluster模式运行SparkSQL应用程序,访问和操作Hive中的表,这个和在 ...
- 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表
基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...
- Hive基础之Hive表常用操作
本案例使用的数据均来源于Oracle自带的emp和dept表 创建表 语法: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name ...
- hive表信息查询:查看表结构、表操作等--转
原文地址:http://www.aboutyun.com/forum.PHP?mod=viewthread&tid=8590&highlight=Hive 问题导读:1.如何查看hiv ...
- hive表信息查询:查看表结构、表操作等
转自网友的,主要是自己备份下 有时候不记得! 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表 1.hive模糊搜索表 show tabl ...
- hive表分区相关操作
Hive 表分区 Hive表的分区就是一个目录,分区字段不和表的字段重复 创建分区表: create table tb_partition(id string, name string) PARTIT ...
- Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)
1.Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括:数据库.文件.表.试图 Hive默认可以直接加载文本文件(TextFile),还 ...
随机推荐
- 【WPF】RenderTransform和LayoutTransform
布局系统 在WPF中,许多绘图任务通过使用变换(transform)可以变得更加简单——变换是通过不加通告地切换形状或元素使用的坐标系统来改变形状或元素绘制方式的对象.在WPF中,变换的一些类大多继承 ...
- 转:WebGL、Asm.js和WebAssembly概念简介
WebGL.Asm.js和WebAssembly概念简介 转:http://www.techbrood.com/zh/news/webgl/webgl%E3%80%81asm_js%E5%92%8Cw ...
- asp.net core结合Gitlab-CI实现自动化部署
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在之前的文章中写过k8s+Jenkins+GitLab-自动化部署asp.net core项目 的topic,这次讲解一 ...
- windows 10 下安装python 2.7
下载msi的安装包: https://www.python.org/ftp/python/2.7.8/python-2.7.8.msi [incorrect] PS C:\Python27> . ...
- JVM的内存结构,JVM的回收机制
内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收 ...
- 【BZOJ 2654】 MST
2654: tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示 ...
- [BZOJ4556][TJOI2016&&HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1360 Solved: 545[S ...
- Android 杀掉当前程序的进程
在销毁所有活动的代码后面再加上杀掉当前进程的代码,以保证程序完全退出,杀掉进程的代码如下所示: android.os.Process.killProcess(android.os.Process.my ...
- Java之多线程 Semaphore(信号量)
一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...
- X-009 FriendlyARM tiny4412 uboot移植之SD Card用起来Kernel boot起来
<<<<<<<<<<<<<<<<<<<<<<<<< ...