设为首页 收藏本站
查看: 836|回复: 0

[经验分享] hadoop pig vertica

[复制链接]

尚未签到

发表于 2016-12-4 11:02:10 | 显示全部楼层 |阅读模式
 
hadoop pig vertica是hadoop pig udf loader and storer的DB版,在github上开源,感谢感谢
本文就不贴代码了,附件里有源码,想了解的可以下载
 
先贴一张vertica的目录
DSC0000.jpg
 其中verticaLoader,verticaStorer是vertica给出的接口类,是hadoop pig的loader和storer的UDF
verticaLoader对于读取数据库分解为多个maper,其在于读取数据库的分页,以及sql语句的等价拆分。
verticalStorer则相对简单,只是简单的类型转换,insert语句到数据库
 
verticalLoader和verticaStorer现在只是做了简单的功能实现,对于连接池,多数据库支持,元数据等都没有考虑,并且loader的split策略过于单一。
 
这里贴出verticaLoader:
 

public class VerticaLoader extends LoadFunc implements LoadMetadata{
......
private RecordReader<?, ?> reader = null;
//设置用户签名
@Override
public void setUDFContextSignature(String signature) {
System.out.println("setUDFContextSignature invocation...."+signature);
this.contextSignature = signature;
}
@Override
public InputFormat<?, ?> getInputFormat() throws IOException {
System.out.println("getInputFormat invocation..."+getQuery()+"-----------"+getParameters());
return new VerticaInputFormat(getQuery(), getParameters());
}
private Tuple translate(VerticaRecord v) throws IOException {
int columns = v.size();
Tuple result = TupleFactory.getInstance().newTuple(columns);
for (int i = 0; i < columns; i++) {
Object obj = v.get(i);
Integer type = v.getType(i);
......
}
}
return result;
}
//获取reader读取后的数据,返回数据tuple
@Override
public Tuple getNext() throws IOException {
....
return translate(value);
}
//读取前的准备
@Override
@SuppressWarnings("rawtypes")
public void prepareToRead(RecordReader reader, PigSplit split) throws IOException {
.....
this.reader = reader;
}
//固定读取的schemal,这里去读db的datameta
@Override
public ResourceSchema getSchema(String location, Job job) throws IOException
{
。。。。。
}
//设置loader的地址,在pig script loader中的location,这里包含数据库   
//信息,以及sql语句
@Override
public void setLocation(String location, Job job) throws IOException {
......
}
@Override
public String[] getPartitionKeys(String location, Job job) {
return null;
}
@Override
public void setPartitionFilter(Expression filter) {
}
@Override
public ResourceStatistics getStatistics(String location, Job job) {
return null;
}
//Important to override because of PIG-1378
@Override
public String relativeToAbsolutePath(String location, Path curdir) throws IOException {
try {
String enc = java.net.URLEncoder.encode(location, "UTF-8");
return enc;
} catch (java.io.UnsupportedEncodingException e) {
throw new IOException(e);
}
}
}

 在verticaloader中方法getInputFormat,返回verticaInputFormat,它继承于[size=1.1em]org.apache.hadoop.mapreduce.InputFormat<LongWritable, VerticaRecord>。
想必不用多说它的实现,自定义hadoop inputFormat的帖子有不少,不在累述


 
在verticaInputFormat中的getSplit方法,就可以看到使用参数和分页去分解loader这个巨大得让数据库直接崩溃的操作。
 
  在verticaIinputFormat中的createRecordReader方法中,返回的是VerticaRecordReader((VerticaInputSplit) split,context.getConfiguration());它继承于[size=1.1em]org.apache.hadoop.mapreduce.RecordReader<LongWritable[size=1.1em], VerticaRecord[size=1.1em]>,自定义hadoop RecordReader的帖子也有不少,不在累述
贴出来它的nextKeyValue方法,就明了他的功能

@Override
public boolean nextKeyValue() throws IOException, InterruptedException {
key.set(pos + start);
pos++;
try {
if (results.next()) {
for (int i = 0; i < nColumns; i++) {
value.set(i, results.getObject(i+1));
}
return true;
}
} catch (SQLException e) {
throw new IOException(e);
}
return false;
}
 
这里还忘记说在inputformat中,getSplit方法中的verticaInputSplit
他的方法executeQuery在reader中调用,获取数据库的一次session
 
这里verticaInputFormat就分析完了,verticaOutputFormat就简略了,他就一个insert的操作
不属于vertica项目的DBStorage,已经实现了这个简单的功能,也在附件中可以参考一下
 
 
 
 
 
 
 
 



 

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-309492-1-1.html 上篇帖子: Hadoop配置小结 下篇帖子: Hadoop之文件系统Shell
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表