首页 > 代码库 > (TopkOnJstorm)第三、四周工作报告:2014-07-21~2014-08-03

(TopkOnJstorm)第三、四周工作报告:2014-07-21~2014-08-03

两周工作分五个部分

一:申请微软Azure资源

    通过和导师数次邮件沟通,申请下了世纪互联运营的 Windows Azure beta 试用。

    账号为cloud0920@ucasevan.partner.onmschina.cn

二:研究Azure虚拟机和存储服务的使用

    虚拟机的使用在下一周周报中描述。

    存储服务的使用:

    如第一周的周报所述,Azure提供三种存储服务Bolb、Queue、Table。我申请了一个服务cloud0920

    其中:TableEndpoint = "http://cloud0920.table.core.chinacloudapi.cn/";

              QueueEndpoint = "http://cloud0920.queue.core.chinacloudapi.cn/";

              BlobEndpoint = "https://cloud0920.blob.core.chinacloudapi.cn/";


三:设计用户的输入输出

    用户的输入输出设计原则之一为互联网任意地点的主机均可用。这是我使用Azure Queue来获取用户的输入,使用Azure Table来存放topk的输出。项目已经上传,名字为jstopk-client-restapi,地址为https://code.csdn.net/sinat_16596967/jstopk/tree/master。

    项目分为两部分:

    1、使用Queue来获取用户输入。主类MainPushServer启动5个PushClient向名字为jstopkqueue的队列push数据,数据为(UserName,Score);DataPusher则为真正push数据的类。

    2、使用Table来存放算法输出(即topk结果)。主类MainPullServer启动5个PullClient从名字为jstopkresult的表中pull partitionKey为top50,rowKey为result的值,数据为一个String,由\n分割解析;DataPuller为真正pull数据的类,结果。

    3、Utility为存放storageConnectionString,queueName,tableName等配置常量的地方。其中storageConnectionString是Azure 连接字符串,是一个非常重要的连接参数,有三种连接方式:

    a) 在本地测试服务或应用程序时连接到 Azure 存储仿真程序。

    b) 使用存储服务的默认终结点连接到 Azure 中的存储帐户。

    c) 使用存储服务的显式终结点连接到 Azure 中的存储帐户。

    我使用第三种方式,因为默认的是连接到*.windows.net,我申请的是*.chinacloudapi.cn。模式如下

BlobEndpoint=myBlobEndpoint;QueueEndpoint=myQueueEndpoint;TableEndpoint=myTableEndpoint;AccountName=myAccountName;AccountKey=myAccountKey

    4、test包为测试类,测试push的数据是否正确以及pull是否正常。

四:Queue 使用

    Queue比较简单,只需要确定连接字符串和队列名就可以定位队列。如图所示:


    start()函数: 
    // Setup the cloud storage account.
    account = CloudStorageAccount.parse(Utility.storageConnectionString);
    // Create a table service client
    tableClient = account.createCloudTableClient();
    // Retrieve a reference to a table
    table = new CloudTable(Utility.tableName, tableClient);
    table.createIfNotExists();

    push()函数:

    CloudQueueMessage message = new CloudQueueMessage(UserName + "\n" + score);

    queue.addMessage(message);

    get()函数:

    CloudQueueMessage message = queue.retrieveMessage();

    经过测试,能够正常使用,并符合项目需求。

五:Table 使用

    Table的使用会稍微复杂一些,首先需要使用json-core的包,并创建数据类ResultEntity extends TableServiceEntity,这样的数据才能够插入到表中。而且对于Entity的操作首先需要通过连接字符串和表名定位表,再通过partitionKey和rowKey定位单元格。如图所示:


    start()函数:

    // Setup the cloud storage account.
    account = CloudStorageAccount.parse(Utility.storageConnectionString)
    // Create a table service client
    tableClient = account.createCloudTableClient();
    // Retrieve a reference to a table
    table = new CloudTable(Utility.tableName, tableClient);
    table.createIfNotExists();

    pull()函数:

    TableOperation retrieveTop50 = TableOperation.retrieve("top50","result", ResultEntity.class);
     ResultEntity result = table.execute(retrieveTop50).getResultAsType();

    set()函数:

    ResultEntity re = new ResultEntity("top50", "result");
    re.setResult("a\n200\nb\n199");
     TableOperation insert = TableOperation.insertOrReplace(re);
     table.execute(insert);

    经过测试,能够正常使用,并符合项目需求。

下周计划

     1. 完成Azure虚拟机的构建以及Jstorm的搭建。

     2. 完成项目jstorm-topk的改造(对Rest API进行支持)。

     3. 将jstorm-topk与jstopk-client-restapi结合提供完整的topk服务。

感谢CSDN开源夏令营和商之狄老师的指导与支持!