两周工作分五个部分
一:申请微软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开源夏令营和商之狄老师的指导与支持!