From 5fd506cd51d8b8ba086b60bc2d73a04cf72afd27 Mon Sep 17 00:00:00 2001 From: fjy Date: Thu, 13 Mar 2014 21:38:09 -0700 Subject: [PATCH] finishing the paper --- publications/whitepaper/druid.pdf | Bin 595384 -> 595418 bytes publications/whitepaper/druid.tex | 39 +++++++++++++++--------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/publications/whitepaper/druid.pdf b/publications/whitepaper/druid.pdf index 7f8dfc6848b2ede5f7aa0e2b1515aa3e599b2cc9..c6d7f5924f396ea056e1c3caf4f330ba5b2ab2f0 100644 GIT binary patch delta 25857 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

=e#?AvJ50xbU^igTLc#?#qN1R!!3U`)|&f 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%0Al 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 P^6;`EQc;O3N+A9hgS)=& diff --git a/publications/whitepaper/druid.tex b/publications/whitepaper/druid.tex index 99dbf3af7ea..a032d87cc6a 100644 --- a/publications/whitepaper/druid.tex +++ b/publications/whitepaper/druid.tex @@ -76,7 +76,7 @@ came to the conclusion that there was nothing in the open source world that could be fully leveraged for our requirements. We ended up creating Druid, an open-source, distributed, column-oriented, -realtime analytical data store. In many ways, Druid shares similarities with +real-time analytical data store. In many ways, Druid shares similarities with other OLAP systems \cite{oehler2012ibm, schrader2009oracle, lachev2005applied}, interactive query systems \cite{melnik2010dremel}, main-memory databases \cite{farber2012sap}, and widely-known distributed data stores @@ -413,7 +413,7 @@ distribution on historical nodes. The coordinator nodes tell historical nodes to load new data, drop outdated data, replicate data, and move data to load balance. Druid uses a multi-version concurrency control swapping protocol for managing immutable segments in order to maintain stable views. If any -immutable segment contains data that is wholly obseleted by newer segments, the +immutable segment contains data that is wholly obsoleted by newer segments, the outdated segment is dropped from the cluster. Coordinator nodes undergo a leader-election process that determines a single node that runs the coordinator functionality. The remaining coordinator nodes act as redundant backups. @@ -678,7 +678,7 @@ A sample count query over a week of data is as follows: "aggregations" : [{"type":"count", "name":"rows"}] } \end{verbatim}} -The query shown above will return a count of the number of rows in the Wikipedia datasource +The query shown above will return a count of the number of rows in the Wikipedia data source from 2013-01-01 to 2013-01-08, filtered for only those rows where the value of the ``page" dimension is equal to ``Ke\$ha". The results will be bucketed by day and will be a JSON array of the following form: {\scriptsize\begin{verbatim} @@ -780,11 +780,12 @@ involving all columns are very rare. A few notes about our results: \begin{itemize}[leftmargin=*,beginpenalty=5000,topsep=0pt] -\item The results are from a ``hot" tier in our production cluster. We run -several tiers of varying performance in production. +\item The results are from a ``hot" tier in our production cluster. There were +approximately 50 data sources in the tier and several hundred users issuing +queries. -\item There is approximately 10.5TB of RAM available in the ``hot" tier and -approximately 10TB of segments loaded (including replication). Collectively, +\item There was approximately 10.5TB of RAM available in the ``hot" tier and +approximately 10TB of segments loaded. Collectively, there are about 50 billion Druid rows in this tier. Results for every data source are not shown. @@ -796,13 +797,13 @@ threads and 672 total cores (hyperthreaded). \end{itemize} Query latencies are shown in Figure~\ref{fig:query_latency} and the queries per -minute are shown in Figure~\ref{fig:queries_per_min}. Across all the various +minute are shown in Figure~\ref{fig:queries_per_min}. Across all the various data sources, average query latency is approximately 550 milliseconds, with 90\% of queries returning in less than 1 second, 95\% in under 2 seconds, and -99\% of queries returning in less than 10 seconds. -Occasionally we observe spikes in latency, as observed on February 19, -in which case network issues on the Memcached instances were compounded by very high -query load on one of our largest datasources. +99\% of queries returning in less than 10 seconds. Occasionally we observe +spikes in latency, as observed on February 19, in which case network issues on +the Memcached instances were compounded by very high query load on one of our +largest datasources. \begin{figure} \centering @@ -881,7 +882,7 @@ ingestion setup consists of 6 nodes, totalling 360GB of RAM and 96 cores (12 x Intel Xeon E5-2670). Note that in this setup, several other data sources were being ingested and -many other Druid related ingestion tasks were running concurrently on those machines. +many other Druid related ingestion tasks were running concurrently on the machines. Druid's data ingestion latency is heavily dependent on the complexity of the data set being ingested. The data complexity is determined by the number of @@ -948,19 +949,19 @@ explore use case, the number of queries issued by a single user is much higher than in the reporting use case. Exploratory queries often involve progressively adding filters for the same time range to narrow down results. Users tend to explore short time intervals of recent data. In the generate report use case, -users query for much longer data intervals, but users also already have the -queries they want to issue in mind. +users query for much longer data intervals, but users also already know the +queries they want to issue. \paragraph{Multitenancy} Expensive concurrent queries can be problematic in a multitenant -environment. Queries for large datasources may end up hitting every historical +environment. Queries for large data sources may end up hitting every historical node in a cluster and consume all cluster resources. Smaller, cheaper queries may be blocked from executing in such cases. We introduced query prioritization to address these issues. Each historical node is able to prioritize which segments it needs to scan. Proper query planning is critical for production workloads. Thankfully, queries for a significant amount of data tend to be for -reporting use cases, and users are not expecting the same level of -interactivity as when they are querying to explore data. +reporting use cases and can be deprioritized. Users do not expect the same level of +interactivity in this use case as when they are exploring data. \paragraph{Node failures} Single node failures are common in distributed environments, but many nodes @@ -979,7 +980,7 @@ center to fail. In such cases, new machines need to be provisioned. As long as deep storage is still available, cluster recovery time is network bound as historical nodes simply need to redownload every segment from deep storage. We have experienced such failures in the past, and the recovery time was around -several hours in the AWS ecosystem on several TBs of data. +several hours in the AWS ecosystem for several TBs of data. \subsection{Operational Monitoring} Proper monitoring is critical to run a large scale distributed cluster.