【机器学习化DBMS】——ottertune服务端部署安装

13 篇文章 7 订阅
7 篇文章 1 订阅

一、准备工作

     1、操作系统:Ubuntu Linux 16.04+ (64-bit)

     2、配置好网络,以下安装均需联网安装

     3、python 3.5 +

二、安装步骤

      otertune由两个组件组成:客户端和服务器端。Ottertune的服务器从客户机接收调优任务,并使用ML模型向客户机推荐新的配置。otertune的客户端组件是从目标DBMS收集信息,向服务器发送调优任务,从服务器接收推荐的配置,并将配置安装到目标DBMS中。下面我们开始配置:

      1、安装 ant, git and pip

        注:Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。

sudo apt-get update
sudo apt-get install ant git python3-pip python3-dev python3-tk libssl-dev
sudo pip3 install --upgrade setuptools

       2、github上下载ottertune

git clone https://github.com/cmu-db/ottertune.git

       3、github上下载OltpBench Repo(数据库测试框架)

git clone https://github.com/oltpbenchmark/oltpbench.git

       4、安装fabric(Fabric 是一个 Python的库和命令行工具,用来提高基于 SSH 的应用部署和系统管理效率。https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html

sudo pip3 install fabric3

     安装过程中报错:

          
      解决办法:

将 /usr/bin/pip3 文件中:

from pip import  main
if __name__ == '__main__':
    sys.exit(main())

改为:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

        5、安装java 8

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

      6、安装gradleGradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。用于自动获取代码所需jar包的工具)

sudo apt install gradle

       7、安装测试数据库DBMS

          (Postgres 9.3.Update Apt Repo: https://www.postgresql.org/download/linux/ubuntu/

            安装使用说明参见博文:https://blog.csdn.net/qq_19330913/article/details/80468494

sudo apt-get install postgresql

      8、安装服务端

sudo apt-get update
sudo apt-get install git python3-pip python3-dev python-mysqldb python3-tk rabbitmq-server libmysqlclient-dev libssl-dev mysql-server
sudo pip3 install --upgrade setuptools
sudo pip3 install -r ottertune/server/website/requirements.txt

     注:执行sudo pip3 install -r ottertune/server/website/requirements.txt命令如果时间超时不成功的话打开requirements.txt文件,一条一条手动去,执行命令:执行sudo pip3 install xxx。requirements.txt内容如下(里边全是运行程序所需要的python包):

autopep8==1.3.4
celery==3.1.23
Django==1.10.1
django-celery==3.2.1
django-debug-toolbar==1.5
django-request-logging==0.4.6
mock==2.0.0
Fabric3==1.13.1.post1
hurry.filesize==0.9
matplotlib==2.0.0
numpy==1.13.1
requests==2.18.4
pycodestyle==2.3.1
astroid==1.5.1
pylint==1.5.2
pyDOE==0.3.8
mysqlclient==1.3.12
scikit-learn==0.19.1
scipy==1.0.0
tensorflow==1.6.0
threadpool==1.3.2

三、测试(系统自带样例)

     1、本节介绍如何创建并用假数据初始化测试网站。

       1.1、加载数据并初始化网站

            进入到ottertune/server/website文件夹下,执行fab create_test_website,(警告:这将删除网站数据库中的所有内容,并使用假数据重新加载,以便进行测试/开发。)同时这也将创建一个具有两个会话的测试用户。其中一个会话已经加载了数据。

cd ottertune/server/website
fab create_test_website

          报错:ImportError: No module named django.core.management

root@instance-ehcsziev:/home/tangqing/ottertune/server/website# fab create_test_website
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
Traceback (most recent call last):
  File "manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

Fatal error: local() encountered an error (return code 1) while executing 'python manage.py migrate website'

Aborting.
root@instance-ehcsziev:/home/tangqing/ottertune/server/website# 

      原因:ubuntu16.04系统安装了python2.7和python3.5,默认使用的是python 2.7。导致从2.7找不到包。

     解决办法:使用以下命令来修改默认python版本:

sudo cp /usr/bin/python /usr/bin/python_bak    #备份

sudo rm /usr/bin/python #删除

sudo ln -s /usr/bin/python3.5 /usr/bin/python   #默认设置为python3.5

     这样在终端中运行Python时,默认启动的就是3.5版本了。修改完python默认版本后重新执行fab create_test_website,结果如下图:

       

     1.2、 启动服务端

fab start_debug_server    //开启服务端

     1.3、用浏览器访问,如果你安装的是带桌面版本的ubuntu虚拟机,可以直接设置成127.0.0.1:8000。我本人是买的百度云服务器,得设置成百度云服务器的内网地址,经过百度云公网和内网绑定后通过公网在浏览器访问才可以。主界面登录进去如下图所示:

         

  • username: user
  • password: abcd123

     1.4、用第三步的用户名和密码登录,登陆后如下图:

      

      1.5、点开test project

         

注:1、basic session:用于上传和可视化不同旋钮配置的DBMS内部运行时度量值。探索用户的basic_session会话,以查看Ottertune提供的图表、表格和其他可视化,用于比较不同工作负载和/或旋钮配置的性能。

        2、tuning session:其中otertune建议新的DBMS旋钮配置,以优化用户指定的目标(请注意,在此会话中,它被设置为吞吐量)。Ottertune根据迄今为止收集到的有关用户工作负载的知识以及从以前为其他工作负载调优DBMS获得的知识来选择下一个DBMS旋钮配置。

      2、数据生成器

           本小节讨论如何使用  controller_simulator 目录中的脚本生成假旋钮/度量数据,然后将其加载到用户会话中。下面发布的所有命令都在网站的根目录中执行。

        2.1  如何生成数据

       例如,要为2个工作负载创建数据(每个工作负载有5个示例),请运行:

python script/controller_simulator/data_generator.py 2 5

      生成的数据存在:script/controller_simulator/generated_data 文件夹下,如下图所示,2个workload,每个workload生成了5份数据.json文件。

         

       2.2、上传数据

            上传数据需要两个参数:1)数据存储路径;2)上传数据的python代码。下边的例子是上传到test用户的basic_session会话中。上传完成后你能看到basic_session会话中工作负载“Workload-0”和“Workload-1”的旋钮/度量样本数量从20个增加到了25个。(注:执行下边语句时确保服务端已经开启并在后台运行,否则会报错。服务端后台运行的命令如下:nohup fab start_debug_server &

python script/controller_simulator/upload_data.py script/controller_simulator/generated_data 1234567890

        

    3、(运行Tuner)Running the Tuner 

         3.1、 自动调谐器组件介绍以及运行流程

        自动调谐器组件是Ottertune的ML管道的唯一一部分,它在优化会话期间被主动执行。新的优化会话按如下方式进行:下图是 OtterTune 组件和工作流程

      1)调优过程开始,用户告知 OtterTune 要调优的最终目标(比如,延迟或吞吐量),初始设置默认是吞吐量。

      2)然后,控制器启动首次观察期,来观察并记录最终目标。观察结束后,控制器收集 DBMS 的内部指标,比如 MySQL 磁盘页读取和写入的计数。控制器将这些数据返回给调优管理器程序。

      3)OtterTune 的调优管理器将接收到的指标数据保存到知识库。OtterTune 用这些结果计算出目标 DBMS 的下一个配置,连同预估的性能提升,返回给控制器。用户可以决定是否继续或终止调优过程。

     3.2 、运行

      自动调谐器组件中的任务作为异步Celery tasks实现。也就是说,每当用户从上一个观察期上传新的knob/metric数据时,计划在后台执行一个新的Celery tasks。然后,用户必须轮询显示新数据结果信息的网页,以检查Celery tasks的状态。任务完成后,下一个DBMS旋钮配置将为用户准备就绪,网页上将显示下载下一个配置的链接。

     创建一个knob/metric示例,并将其上载到测试用户的调整会话存储库:

python script/controller_simulator/data_generator.py 1 1
python script/controller_simulator/upload_data.py script/controller_simulator/generated_data 0987654321

      

     按照链接进入用户的调优会话。然后单击筛选结果表中提供的最新结果的结果ID(链接)(这可能是结果ID最高的结果)。Celery tasks的总体状态作为状态列在结果信息表中。在状态行中提供的链接之后,显示已执行的每个Celery tasks的调试输出。

    3.3、查验结果

    1)网页版进入tuning sension

         

四、测试(真实数据库调优)

     在Linux安装步完ottertune之后,可以在ottertune中启动客户端和服务器端。在客户端,您需要更改配置文件以及fab run_loops,这一部分参考客户端安装https://blog.csdn.net/weixin_40449300/article/details/88302266。在服务器端,可以按照下面的说明和进行操作。

    1、在OtterTune服务端创建一个数据库来存储所有网站数据。

          命令:mysqladmin create -u <username> -p ottertune

mysqladmin create -u root -p ottertune

    在MySQL中创建了一个名为ottertune的数据库。 创建数据库后,需要更新Django设置中的数据库信息,包括数据库名称,用户名和密码。

                                        

    2、更新Django设置,复制设置目录中的凭据模板:

cp website/settings/credentials_TEMPLATE.py website/settings/credentials.py

    3、修改credentials.py

#
# OtterTune - credentials_TEMPLATE.py
#
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
#
"""
Private/custom Django settings for the OtterTune project.

"""
# pylint: disable=invalid-name

# ==============================================
# SECRET KEY CONFIGURATION
# ==============================================

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'ADD ME!!'

# ==============================================
# DATABASE CONFIGURATION
# ==============================================

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ottertune',
        'USER': 'ADD ME!!',
        'PASSWORD': 'ADD ME!!',
        'HOST': '',
        'PORT': '',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES',innodb_strict_mode=1",
        },
    }
}

# ==============================================
# DEBUG CONFIGURATION
# ==============================================

# Can override the DEBUG setting here
DEBUG = False

# ==============================================
# MANAGER CONFIGURATION
# ==============================================

# Admin and managers for this project. These people receive private
# site alerts.
ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS

# ==============================================
# GENERAL CONFIGURATION
# ==============================================

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []

        如果您不使用该网站进行生产,只需在credentials.py中设置DEBUG = True即可。 然后Django将自动处理静态文件。

       4、启动网站服务器

           首先,您需要将Django模型迁移到数据库中。

python3 manage.py makemigrations website
python3 manage.py migrate

         

         

      5、加载数据库以后就可以开启服务了

python3 manage.py runserver 0.0.0.0:8000

      注意1:如果没设置DEBUG = True的话,运行上面的命令报错,提示你必须设置settings.ALLOWED_HOSTS。报错内容如下:CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

     注意2:0.0.0.0:8000这个地址根据你自己的电脑网络配置设置,如果你安装的是带桌面版本的ubuntu虚拟机,可以直接设置成127.0.0.1:8000。我本人是买的百度云服务器,得设置成百度云服务器的内网地址,经过百度云公网和内网绑定后通过公网在浏览器访问才可以。

       图一:浏览器访问http://127.0.0.1:8000/login/?next=/

      

     图二:服务器运行界面图 

      

 

五、参考资料

     1、安装参考:https://github.com/cmu-db/ottertune/wiki/Linux-Quick-Setup 

     2、关于OtterTune,请参阅相关或的

              代码:https://github.com/cmu-db/ottertune

              论文:http://db.cs.cmu.edu/papers/2017/tuning-sigmod2017.pdf

              官网:http://ottertune.cs.cmu.edu/

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值