Building a distributed system

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Building a distributed system

Richard Whitehead
Hello,
 
I wonder if the community can help me get started.
 
I’m trying to design the architecture of a project and I think that using some Apache Hadoop technologies may make sense, but I am completely new to distributed systems and to Apache (I am a very experienced developer, but my expertise is image processing on Windows!).
 
The task is very simple: call 3 or 4 executables in sequence to process some data.  The data is just a simple image and the processing takes tens of minutes.
 
We are considering a distributed architecture to increase throughput (latency does not matter).  So we need a way to queue work on remote computers, and a way to move the data around.  The architecture will have to work n a single server, or on a couple of servers in a rack, or in the cloud; 2 or 3 computers maximum.
 
Being new to all this I would prefer something simple rather than something super-powerful.
 
I was considering Hadoop YARN and Hadoop DFS, does this make sense?  I’m assuming MapReduce would be over the top, is that the case?   
 
Thanks in advance.
 
Richard
Reply | Threaded
Open this post in threaded view
|

Re: Building a distributed system

Marcin Tustin
I think you're confused as to what these things are. 

The fundamental question is do you want to run one job on sub parts of the data, then stitch their results together (in which case hive/map-reduce/spark will be for you), or do you essentially already have splitting to computer-sized chunks figured out, and you just need a work queue? In the latter case there are a number of alternatives. I happen to like python, and would recommend celery (potentially wrapped by something like airflow) for that case. 

On Mon, Jul 18, 2016 at 12:17 PM, Richard Whitehead <[hidden email]> wrote:
Hello,
 
I wonder if the community can help me get started.
 
I’m trying to design the architecture of a project and I think that using some Apache Hadoop technologies may make sense, but I am completely new to distributed systems and to Apache (I am a very experienced developer, but my expertise is image processing on Windows!).
 
The task is very simple: call 3 or 4 executables in sequence to process some data.  The data is just a simple image and the processing takes tens of minutes.
 
We are considering a distributed architecture to increase throughput (latency does not matter).  So we need a way to queue work on remote computers, and a way to move the data around.  The architecture will have to work n a single server, or on a couple of servers in a rack, or in the cloud; 2 or 3 computers maximum.
 
Being new to all this I would prefer something simple rather than something super-powerful.
 
I was considering Hadoop YARN and Hadoop DFS, does this make sense?  I’m assuming MapReduce would be over the top, is that the case?   
 
Thanks in advance.
 
Richard


Want to work at Handy? Check out our culture deck and open roles
Latest news at Handy
Handy just raised $50m led by Fidelity

Reply | Threaded
Open this post in threaded view
|

Re: Building a distributed system

Ravi Prakash-3
Welcome to the community Richard!

I suspect Hadoop can be more useful than just splitting and stitching back data. Depending on your use cases, it may come in handy to manage your machines, restart failed tasks, scheduling work when data becomes available etc. I wouldn't necessarily count it out. I'm sorry I am not familiar with celery, so I can't provide a direct comparison. Also, in the non-rare chance that your input data grows, you wouldn't have to rewrite your infrastructure code if you wrote your Hadoop code properly.

HTH
Ravi

On Mon, Jul 18, 2016 at 9:23 AM, Marcin Tustin <[hidden email]> wrote:
I think you're confused as to what these things are. 

The fundamental question is do you want to run one job on sub parts of the data, then stitch their results together (in which case hive/map-reduce/spark will be for you), or do you essentially already have splitting to computer-sized chunks figured out, and you just need a work queue? In the latter case there are a number of alternatives. I happen to like python, and would recommend celery (potentially wrapped by something like airflow) for that case. 

On Mon, Jul 18, 2016 at 12:17 PM, Richard Whitehead <[hidden email]> wrote:
Hello,
 
I wonder if the community can help me get started.
 
I’m trying to design the architecture of a project and I think that using some Apache Hadoop technologies may make sense, but I am completely new to distributed systems and to Apache (I am a very experienced developer, but my expertise is image processing on Windows!).
 
The task is very simple: call 3 or 4 executables in sequence to process some data.  The data is just a simple image and the processing takes tens of minutes.
 
We are considering a distributed architecture to increase throughput (latency does not matter).  So we need a way to queue work on remote computers, and a way to move the data around.  The architecture will have to work n a single server, or on a couple of servers in a rack, or in the cloud; 2 or 3 computers maximum.
 
Being new to all this I would prefer something simple rather than something super-powerful.
 
I was considering Hadoop YARN and Hadoop DFS, does this make sense?  I’m assuming MapReduce would be over the top, is that the case?   
 
Thanks in advance.
 
Richard


Want to work at Handy? Check out our culture deck and open roles
Latest news at Handy
Handy just raised $50m led by Fidelity


Reply | Threaded
Open this post in threaded view
|

Re: Building a distributed system

Richard Whitehead
Thanks Ravi and Marcin,
 
You are right, what we need is a work queue, a way to start jobs on remote machines, and a way to move data to and from those remote machines.   The “jobs” are just executables that process one item of data.  We don’t need to split the data into chunks or to combine the results from several jobs.
 
The feeling amongst the developers seems to be that Java would be preferable to Python (this is a medical product and people, whether rightly or wrongly, think Java would be easier to validate). 
 
Is there a way to use the Hadoop (or some other) infrastructure in a simple way to prevent us having to write a scheduler, database schema etc.?  We can do that but it seems to be solving a problem that has already been solved many times.
 
Thanks again,
 
Richard
 
 
Sent: Monday, July 18, 2016 7:45 PM
Subject: Re: Building a distributed system
 
Welcome to the community Richard!

I suspect Hadoop can be more useful than just splitting and stitching back data. Depending on your use cases, it may come in handy to manage your machines, restart failed tasks, scheduling work when data becomes available etc. I wouldn't necessarily count it out. I'm sorry I am not familiar with celery, so I can't provide a direct comparison. Also, in the non-rare chance that your input data grows, you wouldn't have to rewrite your infrastructure code if you wrote your Hadoop code properly.

HTH
Ravi
 
On Mon, Jul 18, 2016 at 9:23 AM, Marcin Tustin <[hidden email]> wrote:
I think you're confused as to what these things are. 
 
The fundamental question is do you want to run one job on sub parts of the data, then stitch their results together (in which case hive/map-reduce/spark will be for you), or do you essentially already have splitting to computer-sized chunks figured out, and you just need a work queue? In the latter case there are a number of alternatives. I happen to like python, and would recommend celery (potentially wrapped by something like airflow) for that case.
 
On Mon, Jul 18, 2016 at 12:17 PM, Richard Whitehead <[hidden email]> wrote:
Hello,
 
I wonder if the community can help me get started.
 
I’m trying to design the architecture of a project and I think that using some Apache Hadoop technologies may make sense, but I am completely new to distributed systems and to Apache (I am a very experienced developer, but my expertise is image processing on Windows!).
 
The task is very simple: call 3 or 4 executables in sequence to process some data.  The data is just a simple image and the processing takes tens of minutes.
 
We are considering a distributed architecture to increase throughput (latency does not matter).  So we need a way to queue work on remote computers, and a way to move the data around.  The architecture will have to work n a single server, or on a couple of servers in a rack, or in the cloud; 2 or 3 computers maximum.
 
Being new to all this I would prefer something simple rather than something super-powerful.
 
I was considering Hadoop YARN and Hadoop DFS, does this make sense?  I’m assuming MapReduce would be over the top, is that the case?   
 
Thanks in advance.
 
Richard
 
 
Want to work at Handy? Check out our culture deck and open roles
Latest news at Handy
Handy just raised $50m led by Fidelity

 
Reply | Threaded
Open this post in threaded view
|

Re: Building a distributed system

Richard Whitehead
Thanks Mirko,
 
I simply don’t understand enough to get going with this.  The documentation dives into details so fast but I don’t really understand the basics of using Hadoop.  I want to run a process that takes a file as input and gives a file as output, that seems pretty straightforward but I can’t tell if that’s supported.
 
I think we are going to drop this for now, the barrier to getting started is so high.
 
Thanks a lot for your help,
 
Richard
 
 
Sent: Tuesday, July 19, 2016 9:53 AM
Subject: Re: Building a distributed system
 
Hello Richard,
 
in order to process individual "items of data" it is pretty easy to use the Hadoop streaming API, assuming you have placed the data in HDFS,
all the distribution of "items" comes also for free as part of the infrastructure.
 
Have a look at this document:
 
Best wishes,
Mirko
 
 
2016-07-19 10:48 GMT+02:00 Richard Whitehead <[hidden email]>:
Thanks Ravi and Marcin,
 
You are right, what we need is a work queue, a way to start jobs on remote machines, and a way to move data to and from those remote machines.   The “jobs” are just executables that process one item of data.  We don’t need to split the data into chunks or to combine the results from several jobs.
 
The feeling amongst the developers seems to be that Java would be preferable to Python (this is a medical product and people, whether rightly or wrongly, think Java would be easier to validate). 
 
Is there a way to use the Hadoop (or some other) infrastructure in a simple way to prevent us having to write a scheduler, database schema etc.?  We can do that but it seems to be solving a problem that has already been solved many times.
 
Thanks again,
 
Richard
 
 
Sent: Monday, July 18, 2016 7:45 PM
Subject: Re: Building a distributed system
 
Welcome to the community Richard!

I suspect Hadoop can be more useful than just splitting and stitching back data. Depending on your use cases, it may come in handy to manage your machines, restart failed tasks, scheduling work when data becomes available etc. I wouldn't necessarily count it out. I'm sorry I am not familiar with celery, so I can't provide a direct comparison. Also, in the non-rare chance that your input data grows, you wouldn't have to rewrite your infrastructure code if you wrote your Hadoop code properly.

HTH
Ravi
 
On Mon, Jul 18, 2016 at 9:23 AM, Marcin Tustin <[hidden email]> wrote:
I think you're confused as to what these things are. 
 
The fundamental question is do you want to run one job on sub parts of the data, then stitch their results together (in which case hive/map-reduce/spark will be for you), or do you essentially already have splitting to computer-sized chunks figured out, and you just need a work queue? In the latter case there are a number of alternatives. I happen to like python, and would recommend celery (potentially wrapped by something like airflow) for that case.
 
On Mon, Jul 18, 2016 at 12:17 PM, Richard Whitehead <[hidden email]> wrote:
Hello,
 
I wonder if the community can help me get started.
 
I’m trying to design the architecture of a project and I think that using some Apache Hadoop technologies may make sense, but I am completely new to distributed systems and to Apache (I am a very experienced developer, but my expertise is image processing on Windows!).
 
The task is very simple: call 3 or 4 executables in sequence to process some data.  The data is just a simple image and the processing takes tens of minutes.
 
We are considering a distributed architecture to increase throughput (latency does not matter).  So we need a way to queue work on remote computers, and a way to move the data around.  The architecture will have to work n a single server, or on a couple of servers in a rack, or in the cloud; 2 or 3 computers maximum.
 
Being new to all this I would prefer something simple rather than something super-powerful.
 
I was considering Hadoop YARN and Hadoop DFS, does this make sense?  I’m assuming MapReduce would be over the top, is that the case?   
 
Thanks in advance.
 
Richard
 
 
Want to work at Handy? Check out our culture deck and open roles
Latest news at Handy
Handy just raised $50m led by Fidelity

 
 
Reply | Threaded
Open this post in threaded view
|

Re: Building a distributed system

Marcin Tustin
In reply to this post by Richard Whitehead
Perhaps there is. Note that there are a bunch of java job queues. HDFS sounds like it might be a nice way to share the data. Yarn or Mesos might be a nice way to schedule the running of the jobs, but it sounds like you could use any orchestration system to run the worker processes, and just have them talk to the job queue.

This honestly doesn't sound like a problem where I would reach for hadoop execution technologies first.

Also, if you want to be in JVM land, a lot of projects use scala, which because of its type system might be even easier to validate. That would also make using spark a lot nicer, if you really do decide you want hadoopish style execution.

Also also, spark could potentially serve the place of a job queue running on top of yarn, mesos, or its own cluster manager.

On Tue, Jul 19, 2016 at 4:48 AM, Richard Whitehead <[hidden email]> wrote:
Thanks Ravi and Marcin,
 
You are right, what we need is a work queue, a way to start jobs on remote machines, and a way to move data to and from those remote machines.   The “jobs” are just executables that process one item of data.  We don’t need to split the data into chunks or to combine the results from several jobs.
 
The feeling amongst the developers seems to be that Java would be preferable to Python (this is a medical product and people, whether rightly or wrongly, think Java would be easier to validate). 
 
Is there a way to use the Hadoop (or some other) infrastructure in a simple way to prevent us having to write a scheduler, database schema etc.?  We can do that but it seems to be solving a problem that has already been solved many times.
 
Thanks again,
 
Richard
 
 
Sent: Monday, July 18, 2016 7:45 PM
Subject: Re: Building a distributed system
 
Welcome to the community Richard!

I suspect Hadoop can be more useful than just splitting and stitching back data. Depending on your use cases, it may come in handy to manage your machines, restart failed tasks, scheduling work when data becomes available etc. I wouldn't necessarily count it out. I'm sorry I am not familiar with celery, so I can't provide a direct comparison. Also, in the non-rare chance that your input data grows, you wouldn't have to rewrite your infrastructure code if you wrote your Hadoop code properly.

HTH
Ravi
 
On Mon, Jul 18, 2016 at 9:23 AM, Marcin Tustin <[hidden email]> wrote:
I think you're confused as to what these things are. 
 
The fundamental question is do you want to run one job on sub parts of the data, then stitch their results together (in which case hive/map-reduce/spark will be for you), or do you essentially already have splitting to computer-sized chunks figured out, and you just need a work queue? In the latter case there are a number of alternatives. I happen to like python, and would recommend celery (potentially wrapped by something like airflow) for that case.
 
On Mon, Jul 18, 2016 at 12:17 PM, Richard Whitehead <[hidden email]> wrote:
Hello,
 
I wonder if the community can help me get started.
 
I’m trying to design the architecture of a project and I think that using some Apache Hadoop technologies may make sense, but I am completely new to distributed systems and to Apache (I am a very experienced developer, but my expertise is image processing on Windows!).
 
The task is very simple: call 3 or 4 executables in sequence to process some data.  The data is just a simple image and the processing takes tens of minutes.
 
We are considering a distributed architecture to increase throughput (latency does not matter).  So we need a way to queue work on remote computers, and a way to move the data around.  The architecture will have to work n a single server, or on a couple of servers in a rack, or in the cloud; 2 or 3 computers maximum.
 
Being new to all this I would prefer something simple rather than something super-powerful.
 
I was considering Hadoop YARN and Hadoop DFS, does this make sense?  I’m assuming MapReduce would be over the top, is that the case?   
 
Thanks in advance.
 
Richard
 
 
Want to work at Handy? Check out our culture deck and open roles
Latest news at Handy
Handy just raised $50m led by Fidelity

 


Want to work at Handy? Check out our culture deck and open roles
Latest news at Handy
Handy just raised $50m led by Fidelity