`

hadoop pig vertica

阅读更多

 

hadoop pig vertica是hadoop pig udf loader and storer的DB版,在github上开源,感谢感谢

本文就不贴代码了,附件里有源码,想了解的可以下载

 

先贴一张vertica的目录

 其中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,它继承于org.apache.hadoop.mapreduce.InputFormat<LongWritable, VerticaRecord>。
想必不用多说它的实现,自定义hadoop inputFormat的帖子有不少,不在累述

 

在verticaInputFormat中的getSplit方法,就可以看到使用参数和分页去分解loader这个巨大得让数据库直接崩溃的操作。

 

在verticaIinputFormat中的createRecordReader方法中,返回的是VerticaRecordReader((VerticaInputSplit) split,context.getConfiguration());它继承于org.apache.hadoop.mapreduce.RecordReader<LongWritable, VerticaRecord>,自定义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,已经实现了这个简单的功能,也在附件中可以参考一下

 

 

 

 

 

 

 

 

 
 
  • 大小: 24.7 KB
分享到:
评论

相关推荐

    SAP HANA, HADOOP and other Big Data Tools.pdf

    - **生态系统的扩展**:Hadoop 生态系统还包括了诸如 Hive、Pig、Spark 等工具,这些工具进一步增强了 Hadoop 的功能,使其能够更好地满足企业的需求。 #### 其他大数据工具 除了 SAP HANA 和 Hadoop 之外,市场上...

    大数据解决方案47.pdf

    此外,Syncsort的DMX-h在性能上表现优秀,对比Pig + Java,其处理速度可以达到3倍以上,且无需编写复杂的代码,简化了开发流程。 综上所述,普兰大数据解决方案和Syncsort的DMX-h工具为企业提供了全面、高效的...

    大数据技术交流(PPT 78页).pptx

    Hadoop生态还包括MapReduce(分布式计算框架)、Hive(数据仓库工具)、Pig(数据分析工具)、R和Mahout(机器学习库)等。此外,还有ZooKeeper(分布式协调服务)和Avro(数据序列化系统)等子项目,共同支持大数据...

    大数据技术交流78.pptx

    此外,还有各种处理和分析工具,如MapReduce、流计算(如Apache Storm)、Hive用于查询统计、Pig用于数据清洗、R语言进行统计分析,以及Mahout用于机器学习。 【Hadoop及其组件】 Hadoop是一个开源的分布式系统...

    大数据技术交流.pptx

    列式数据库如HP Vertica和Greenplum,优化了对大数据的分析性能,特别适合于大数据量的查询和分析任务,因为它们能快速处理特定列的数据。 7. 技术适用的场合 不同的大数据技术适用于不同的业务场景。例如,分布式...

    大数据平台技术框架选型.docx

    最后,对比不同框架如Exadata TDW+FineBI、HDP(Hortonworks Data Platform)、Phoenix、Stinger、Presto、Shark、Pig等,了解它们的优势和劣势,结合具体业务场景和技术需求,做出最适合的决策。例如,Phoenix支持SQL...

    大数据平台运维架构实践.pdf

    魅族大数据平台架构包括AnyStream Agent、Flume Collector、Metaq、Spark Streaming、DB、AnyStream Agent、HDFS、Zookeeper、YARN、MR、Hive/Pig、Kerberos、LDAP、Spark、Mysql、Oracle、Vertica、Hbase等组件。...

    魅族大数据运维平台实践.pptx

    平台的核心包括离线处理组件如HDFS、Zookeeper、YARN、MapReduce、Hive和Pig,以及安全认证系统如Kerberos和LDAP。此外,Spark的引入提升了数据分析能力,而Mysql和ELK(Elasticsearch、Logstash、Kibana)组合提供...

Global site tag (gtag.js) - Google Analytics