关于odps的sdk怎么实现

来源:互联网 发布:短租房网站源码php 编辑:程序博客网 时间:2024/05/01 23:48

因为odps的sdk只有jdk, 也就是你必须要懂java才能在应用里使用odps,

要是用这样一个架构, 必需要有 apache-tomcat的支持, 下载地址 。

然后就是熟悉一下这个apache-tomcat的文件结构

文件目录

我在这里不多说废话了, 因为说多了会有失误, 开启apache-tomcat服务十分简单, *inx用户可以执行bin里面的 startup.sh, windows用户可以执行bin里面的 startup.bat, 我们的java项目要放在webapps目这个录里面, 放的时候以目录的形式存储, 目录名就是我们的项目名。

我们的目录我们的目录

docs, examples, host-manager, manager, ROOT 这些都是系统默认生成的目录, 我们新建的目录是 myodps, 

这些初始的目录分别对应 localhost:8080/examples --- examples  ,   localhost:8080 ----- ROOT , 所以我们建的目录对应的url是 localhost:8080/myodps

TOMCAT经过分析url后会按优先级render myodps目录里面的index.html, index.htm, index.jsp。所有前台用到的资源都放到这个目录上, 然后java后台程序放到WEB-INF里面的class目录里面(没有的话就自己创建一个)至此我们的配置告一段落了, 接下来就是写java程序来获取odps的数据。odps在用户手册上提供了怎么设置参数来达到预期的结果。 但是设置参数那一块和sql请求的那一块分别写在了不同的文档里面,略坑。

然后修改 WEB-INF里面的web.xml文件, servlet-name 可以随便填, 但是这个servlet是起着链接后台的class函数和前台的url的作用, 所以上下两个对应的servlet-name一定要一致!


因为不知道到底要引用哪个文件, 所以我把从官网下下来的所有 .jar文件都解压到classes目录里面, 引用了所有的包

import com.aliyun.odps.*;

import com.aliyun.odps.account.*;

import com.aliyun.odps.commons.transport.*;

import com.aliyun.odps.commons.util.*;

import com.aliyun.odps.counter.*;

import com.aliyun.odps.data.*;

import com.aliyun.odps.io.*;

import com.aliyun.odps.rest.*;

import com.aliyun.odps.security.*;

import com.aliyun.odps.task.*;

import com.aliyun.odps.task.copy.*;

import com.aliyun.odps.tunnel.*;

import com.aliyun.odps.tunnel.io.*;

import com.aliyun.odps.udf.*;

import com.aliyun.odps.udf.annotation.*;

import com.aliyun.odps.udf.impl.*;

import com.aliyun.odps.udf.utils.*;

import com.aliyun.odps.utils.*;

import com.aliyun.odps.volume.*;

import java.util.*;

import java.util.Map.Entry;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Myodps {

    private Account account;

    private Odps odps;

    private ObjectOutputStream oos;

    private FileOutputStream fos;

    private FileWriter writer;

    private FileReader reader;

    

    public Myodps () {

        account = new AliyunAccount("YourID","YourKeys");

        odps = new Odps(account);

        String odpsUrl = "http://service.odps.aliyun.com/api";

        odps.setEndpoint(odpsUrl);

        odps.setDefaultProject("bigdata_final");

    }

    

    public String sendsql(String sql) {

        String result = "";

        try {

            Instance instance = SQLTask.run(odps, sql);

            String id = instance.getId();

            instance.waitForSuccess();

            Set<String> taskNames = instance.getTaskNames();

            for (String name : taskNames) {

                Map<String, String> results = instance.getTaskResults();

                result = results.get(name);

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

        return result;

    }

}


之后就是调用 sendsql进行和odps的交流, 以此成功告一段落。

0 0