Thanks all for the replies, that makes sense. I think I am allocating connection resources per-mapper, instead of per-task.

How do I programatically allocate a "pool" or shared resource for a task, that all Mapper instances can have access to?

1) I have 4 nodes, each node has a map capacity of 2 for a total of 8 tasks running simultaneously. The job I am running is queuing up ~950 tasks that need to be done.

2) the mysql server I am connecting to is configured to permit 300 connections.

2) When a Mapper instance starts, right now each mapper instance is handling the connections, obviously this is my problem as each task must be spinning up dozens/hundreds of mapper instances to process the task (is that right? or does one mapper instance process an entire split?). I need to move this to the "task", but this is where I need some pointers on where to look.

When I submit my job is there some way to say:

jobConf .setTaskHandlingClass (SomeClassThatCreatesThePoolThatTaskMapperInstancesAccess.class)

??

        -

On Nov 15, 2009, at 7:57 PM, Jeff Zhang wrote:

Each map task will run in an separate JVM. So you should create connection pool for each task, And all the mapper instances in one task share the same
connection pool.

Another suggestion is that you can use JNDI to manger the connection . It
can be shared by all the map tasks in your cluster.


Jeff Zhang




On Mon, Nov 16, 2009 at 8:52 AM, yz5od2 <woods5242- outdo...@yahoo.com>wrote:

Hi,

a) I have a Mapper ONLY job, the job reads in records, then parses them
apart.  No reduce phase

b) I would like this mapper job to save the record into a shared mysql
database on the network.

c) I am running a 4 node cluster, and obviously running out of connections
very quickly, that is something I can work on the db server side.

What I am trying to understand, is that for each mapper task instance that is processing an input split... does that run in its own classloader? I guess I am trying to figure out how to manage a connection pool on each processing node, so that all mapper instances would use that to get access to the database. Right now it appears that each node is creating thousands of mapper instance each with their own connection management, hence this is blowing up quite quickly. I would like the connection management to live
separately from the mapper instances per node.

I hope I am explaining what I want to do ok, please let me know if anyone has any thoughts, tips, best practices, features I should look at etc.

thanks






Reply via email to