从GoogleClusterData统计每个用户的使用率、平均每次出价

之前将google cluster data导入了Azure上的MySQL数据库,下一步就是对这些数据进行分析,

挖掘用户的使用规律了。

首先,为了加快执行速度,对user,time等加入索引。

然后就可以使用以下代码进行统计了。

import os
import MySQLdb
import time
import thread

def use4ADay(day, users):
    conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="googleclusterdata",charset="utf8")
    cursor = conn.cursor()

    msAday = 24*60*60*1000000

    for user in users:
        user = user[0]
        print user
        use4ADay.user = user

        print ‘day %s‘ %day
        startTime = (day - 1) * msAday
        endTime = day * msAday
        dayCPUUse = 0
        dayMEMUse = 0
        dayDiskUse = 0
        order = "select job_id from job_events where time >= %s and time < %s and user = ‘%s‘" %(startTime, endTime, user)
        print order
        cursor.execute(order)
        job_ids = cursor.fetchall()
        for job_id in job_ids:
            job_id = job_id[0]
            print ‘day %s‘ %day
            order = "select task_index, event_type, cpu_request, memory_request, disk_space_request, time from task_events     where time >= %s and time < %s and job_id = %d order by task_index"                    %(startTime, endTime, job_id)
            print order
            cursor.execute(order)
            tasks = cursor.fetchall()
            print ‘tasks get‘
            i = 0
            while i < len(tasks) - 1:
                task = tasks[i]
                if task[1] == 1:
                    task_index = task[0]
                    nextEvent = tasks[i+1]
                    if (nextEvent[1] == 4 or nextEvent[1] == 5) and nextEvent[0] == task_index:
                        taskLife = (nextEvent[5] - tasks[i][5]) / (10.0**6)
                        dayCPUUse += taskLife * task[2]
                        dayMEMUse += taskLife * task[3]
                        dayDiskUse += taskLife * task[4]
                        #print ‘task: ‘, task_index, dayCPUUse, dayMEMUse, dayDiskUse
                i = i+1
            #print ‘job: ‘, job_id, dayCPUUse, dayMEMUse, dayDiskUse
        fOut = open(‘C:\\userUsageEachDay\\day%d.txt‘ %day, ‘a‘)
        fOut.write(‘%s\t%f\t%f\t%f\n‘ %(user,  dayCPUUse, dayMEMUse, dayDiskUse))
        fOut.close()
    print ‘day %d finish‘ %day
    conn.close()

conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="googleclusterdata",charset="utf8")
cursor = conn.cursor()
#get all user_name
order = "select distinct user from job_events"
print order
cursor.execute(order)
users = cursor.fetchall()
conn.close()

for day in range(1, 30):
    try:
        use4ADay(day, users)
    except:
        print ‘day‘, day, ‘failed!!‘
        fOut = open(‘C:\\failed.txt‘, ‘a‘)
        fOut.write(‘%s\t%d\t\n‘ %(use4ADay.user, day))
        fOut.close()
    #print ‘starting thread for day %d‘ %day
    #thread.start_new_thread(use4ADay, (day, users, ) )#use4ADay(2, users)

下一步,是统计每个用户整个月的消费频率,以及每次消费的平均消费量

fDay1 = open(‘C:\\Usage\\day1.txt‘)
users = []
for l in fDay1.readlines():
    l = l.split(‘\t‘)
    user = l[0]
    users.append(user)
fDay1.close()

#fOut = open(‘C:\\UseTraceOfAllUsers.txt‘, ‘w‘)
for user in users:
    useDays = 0
    allPrice = 0
    for day in range(1,30):
        f = open(‘C:\\Usage\\day%d.txt‘ %day)
        isFind = False
        for l in f.readlines():
            if l.count(user) > 0:
                l = l.strip()
                l = l.split(‘\t‘)
                cpu = float(l[1])
                mem = float(l[2])
                disk = float(l[3])
                money = 1.92*cpu + 15.6*mem + 1.2*disk
                assert(money>=0)
                isFind = True
                break
        if isFind and money != 0:
            useDays += 1
            allPrice += money
        f.close()
    if useDays != 0:
        pass
        #fOut.write(‘%s\t%s\n‘ %(str(useDays/29.0), str(allPrice/useDays)))
fOut.close()

最后就可以使用matlab进行画图啦。

x = load(‘C:\UseTraceOfAllUsers.txt‘)
plot(x(:,1), x(:,2), ‘o‘);

结果如下:

对平均使用量取个对数的话

x = load(‘C:\UseTraceOfAllUsers.txt‘)
plot(x(:,1), log(x(:,2)), ‘o‘);

时间: 2024-08-24 12:22:52

从GoogleClusterData统计每个用户的使用率、平均每次出价的相关文章

使用 Redis 统计在线用户人数

在构建应用的时候, 我们经常需要对用户的一举一动进行记录, 而其中一个比较重要的操作, 就是对在线的用户进行记录. 本文将介绍四种使用 Redis 对在线用户进行记录的方案, 这些方案虽然都可以对在线用户的数量进行统计, 但每个方案都有一些自己特有的操作, 并且各个方案的性能特征以及资源消耗也各有不同. 方案 1 :使用有序集合 每当一个用户上线时, 我们就执行 ZADD 命令, 将这个用户以及它的在线时间添加到指定的有序集合中: ZADD "online_users" <use

【C语言】在全系1000个学生中,征集慈善捐款当总数达到10万的时候,停止捐款,统计人数,并输出平均捐款数

//在全系1000个学生中,征集慈善捐款当总数达到10万的时候,停止捐款,统计人数,并输出平均捐款数 #include <stdio.h> int main() { float sum=0; float amount; int count=0; int i; for(i=0;i<1000;i++) { printf("请输入捐款金额:"); scanf("%f",&amount); sum=sum+amount; count++; if(s

PHP统计在线用户数量

一段经典的php统计在线用户数量的代码,一起学习分享. <?php /**  * Created by PhpStorm.  * User: jifei  * Date: 15/11/24  * Time: 20:58  *  * 每分钟百万用户,实时统计最近15分钟在线用户总数  */ class OnlineUser { public $prefix_key = "online";//key前缀 public function __construct() { $this-&g

oracle统计某个用户的对象个数

--统计某个用户下面的对象个数 --包括表,视图,同义词,函数,存储过程,包,触发器,索引,约束,序列. SELECT (SELECT COUNT(*) FROM USER_TABLES) AS TABLES, (SELECT COUNT(*) FROM USER_VIEWS)AS VIEWS, (SELECT COUNT(*) FROM USER_SYNONYMS)AS SYNONYMS, (SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_TYPE

用HttpSessionListener统计在线用户或做账号在线人数管理

使用HttpSessionListener接口可监听session的创建和失效 session是在用户第一次访问页面时创建 在session超时或调用request.getSession().invalidate()时失效 因此利用HttpSessionListener接口可方便的做到几个功能 1.统计在线用户 2.限定账号的同时登录个数 3.记录用户退出时间 以下是目前项目的代码,实现的是限定账号的同时登录个数 public class MySessionListener implements

用Redis bitmap统计活跃用户、留存

用Redis bitmap统计活跃用户.留存 Spool的开发者博客,描述了Spool利用Redis的bitmaps相关的操作,进行网站活跃用户统计工作. 原文:http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/ Redis支持对String类型的value进行基于二进制位的置位操作.通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value

一个统计 CPU 内存 硬盘 使用率的shell脚本

一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 #!/bin/bash #This script is use for describle CPU Hard Memery Utilization total=0 idle=0 system=0 user=0 nice=0 mem=0 vmexec=/usr/bin/vmstat which sar > /dev/null 2>&1 if [ $? -ne 0 ] then ver=`vmstat -V | awk

redis 用setbit(bitmap)统计活跃用户

getspool.com的重要统计数据是实时计算的.Redis的bitmap让我们可以实时的进行类似的统计,并且极其节省空间.在模拟1亿2千8百万用户的模拟环境下,在一台MacBookPro上,典型的统计如“日用户数”(dailyunique users) 的时间消耗小于50ms, 占用16MB内存.Spool现在还没有1亿2千8百万用户,但是我们的方案可以应对这样的规模.我们想分享这是如何做到的,也许能帮到其它创业公司. Bitmap以及Redis Bitmaps快速入门(Crash Cour

监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息

一.案例一:自定义Session扫描器1.案例说明当一个Web应用创建的Session很多时,为了避免Session占用太多的内存,我们可以选择手动将这些内存中的session销毁,那么此时也可以借助监听器技术来实现.对于拿到 每个session 对象, 判断session的最后一次访问时间 与当前时间 的间隔是否超过 5 分钟, 如果超过就手动销毁 2.实现代码SessionScanner:session对象的监听器 MyTimerTask:定时器timer的任务对象 SessionScann