[Beowulf] Large amounts of data to store and process
Joe Landman
joe.landman at gmail.com
Mon Mar 4 06:27:52 PST 2019
On 3/4/19 1:55 AM, Jonathan Aquilina wrote:
> Hi Tony,
>
> Sadly I cant go into much detail due to me being under an NDA. At this point with the prototype we have around 250gb of sample data but again this data is dependent on the type of air craft. Larger aircraft and longer flights will generate a lot more data as they have more sensors and will log more data than the sample data that I have. The sample data is 250gb for 35 aircraft of the same type.
You need to return your answers in ~10m or 600s, with an assumed data
set size of 250GB or more (assuming you meant GB and not Gb). Depending
upon the nature of the calculation, whether or not you can perform the
calculations on subsets, or if it requires multiple passes through the
data in order to calculate.
I've noticed some recommendations popping up ahead of understanding what
the rate limiting factors for returning the results from calculations
based upon this data set. I'd suggest focusing on the analysis needs to
start, as this will provide some level of guidance on the system(s)
design required to meet your objectives.
First off, do you know whether your code will meet this 600s response
time with this 250GB data set? I am assuming this is unknown at this
moment, but if you have response time data for smaller data sets, you
could construct a rough scaling study and build a simple predictive model.
Second, do you need the entire bolus of data, all 250GB, in order to
generate a response to within required accuracy? If not, great, and
what size do you need?
Third, will this data set grow over time (looking at your writeup, it
looks like this is a definite "yes")?
Fourth, does the code require physical access to all of the data bolus
(what is needed for the calculation) locally in order to correctly operate?
Fifth, will the data access patterns for the code be streaming,
searching, or random? In only one of these cases would a database (SQL
or noSQL) be a viable option.
Sixth, is your working data set size comparable to the bolus size (e.g.
250GB)?
Seventh, can your code work correctly with sharded data (variation on
second point)?
Now some brief "data physics".
a) (data on durable storage) 250GB @ 1GB/s -> 250s to read, once,
assuming large block sequential read. For a 600s response time, that
leaves you with 350s to calculate. Is this enough time? Is a single
pass (streaming) workable?
b) (data in ram) 250GB/s @ 100GB/s -> 2.5s to walk through once in
parallel amongst multiple cores. If multiple/many passes through data
are required, this strongly suggests a large memory machine (512GB or
larger).
c) if your data is shardable, and you can distribute it amongst N
machines, the above analyses still hold, replacing the 250GB with the
size of the shards. If you can do this, how much information does your
code need to share amongst the worker nodes in order to effect the
calculation? This will provide guidance on interconnect choices.
Basically, I am advocating focusing on the analysis needs, how the
scale/grow, and your near/medium/long term goals with this, before you
commit to a specific design/implementation. Avoid the "if all you have
is a hammer, every problem looks like a nail" view as much as possible.
--
Joe Landman
e: joe.landman at gmail.com
t: @hpcjoe
w: https://scalability.org
g: https://github.com/joelandman
l: https://www.linkedin.com/in/joelandman
More information about the Beowulf
mailing list