diff --git a/cassandra/deploy.py b/cassandra/deploy.py index ebfe2b0..aa78b19 100644 --- a/cassandra/deploy.py +++ b/cassandra/deploy.py @@ -2,6 +2,7 @@ import argparse import mmap import time +import csv import itertools @@ -9,6 +10,7 @@ from ccmlib import common, extension, repository from ccmlib.node import Node, NodeError, TimeoutError + class CustomCluster(Cluster): def __update_pids(self, started): for node, p, _ in started: @@ -38,7 +40,8 @@ def start(self, no_wait=False, verbose=False, wait_for_binary_proto=True, if os.path.exists(node.logfilename()): mark = node.mark_log() - p = node.start(update_pid=False, jvm_args=jvm_args, profile_options=profile_options, verbose=verbose, quiet_start=quiet_start, allow_root=allow_root) + p = node.start(update_pid=False, jvm_args=jvm_args, profile_options=profile_options, + verbose=verbose, quiet_start=quiet_start, allow_root=allow_root) # Prior to JDK8, starting every node at once could lead to a # nanotime collision where the RNG that generates a node's tokens @@ -48,17 +51,20 @@ def start(self, no_wait=False, verbose=False, wait_for_binary_proto=True, # [RAYANDREW] modify this # print('Waiting 10s before starting other node') - time.sleep(10) # wait 10 seconds before starting other node + time.sleep(10) # wait 10 seconds before starting other node started.append((node, p, mark)) if no_wait: - time.sleep(2) # waiting 2 seconds to check for early errors and for the pid to be set + # waiting 2 seconds to check for early errors and for the pid to be set + time.sleep(2) else: for node, p, mark in started: try: - start_message = "Listening for thrift clients..." if self.cassandra_version() < "2.2" else "Starting listening for CQL clients" - node.watch_log_for(start_message, timeout=kwargs.get('timeout',60), process=p, verbose=verbose, from_mark=mark) + start_message = "Listening for thrift clients..." if self.cassandra_version( + ) < "2.2" else "Starting listening for CQL clients" + node.watch_log_for(start_message, timeout=kwargs.get( + 'timeout', 60), process=p, verbose=verbose, from_mark=mark) except RuntimeError: return None @@ -75,12 +81,13 @@ def start(self, no_wait=False, verbose=False, wait_for_binary_proto=True, if wait_for_binary_proto: for node, p, mark in started: - node.wait_for_binary_interface(process=p, verbose=verbose, from_mark=mark) + node.wait_for_binary_interface( + process=p, verbose=verbose, from_mark=mark) extension.post_cluster_start(self) return started - + def _read_logs(filename, text='Used Memory'): line = None @@ -90,27 +97,31 @@ def _read_logs(filename, text='Used Memory'): return line + def _read_logs_2(filename, text='Used Memory'): with open(filename, 'r') as f: # memory-map the file, size 0 means whole file - m = mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ) - # prot argument is *nix only + m = mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ) + # prot argument is *nix only i = m.rfind(b'Used Memory') # search for last occurrence of 'word' m.seek(i) # seek to the location line = m.readline() # read to the end of the line return str(line) + def log_parser(args, node_count): mems = [] for i in range(node_count): - line = _read_logs(os.path.join(args.cluster_path, args.cluster_name, 'node{}'.format(i + 1), 'logs', 'system.log')) + line = _read_logs(os.path.join( + args.cluster_path, args.cluster_name, 'node{}'.format(i + 1), 'logs', 'system.log')) if line is not None: mem_digits = [int(s) for s in line.split(' ') if s.isdigit()] mems.append(mem_digits[0]) return mems + def deploy_cluster(args, node_count): cluster = CustomCluster( path=args.cluster_path, @@ -120,42 +131,58 @@ def deploy_cluster(args, node_count): return cluster + def stop_remove_cluster(cluster): cluster.stop() cluster.remove() + if __name__ == '__main__': parser = argparse.ArgumentParser( description='[Cassandra] - Memory Reader') - parser.add_argument('--node_count', '-nc', default=5, type=int, help='Cassandra Node Count') - parser.add_argument('--cassandra_dir', '-cd', default='/mnt/extra/cassandra', help='cassandra source dir') - parser.add_argument('--cluster_name', '-cn', default='test', help='cluster name') - parser.add_argument('--cluster_path', '-cp', default='/mnt/extra/working', help='ccm conf dir') + parser.add_argument('--node_count', '-nc', default=5, + type=int, help='Cassandra Node Count') + parser.add_argument('--cassandra_dir', '-cd', + default='/mnt/extra/cassandra', help='cassandra source dir') + parser.add_argument('--cluster_name', '-cn', + default='test', help='cluster name') + parser.add_argument('--cluster_path', '-cp', + default='/mnt/extra/working', help='ccm conf dir') args = parser.parse_args() - for node_count in range(-5, args.node_count - 5, 5): - print('Starting Cluster consists of {} nodes'.format(node_count + 10)) - cluster = deploy_cluster(args, node_count + 10) + # result = [] - print('Delay about 1 minute before trying to read memory logs') - time.sleep(60) + with open('result.csv', mode='w') as csv_file: + writer = csv.DictWriter(csv_file, fieldnames=['nodes', 'mems']) + writer.writeheader() - print('Start reading the logs') + for node_count in range(10, args.node_count + 10, 10): + print('Starting Cluster consists of {} nodes'.format(node_count)) + cluster = deploy_cluster(args, node_count) - mems = [] + print('Delay about 1 minute before trying to read memory logs') + time.sleep(60) - while True: - mems = log_parser(args, node_count + 10) - time.sleep(2) - if len(mems) == (node_count + 10): - break + print('Start reading the logs') + + mems = [] + + while True: + mems = log_parser(args, node_count) + time.sleep(2) + if len(mems) == node_count: + break + + total_mems = sum(mems) + print('List of mem used ', mems) + print('Total memory used for {} nodes is : {} MB'.format( + node_count, total_mems)) - print('List of mem used ', mems) - print('Total memory used for {} nodes is : {} MB'.format(node_count + 10, sum(mems))) + writer.writerow({'nodes': node_count, 'mems': total_mems}) - print('Stopping and Remove Cluster') - stop_remove_cluster(cluster) + print('Stopping and Remove Cluster') + stop_remove_cluster(cluster) - print('Delaying 10 secs before spawning another cluster\n') - time.sleep(10) \ No newline at end of file + print('Delaying 10 secs before spawning another cluster\n') + time.sleep(10) diff --git a/cassandra/log_100.txt b/cassandra/log_100.txt new file mode 100644 index 0000000..e9e11ff --- /dev/null +++ b/cassandra/log_100.txt @@ -0,0 +1,82 @@ +Starting Cluster consists of 10 nodes +/usr/local/lib/python3.4/dist-packages/ccmlib/node.py:1501: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. + data = yaml.load(f) +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +Total memory used for 10 nodes is : 10 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 20 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2] +Total memory used for 20 nodes is : 34 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 30 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2] +Total memory used for 30 nodes is : 54 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 40 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2] +Total memory used for 40 nodes is : 74 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 50 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] +Total memory used for 50 nodes is : 96 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 60 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2] +Total memory used for 60 nodes is : 117 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 70 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] +Total memory used for 70 nodes is : 136 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 80 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] +Total memory used for 80 nodes is : 155 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 90 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] +Total memory used for 90 nodes is : 176 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + +Starting Cluster consists of 100 nodes +Delay about 1 minute before trying to read memory logs +Start reading the logs +List of mem used [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2] +Total memory used for 100 nodes is : 199 MB +Stopping and Remove Cluster +Delaying 10 secs before spawning another cluster + diff --git a/cassandra/result.csv b/cassandra/result.csv new file mode 100644 index 0000000..95a9390 --- /dev/null +++ b/cassandra/result.csv @@ -0,0 +1,11 @@ +nodes,mems +10,10 +20,34 +30,54 +40,74 +50,96 +60,117 +70,136 +80,155 +90,176 +100,199 diff --git a/test.csv b/test.csv new file mode 100644 index 0000000..289f3bd --- /dev/null +++ b/test.csv @@ -0,0 +1,2 @@ +nodes,mems +0,1 diff --git a/visualization/README.md b/visualization/README.md new file mode 100644 index 0000000..0a0df08 --- /dev/null +++ b/visualization/README.md @@ -0,0 +1,21 @@ +# Visualization Memory Usage + +This project uses matplotlib to plot memory usage of distributed systems + +## Distributed Systems + +- [x] Cassandra +- [x] HDFS +- [ ] HBase +- [ ] Tensorflow Distributed +- [ ] ... + +## Running + +```bash +jupyter lab +``` + +## Results + +![mem-usages](plot.png) diff --git a/visualization/Visualization.ipynb b/visualization/Visualization.ipynb new file mode 100644 index 0000000..86608f0 --- /dev/null +++ b/visualization/Visualization.ipynb @@ -0,0 +1,293 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "source": [ + "# This line configures matplotlib to show figures embedded in the notebook, \n", + "# instead of poping up a new window. More about that later. \n", + "%pylab inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from pylab import *\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from scipy.interpolate import interp1d\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "distributed_systems = ['cassandra', 'hdfs']" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('./data.csv')\n", + "df = df.set_index('nodes')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cassandrahdfs
nodes
101026
203446
305466
407489
5096109
\n", + "
" + ], + "text/plain": [ + " cassandra hdfs\n", + "nodes \n", + "10 10 26\n", + "20 34 46\n", + "30 54 66\n", + "40 74 89\n", + "50 96 109" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Int64Index([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], dtype='int64', name='nodes')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Memory (MB)')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = df.plot.line()\n", + "ax.set_title('Before interpolation')\n", + "ax.set_xlabel(\"Nodes\")\n", + "ax.set_ylabel(\"Memory (MB)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# f = interp1d(df.index, df['memory'], kind='cubic')\n", + "f = []\n", + "for system in distributed_systems:\n", + " f.append(interp1d(df.index, df[system], kind='cubic'))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "df_int = pd.DataFrame()\n", + "new_index = np.arange(10, 110, 10)\n", + "# df_int['memory'] = f(new_index)\n", + "\n", + "for i in range(len(distributed_systems)):\n", + " df_int[distributed_systems[i]] = f[i](new_index) \n", + " \n", + "df_int.index = new_index\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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jaTFBUJAYbCJaFxFRERERFqWFhkI5diSkpI4dOiQ22WIiIiIiEgzoUAY4Ky1eL1et8sQEREREREXKBA2kUWLFjFkyBCGDh3KVVddxdtvv81pp53GsGHDmD59Ovn5+QAsX76clJQUUlJSGDZsGGVlZezfv59JkyaRkpLCoEGDWLlyJQA///nPGTlyJMnJydxzzz1fv1ZSUhL33HMPw4cPZ/DgwezYsQOAwsJCzjzzTIYNG8bPfvYzrLUAZGdnM2DAAH7xi18wfPhwcnNzj3ttERERERFpuVrcKqMN/fHtDLbvK23Uaw7s2oZ7zk0+4TkZGRnce++9rF69mg4dOlBUVIQxhk8//RRjDM8++yz3338/Dz74IPPmzePxxx9n/PjxlJeXExERwdNPP82MGTO4++678Xg8VFZWAnDvvffSvn17PB4P06ZN47PPPmPIkCEAdOjQgU2bNvHEE08wb948nn32Wf74xz8yYcIE/vCHP/Duu+/y9NNPf13jzp07WbhwIU888cR3XltERERERFomdQibwLJly7jkkkvo0KEDAO3btycvL48ZM2YwePBgHnjgATIyMgAYP348t99+O4888giHDx8mJCSEUaNGsXDhQubOncvnn39OdHQ0AEuXLmX48OEMGzaMjIwMtm/f/vVrXnTRRQCMGDGC7OxsAFasWMGVV14JwKxZs2jXrt3X53fv3p0xY8Z8/f2Jri0iIiIiIi1Ti+4Qflcnr6lYa7+1Iucvf/lLbr/9ds477zzS0tKYO3cuAL/5zW+YNWsW7733HmPGjOGjjz5i0qRJrFixgnfffZerrrqKu+66i4kTJzJv3jzWr19Pu3btuPbaa6murv76+uHh4QAEBwdTX1//9fHjrQzacD/BrKysE15bRERERERaJnUIm8C0adNYunQphYWFABQVFVFSUkJ8fDwAzz///NfnZmZmMnjwYH79618zcuRIduzYwZ49e+jYsSM33ngjN9xwA5s2baK0tJTWrVvTtm1b8vPzef/997+zjkmTJvHSSy8B8P7771NcXHzM837ItUVERERE5NTXojuEbklOTubuu+9m8uTJBAcHM2zYMObOncull15KfHw8Y8aMISsrC4C///3vfPLJJwQHBzNw4EBmzpzJkiVLeOCBBwgNDSUqKopFixbRo0cPhg0bRnJyMj179mT8+PHfWcc999zDnDlz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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax2 = df_int.plot.line(figsize=(15,8), grid=True)\n", + "ax2.set_title('Cassandra JVM Memory Usage')\n", + "ax2.set_xlabel(\"Nodes\")\n", + "ax2.set_ylabel(\"Memory (MB)\")\n", + "plt.savefig('plot.png')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/visualization/data.csv b/visualization/data.csv new file mode 100644 index 0000000..4953072 --- /dev/null +++ b/visualization/data.csv @@ -0,0 +1,11 @@ +nodes,cassandra,hdfs +10,10,26 +20,34,46 +30,54,66 +40,74,89 +50,96,109 +60,117,129 +70,136,152 +80,155,170 +90,176,193 +100,199,213 \ No newline at end of file diff --git a/visualization/plot.png b/visualization/plot.png new file mode 100644 index 0000000..b57b66c Binary files /dev/null and b/visualization/plot.png differ