亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 5618 | 回復(fù): 4
打印 上一主題 下一主題

[原創(chuàng)]發(fā)布一個(gè)分布式計(jì)算框架雛形 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-06-02 13:20 |只看該作者 |倒序?yàn)g覽
本帖最后由 redor 于 2011-06-04 11:47 編輯

目前這個(gè)任務(wù)調(diào)度只負(fù)責(zé)任務(wù)的數(shù)據(jù)ID或者數(shù)據(jù)ID打包,不負(fù)責(zé)存儲(chǔ)數(shù)據(jù)本身,需要單獨(dú)
的數(shù)據(jù)存儲(chǔ),任務(wù)計(jì)算節(jié)點(diǎn)需要自行設(shè)計(jì)數(shù)據(jù)存儲(chǔ)部分,這個(gè)程序包會(huì)提供一個(gè)獲取任務(wù)
和提交任務(wù)的客戶端接口libmtask,mtask.h;具體的實(shí)現(xiàn)參考btask.c 這個(gè)就是一個(gè)
benchmark。任務(wù)調(diào)度服務(wù)啟動(dòng)/usr/sbin/qtaskd -d -c /etc/qtaskd.ini
然后通過(guò)瀏覽器打開(kāi)http://serverIP:2080/ 頁(yè)面上可以添加任務(wù),這些任務(wù)有編號(hào),會(huì)顯示任務(wù)目前的完成情況。
btask使用方法就是對(duì)照自己配置好的任務(wù),任務(wù)計(jì)算節(jié)點(diǎn)可以有三種類(lèi)型:
1. 只提交任務(wù),比如數(shù)據(jù)源頭,這個(gè)節(jié)點(diǎn)不獲取任務(wù)(./btask -h IP -p 2066 -m 0 -q 1 -d);
2. 獲取任務(wù)計(jì)算完成以后提交一個(gè)完成通知,另外同時(shí)提交給下一個(gè)任務(wù)(./btask -h IP -p 2066 -m 1 -q 2 -d);
3. 結(jié)束計(jì)算節(jié)點(diǎn),只獲取任務(wù)完成之后提交完成通知,不需要把任務(wù)繼續(xù)提交給一個(gè)任務(wù)(./btask -h IP -p 2066 -m 2 -q 0 -d)。 



下載:
SRPM打包:http://libibase.googlecode.com/files/srpms-20110603183000.tar.gz
RPM打包: http://libibase.googlecode.com/files/rpms-20110603183000.tar.gz
源碼: http://libibase.googlecode.com/files/qmtask-0.0.5.tar.gz


客戶端API

  1. /* set message task */
  2. int mtask_set(MTASK *mtask, char *ip, int port, int mtaskid, int qtaskid);
  3. /* connect to qtask
  4. * -1 mtask is NULL
  5. * -2 socket() failed
  6. * -3 connect() failed
  7. * */
  8. int mtask_connect(MTASK *mtask);

  9. /* get new task count
  10. * -1 mtask is NULL
  11. * -2 mtask->fd <= 0 and mtask_connect failed
  12. * -3 write() task header failed
  13. * -4 write() task list[] failed
  14. * -5 read task header failed
  15. * -6 malloc failed
  16. * -7 read task list[] failed
  17. * ret >= 0 mhead.packetid
  18. * */
  19. int mtask_commit(MTASK *mtask, int flag, char *packet, int packet_len);

  20. /* push packet
  21. * return value
  22. * -1 mtask is NULL
  23. * -2 connection is bad
  24. * -3 Invalid packet data
  25. * -4 write() header failed
  26. * -5 write() packet failed
  27. * -6 recv() header failed
  28. * */
  29. int mtask_push(MTASK *mtask, int flag, char *packet, int packet_len);

  30. /* pop packet
  31. * return value
  32. * -1 mtask is NULL
  33. * -2 connection is bad
  34. * -3 Invalid commitid
  35. * -4 write() header failed
  36. * -5 recv() header failed
  37. * -6 malloc() for packet failed
  38. * -7 recv() packet failed
  39. */
  40. int mtask_pop(MTASK *mtask);

  41. /* over packet
  42. * return value
  43. * -1 mtask is NULL
  44. * -2 connection is bad
  45. * -3 Invalid packetid and commitid
  46. * -4 write() header failed
  47. * -5 recv() header failed
  48. * */
  49. int mtask_finish(MTASK *mtask, int flag);

  50. /* close message task */
  51. void mtask_close(MTASK *mtask);

復(fù)制代碼
寫(xiě)了一個(gè)調(diào)用的例子,不包括數(shù)據(jù)存取部分,演示了ID包的任務(wù)提交, 任務(wù)獲取, 任務(wù)完成, 還在弄具體的數(shù)據(jù)計(jì)算系統(tǒng),弄完給大家分享。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <errno.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <sys/types.h>
  10. #include "mtask.h"
  11. int main(int argc, char **argv)
  12. {
  13.     int i = 0, x = 0, mid = 0, qid = 0, port = 0, flag = 0,
  14.         isdaemon = 0, isout = 0, len = 0, packetid = 0;
  15.     char *ip = NULL, *packet = NULL, block[MTASK_PACKET_MAX * sizeof(int64_t)], ch = 0;
  16.     int64_t old = 0, *list = NULL;
  17.     MTASK mtask = {0};
  18.     pid_t pid = 0;

  19.     /* get configure file */
  20.     while((ch = getopt(argc, argv, "h:p:m:q:d")) != -1)
  21.     {
  22.         switch(ch)
  23.         {
  24.             case 'h':
  25.                 ip = optarg;
  26.                 break;
  27.             case 'p':
  28.                 port = atoi(optarg);
  29.                 break;
  30.             case 'm':
  31.                 mid = atoi(optarg);
  32.                 break;
  33.             case 'q':
  34.                 qid = atoi(optarg);
  35.                 break;
  36.             case 'o':
  37.                 isout = 1;
  38.                 break;
  39.             case 'd':
  40.                 isdaemon = 1;
  41.                 break;
  42.             default:
  43.                 break;
  44.             }
  45.     }
  46.     if(ip == NULL || port <= 0 || (qid == 0 && mid == 0))
  47.     {
  48.         fprintf(stderr, "Usage:%s -h host -p port -m commitid -q queueid -o output -d working as daemon\n", argv[0]);
  49.         _exit(-1);
  50.     }
  51.     /* daemon */
  52.     if(isdaemon)
  53.     {
  54.         pid = fork();
  55.         switch (pid) {
  56.             case -1:
  57.                 perror("fork()");
  58.                 exit(EXIT_FAILURE);
  59.                 break;
  60.             case 0: /* child process */
  61.                 if(setsid() == -1)
  62.                     exit(EXIT_FAILURE);
  63.                 break;
  64.             default:/* parent */
  65.                 _exit(EXIT_SUCCESS);
  66.                 break;
  67.         }
  68.     }
  69.     if(mtask_set(&mtask, ip, port, mid, qid) == 0
  70.             && mtask_connect(&mtask) == 0)
  71.     {
  72.         list = (int64_t *)block;
  73.         if(mid <= 0 && qid > 0)
  74.         {
  75.             do
  76.             {
  77.                 old = random();
  78.                 flag = 0;
  79.                 if((old%33) == 0) flag = MTASK_TO_QHEAD;
  80.                 x = 0;
  81.                 while(x < MTASK_PACKET_MAX)
  82.                 {
  83.                     list[x++] = (int64_t)random();
  84.                 }
  85.                 if((packetid = mtask_push(&mtask, flag, block,
  86.                                 sizeof(int64_t) * MTASK_PACKET_MAX)) >= 0)
  87.                 {
  88.                     if(isout)fprintf(stdout, "1:{%d:{packetid:%d}}\n", i, packetid);
  89.                     ++i;
  90.                 }
  91.                 else
  92.                 {
  93.                     sleep(1);
  94.                 }
  95.             }while(1);
  96.         }
  97.         else
  98.         {
  99.             /*
  100.             packetid = 0;
  101.             do
  102.             {
  103.                 old = random();
  104.                 flag = 0;
  105.                 if((old%33) == 0) flag = MTASK_TO_QHEAD;
  106.                 if((packetid = mtask_commit(&mtask, flag, NULL, 0)) > 0)
  107.                 {
  108.                     packet = mtask.packet;
  109.                     len = mtask.length;
  110.                     if(isout)fprintf(stdout, "2:{%d:{packetid:%d length:%d}}\n", i, packetid, len);
  111.                     ++i;
  112.                 }
  113.                 else
  114.                 {
  115.                     packet = NULL;
  116.                     len = 0;
  117.                     sleep(1);
  118.                 }
  119.             }while(1);
  120.             */
  121.             packetid = 0;
  122.             do
  123.             {
  124.                 old = random();
  125.                 flag = 0;
  126.                 if((old%33) == 0) flag = MTASK_TO_QHEAD;
  127.                 if((packetid = mtask_pop(&mtask)) > 0)
  128.                 {
  129.                     packet = mtask.packet;
  130.                     len = mtask.length;
  131.                     if(isout)fprintf(stdout, "2:{%d:{packetid:%d length:%d}}\n", i, packetid, len);
  132.                     ++i;
  133.                     mtask_finish(&mtask, flag);
  134.                 }
  135.                 else
  136.                 {
  137.                     packet = NULL;
  138.                     len = 0;
  139.                     sleep(1);
  140.                 }
  141.             }while(1);
  142.         }
  143.         mtask_close(&mtask);
  144.     }
  145.     return 0;
  146. }
復(fù)制代碼

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
2 [報(bào)告]
發(fā)表于 2011-06-02 14:12 |只看該作者
看不太明白{:3_184:}

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-06-02 14:49 |只看該作者
回復(fù) 2# hellioncu


    就是支持N個(gè)節(jié)點(diǎn)同時(shí)計(jì)算的一個(gè)任務(wù)調(diào)度服務(wù),看截圖。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-06-03 12:53 |只看該作者
如何編寫(xiě)任務(wù)  發(fā)布任務(wù)呢

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-06-04 11:35 |只看該作者
回復(fù) 4# newmax123


    任務(wù)部分屬于業(yè)務(wù)層的東西, 調(diào)度中心只負(fù)責(zé)存儲(chǔ)數(shù)據(jù)的ID,具體的數(shù)據(jù)存儲(chǔ)需要使用獨(dú)立的存儲(chǔ)服務(wù),我正在弄一個(gè)基于mongodb的計(jì)算系統(tǒng),弄完放出來(lái)給大家看。
任務(wù)的獲取和任務(wù)的finish可以直接調(diào)用libmtask mtask.h里的函數(shù) btask.c里有例子。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP