sqoop2 java api实现_Sqoop2 Java客户端API指南

原文连接:http://sqoop.apache.org/docs/1.99.6/ClientAPI.html

Sqoop Java客户端API指南

这篇文章秒描述了额如何在外部应用中使用sqoop java 客户端API。通过客户端API可以实现sqoop命令的功能。使用Sqoop客户端API需要Sqoop 客户端Jar文件及其依赖。

提供了支持sqool操作的封装方法的主要类是:

public classSqoopClient {

...

}

Java Client API isexplained using Generic JDBC Connector example. Before executing theapplication using the sqoop client API, check whether sqoop server is running.

JAVA客户端API会被通用的 JDBC连接器实例解释。在执行使用sqoop客户端API的应用前要确认sqoop服务器已经启动了。

流程

在sqoop服务器中执行一个sqoop任务的流程如下:

1. 通过使用connectorId来建立一个LINK对象-创建Link对象并发返回linkId(lid)

2. 使用 from linkId和to linkId来创建一个JOB对象 – 创建已给Job对象并返回jobId(jid)

3. 启动指定jobId的任务。在服务器上启动任务并生成一条提交记录。

工程依赖

maven 依赖

org.apache.sqoop

sqoop-client

${requestedVersion}

初始化啊

First initializethe SqoopClient class with server URL as argument.

首先使用服务器URL来初始化SqoopClient类实例

String url ="http://localhost:12000/sqoop/";

SqoopClient client= new SqoopClient(url);

可以使用客户端对象的setServerUrl(String)方法来修改服务器的URL

client.setServerUrl(newUrl);

Link

连接器提供了和多个数据源进行交互的功能,因此在sqoop中用来作为在不同数据源中传输数据的方法。注册的注册器需要提供从其所代表的数据源中读取数据和写入数据的逻辑实现。连接器可以被一个或多个连接关联。Java客户端API允许用户为某个注册的 连接器创建,更新和删除一个连接。创建和更新连接要求取出针对特定连接器的连接配置。因此最开始的事情就是获取注册的连接器的列表并选择用来创建连接的连接器。然后就可以通过使用Display Config and Input Names For Connector来获取该连接器的所有配置和输入列表

保存连接

首先通过调用createLink(cid)方法,传入一个连接器ID创建一个新的 连接并返回一个MLink对象,该对象包含一个id和对应连接器未设定的 连接配置。接着使用相关输入填充配置。最后传递配置好的MLink调用saveLink方法保存连接

// create aplaceholder for link

long connectorId =1;

MLink link =client.createLink(connectorId);

link.setName("Vampire");

link.setCreationUser("Buffy");

MLinkConfig linkConfig = link.getConnectorLinkConfig();

// fill in the linkconfig values

linkConfig.getStringInput("linkConfig.connectionString").setValue("jdbc:mysql://localhost/my");

linkConfig.getStringInput("linkConfig.jdbcDriver").setValue("com.mysql.jdbc.Driver");

linkConfig.getStringInput("linkConfig.username").setValue("root");

linkConfig.getStringInput("linkConfig.password").setValue("root");

// save the linkobject that was filled

Status status =client.saveLink(link);

if(status.canProceed()){

System.out.println("Created Link withLink Id : " + link.getPersistenceId());

} else {

System.out.println("Something went wrongcreating the link");

}

如果状态是OK或WARNING,status.canProceed()方法返回true.在发布状态之前,连接的配置会通过使用对应的验证器进行验证。

当savelink方法执行成功后,新的连接ID会分配到连接对象上,否则会抛出异常。

link.getPersistenceId()方法返回保存在sqoop仓库中的link对象的唯一标识。

用户可以通过以下方法来获取一个连接

Method

Description

getLink(lid)

Returns a link by id

getLinks()

Returns list of links in the sqoop

Job

一个sqoop任务包含From和To部分,将数据从From数据源传输到To数据源。From和To部分都由其对应的连接器Ids来唯一标识。如创建一个任务我们必须指定FromLinkId和ToLinkId.因此创建一个任务的先决条件就是我们上面描述的创建连接。

当From和To的连接Id给定后,连接对象相关的连接器的任务配置需要配置。可以通过连接器的DisplayConfig and Input Names For Connector来回去所有的任务配置和输入。一个连接器可以有一个或多个连接。我们使用MFromConfig和MToConfig对象分别对应于From和To连接。

除了配置From和To连接的任务配置外,我们还需要提供控制任务执行引擎环境的驱动配置。例如如果任务执行引擎是mapreduce,我们需要指定用来从From读取数据的Map的数量。

保存任务

下面是创建和保存一个任务的代码:

String url ="http://localhost:12000/sqoop/";

SqoopClient client= new SqoopClient(url);

//Creating dummyjob object

long fromLinkId =1;// for jdbc connector

long toLinkId = 2;// for HDFS connector

MJob job =client.createJob(fromLinkId, toLinkId);

job.setName("Vampire");

job.setCreationUser("Buffy");

// set the"FROM" link job config values

MFromConfig fromJobConfig = job.getFromJobConfig();

fromJobConfig.getStringInput("fromJobConfig.schemaName").setValue("sqoop");

fromJobConfig.getStringInput("fromJobConfig.tableName").setValue("sqoop");

fromJobConfig.getStringInput("fromJobConfig.partitionColumn").setValue("id");

// set the"TO" link job config values

MToConfig toJobConfig = job.getToJobConfig();

toJobConfig.getStringInput("toJobConfig.outputDirectory").setValue("/usr/tmp");

// set the driverconfig values

MDriverConfig driverConfig = job.getDriverConfig();

driverConfig.getStringInput("throttlingConfig.numExtractors").setValue("3");

Status status =client.saveJob(job);

if(status.canProceed()){

System.out.println("Created Job with JobId: "+ job.getPersistenceId());

} else {

System.out.println("Something went wrongcreating the job");

}

用户可以通过下面的方法来获取任务对象

Method

Description

getJob(jid)

Returns a job by id

getJobs()

Returns list of jobs in the sqoop

状态码列表

Function

Description

OK

没有问题,没有警告

WARNING

实体可以被正确的处理,没有致命错误

ERROR

验证实体有验证的问题,这些问题不解决无法继续处理

查看错误或警告验证信息

当出现任何的警告和错误状态时,用户需要获取验证信息列表

printMessage(link.getConnectorLinkConfig().getConfigs());

private static voidprintMessage(Listconfigs) {

for(MConfig config : configs) {

List> inputlist =config.getInputs();

if (config.getValidationMessages() != null){

// print every validation message

for(Message message :config.getValidationMessages()) {

System.out.println("Configvalidation message: " + message.getMessage());

}

}

for (MInput minput : inputlist) {

if (minput.getValidationStatus() ==Status.WARNING) {

for(Message message :config.getValidationMessages()) {

System.out.println("Config InputValidation Warning: " + message.getMessage());

}

}

else if (minput.getValidationStatus() ==Status.ERROR) {

for(Message message :config.getValidationMessages()) {

System.out.println("Config InputValidation Error: " + message.getMessage());

}

}

}

}

更新连接和任务

在仓库中创建连接和任务之后,我们可以使用下面的方法来更新或删除一个连接或任务。

Method

Description

updateLink(link)

通过传递link进行更新,会检查任何的错误和警告

deleteLink(lid)

删除连接,只有该连接当前没有被任何任务使用时才可以删除

updateJob(job)

新任务,会检查任何的错误和警告

deleteJob(jid)

删除任务

启动任务

启动任务需要指定任务Id,成功启动之后,getStatus()方法会返回“BOOTING” or“RUNNING”.

//Job start

long jobId = 1;

MSubmission submission = client.startJob(jobId);

System.out.println("JobSubmission Status : " + submission.getStatus());

if(submission.getStatus().isRunning()&& submission.getProgress() != -1) {

System.out.println("Progress : " +String.format("%.2f %%", submission.getProgress() * 100));

}

System.out.println("Hadoopjob id :" + submission.getExternalId());

System.out.println("Joblink : " + submission.getExternalLink());

Counters counters =submission.getCounters();

if(counters !=null) {

System.out.println("Counters:");

for(CounterGroup group : counters) {

System.out.print("\t");

System.out.println(group.getName());

for(Counter counter : group) {

System.out.print("\t\t");

System.out.print(counter.getName());

System.out.print(": ");

System.out.println(counter.getValue());

}

}

}

if(submission.getExceptionInfo()!= null) {

System.out.println("Exception info :" +submission.getExceptionInfo());

}

//Check job statusfor a running job

MSubmissionsubmission = client.getJobStatus(jobId);

if(submission.getStatus().isRunning()&& submission.getProgress() != -1) {

System.out.println("Progress : " +String.format("%.2f %%", submission.getProgress() * 100));

}

//Stop a runningjob

submission.stopJob(jobId);

上面的代码块中任务的启动时异步的。如果需要同步启动任务,需要调用startJob(jid,callback,pollTime)方法。如果对获取任务状态不感兴趣,可以指定callback参数为空,该方法将返回任务的最终状态。pollTime用来指定从sqoop服务器获取任务状态的时间间隔,指定的值必须大于0.如果该值较小的话,我们会频繁的连接sqoop服务器。如果同步任务中指定了非空的callback,会在成功启动时首先调用callback的submitted(MSubmission)方法,然后每隔pollTime时间调用callback的updated(MSubmission)方法,最后在任务完成时调用callback.finished(MSubmission)方法。

sqoop-1.4.7.bin__hadoop-2.6.0源码包是Apache Sqoop开源项目的一个版本,用于实现Hadoop和关系型数据库之间的数据传输。 Sqoop是一个用于将Hadoop生态系统中的数据与传统关系型数据库之间进行导入和导出的工具。它可以处理大规模的数据传输,帮助用户在Hadoop和关系型数据库之间建立数据桥梁。通过Sqoop,用户可以将数据从MySQL、Oracle、PostgreSQL等数据库中导入到Hadoop中进行分析和处理,也可以将结果从Hadoop导出到关系型数据库中进行后续处理。 该源码包中包含了Sqoop 1.4.7版本的二进制文件以及支持Hadoop 2.6.0的相关依赖文件。源码包可以用于构建和部署Sqoop应用程序,也可以用于进行二次开发和定制。 Sqoop-1.4.7版本在此源码包中提供了对Hadoop 2.6.0的支持,并且修复了一些之前版本中存在的问题和bug,提高了稳定性和性能。 使用Sqoop进行数据传输可以帮助用户实现数据的多样化处理,例如将用户在关系型数据库中的数据导入到Hadoop中进行大数据分析,或者将Hadoop中的计算结果导出到关系型数据库中进行进一步的报表生成。通过Sqoop,用户不需要编写复杂的数据转换和传输代码,简化了数据传输的过程,提高了工作效率。 通过深入研究Sqoop的源码,可以更好地理解Sqoop的工作原理和内部机制,并且可以基于源码进行二次开发和功能定制,以满足特定的业务需求。 总之,Sqoop-1.4.7.bin__hadoop-2.6.0源码包为用户提供了一个方便的方式来使用Sqoop,并且可以进行二次开发和定制,以满足各种数据传输需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值