{ "cells": [ { "cell_type": "markdown", "id": "28bea13b-67bd-4a0e-8eab-3b8ffd37259e", "metadata": {}, "source": [ "# BasicTick: Create Cluster: HDB for basictickdb\n", "This notebook will create (start) an HDB cluster on a named basictick database." ] }, { "cell_type": "code", "execution_count": null, "id": "83c6572a-0972-4867-8c02-ea2c6c98427a", "metadata": { "jupyter": { "source_hidden": true }, "tags": [] }, "outputs": [], "source": [ "%%html\n", "" ] }, { "cell_type": "markdown", "id": "f17a02c0-4f56-455c-a28a-dd102a88201c", "metadata": { "tags": [] }, "source": [ "## Setup\n", "\n", "### Node Types\n", "|Type|Mem (GB)|vCPUs|\n", "|:---|---:|---:|\n", "|kx.s.large|12|2|\n", "|kx.s.xlarge|27|4|\n", "|kx.s.2xlarge|54|8|\n", "|kx.s.4xlarge|108|16|\n", "|kx.s.8xlarge|216|32|\n", "|kx.s.16xlarge|432|64|\n", "|kx.s.32xlarge|864|128|\n" ] }, { "cell_type": "code", "execution_count": null, "id": "0d5f1d4a-ed45-44e3-bf75-9bdb75fcddbb", "metadata": {}, "outputs": [], "source": [ "import os\n", "import boto3\n", "import json\n", "import datetime\n", "\n", "from managed_kx import *\n", "from env_kdb_1 import *\n", "\n", "# Cluster names and database\n", "from basictick_setup import *\n", "\n", "SEC_THREADS='4'\n", "\n", "BASE_NAME=\"HDB\"\n", "\n", "# Cluster Settings\n", "CODEBASE=\"basictick\"\n", "S3_CODE_PATH=\"code\"\n", "\n", "DB_PATHS = [ '/' ]\n", "\n", "CAPACITY_CONFIG={ 'nodeCount': 2, 'nodeType': 'kx.s.xlarge'}\n", "DATABASE_CONFIG=[{ 'databaseName': DB_NAME,'cacheConfigurations': [{'dbPaths': DB_PATHS, 'cacheType': 'CACHE_1000' }] }]\n", "CACHE_CONFIG=[{'type': 'CACHE_1000', 'size':1200}]\n", "\n", "CODE_CONFIG={ 's3Bucket': S3_BUCKET, 's3Key': f'{S3_CODE_PATH}/{CODEBASE}.zip' }\n", "INIT_SCRIPT=f'{CODEBASE}/hdbmkdb.q'\n", "\n", "CMD_ARGS=[\n", " { 'key': 's', 'value': SEC_THREADS }, \n", " { 'key': 'dbname', 'value': DB_NAME}, \n", " { 'key': 'codebase', 'value': CODEBASE} \n", "]" ] }, { "cell_type": "code", "execution_count": null, "id": "3cfe7d89-9f5d-4ceb-ac8c-1f5054a6f15a", "metadata": {}, "outputs": [], "source": [ "# triggers credential get\n", "session=None\n", "\n", "try:\n", " # aws: use ada for credentials\n", " subprocess.call([\"which\", \"ada\"])\n", " os.system(f\"ada credentials update --account={ACCOUNT_ID} --provider=isengard --role=Admin --once\")\n", "except: \n", " None\n", "\n", "if AWS_ACCESS_KEY_ID is None:\n", " print(\"Using Defaults ...\")\n", " # create AWS session: using access variables\n", " session = boto3.Session()\n", "else:\n", " print(\"Using variables ...\")\n", " session = boto3.Session(\n", " aws_access_key_id=AWS_ACCESS_KEY_ID,\n", " aws_secret_access_key=AWS_SECRET_ACCESS_KEY,\n", " aws_session_token=AWS_SESSION_TOKEN\n", " )\n", "\n", "# create finspace client\n", "client = session.client(service_name='finspace', endpoint_url=ENDPOINT_URL)" ] }, { "cell_type": "markdown", "id": "1cd63f1e-0f36-410d-ab75-95fc2031d221", "metadata": {}, "source": [ "## Check Database" ] }, { "cell_type": "code", "execution_count": null, "id": "f9266a73-d208-4c6a-a50e-9c5b77e99704", "metadata": {}, "outputs": [], "source": [ "note_str = \"\"\n", "\n", "try:\n", " c_set_list = client.list_kx_changesets(environmentId=ENV_ID, databaseName=DB_NAME)['kxChangesets']\n", "except:\n", " note_str = \"<>\"\n", "\n", "print(100*\"=\")\n", "print(f\"Database: {DB_NAME}, Changesets: {len(c_set_list)} {note_str}\")\n", "print(100*\"=\")\n", "\n", "# sort by create time\n", "c_set_list = sorted(c_set_list, key=lambda d: d['createdTimestamp']) \n", "\n", "for c in c_set_list:\n", " c_set_id = c['changesetId']\n", " print(f\"Changeset ({c['status']}): {c_set_id}: Created: {c['createdTimestamp']}\")\n", " c_rqs = client.get_kx_changeset(environmentId=ENV_ID, databaseName=DB_NAME, changesetId=c_set_id)['changeRequests']\n", "\n", " chs_pdf = pd.DataFrame.from_dict(c_rqs).style.hide(axis='index')\n", " display(chs_pdf)" ] }, { "cell_type": "markdown", "id": "b53b79fd-bbdc-45db-89a0-5c999951d47f", "metadata": {}, "source": [ "# Deploy code" ] }, { "cell_type": "code", "execution_count": null, "id": "dde345ef-524e-4f47-8ed4-f6e85f94e42c", "metadata": {}, "outputs": [], "source": [ "if AWS_ACCESS_KEY_ID is not None:\n", " cp = f\"\"\"\n", "export AWS_ACCESS_KEY_ID={AWS_ACCESS_KEY_ID}\n", "export AWS_SECRET_ACCESS_KEY={AWS_SECRET_ACCESS_KEY}\n", "export AWS_SESSION_TOKEN={AWS_SESSION_TOKEN}\n", "\n", "zip -r -X {CODEBASE}.zip {CODEBASE} -x '*.ipynb_checkpoints*' \n", "aws s3 cp {CODEBASE}.zip s3://{S3_BUCKET}/{S3_CODE_PATH}/{CODEBASE}.zip\n", "aws s3 ls {S3_BUCKET}/{S3_CODE_PATH}/\n", "\"\"\"\n", "else:\n", " cp = f\"\"\"\n", "zip -r -X {CODEBASE}.zip {CODEBASE} -x '*.ipynb_checkpoints*' \n", "aws s3 cp {CODEBASE}.zip s3://{S3_BUCKET}/{S3_CODE_PATH}/{CODEBASE}.zip\n", "aws s3 ls {S3_BUCKET}/{S3_CODE_PATH}/\n", "\"\"\"\n", " \n", "# execute the S3 copy\n", "os.system(cp)" ] }, { "cell_type": "markdown", "id": "67476efe-d308-4158-9e24-8fbe71509f76", "metadata": {}, "source": [ "## Create Cluster" ] }, { "cell_type": "code", "execution_count": null, "id": "3e39ebf3-6940-40f1-a7f8-90efb3846f7b", "metadata": { "tags": [] }, "outputs": [], "source": [ "resp = client.create_kx_cluster(\n", " environmentId=ENV_ID, \n", " clusterName=HDB_CLUSTER_NAME,\n", " clusterType='HDB',\n", " releaseLabel = '1.0',\n", " capacityConfiguration=CAPACITY_CONFIG,\n", " databases=DATABASE_CONFIG,\n", " cacheStorageConfigurations=CACHE_CONFIG,\n", " clusterDescription=\"Created with create_HDB for basic_tick notebook\",\n", " code=CODE_CONFIG,\n", " initializationScript=INIT_SCRIPT,\n", " commandLineArguments=CMD_ARGS,\n", " azMode=AZ_MODE,\n", " availabilityZoneId=AZ_ID,\n", " vpcConfiguration={ \n", " 'vpcId': VPC_ID,\n", " 'securityGroupIds': SECURITY_GROUPS,\n", " 'subnetIds': SUBNET_IDS,\n", " 'ipAddressType': 'IP_V4' }\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "c23f37e1-9376-44b8-8e24-84ea5603b5a5", "metadata": {}, "outputs": [], "source": [ "resp" ] }, { "cell_type": "code", "execution_count": null, "id": "e9946083-c9bb-4ecc-afbd-8c20e284ddf5", "metadata": {}, "outputs": [], "source": [ "wait_for_cluster_status(client, environmentId=ENV_ID, clusterName=HDB_CLUSTER_NAME)\n", "print(\"** DONE **\")" ] }, { "cell_type": "code", "execution_count": null, "id": "1c50c578-05e8-49e7-8deb-1f6b94b10221", "metadata": {}, "outputs": [], "source": [ "cdf = get_clusters(client, environmentId=ENV_ID, clusterType=\"HDB\")\n", "\n", "display(cdf)" ] }, { "cell_type": "code", "execution_count": null, "id": "86f33240-bb12-49f3-8d9c-5783c25eb182", "metadata": {}, "outputs": [], "source": [ "print( f\"Last Run: {datetime.datetime.now()}\" )" ] }, { "cell_type": "code", "execution_count": null, "id": "d71daf7b-510b-4c0d-b285-360eb1c19533", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 5 }