【機器學習化DBMS】——ottertune服務端部署安裝

一、準備工作

     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', '[email protected]'),
)
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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章