Free Online Hadoop Training by Cloudera

Update: Some of the links are no longer valid. Clicking those takes you to the Cloudera videos page

I was looking for some online training on Hadoop. Turns out Cloudera has some excellent training available online, and best of all it is free.

I decided to create a list of all the training material with the time required to go through each one for easy reference

Training Type Time
Introduction to HBase Video 15 min
Download and setup training VM VMWare VM ~
Thinking at Scale Video 23 min
MapReduce and HDFS Video 50 min
Getting Started with Hadoop PDF, exercises 30 min
Hadoop Ecosystem Tour Video 20 min
Programming with Hadoop Video 50 min
MapReduce Algorithms Video 35 min
Writing MapReduce Programs PDF, exercises 90 min
Introduction to Hive Video 50 min
Hive Tutorial Video 16 min
Introduction to Pig Video 50 min
Pig Tutorial Video 15 min

So far I have gone through the first couple of videos and set up the VM. The videos are really good. Hopefully, they will offer more of their training online (free, or paid) or start to offer it more frequently in Europe.

Set timeout on Web Service proxy generated by Flex Builder

Flex Builder has a pretty nifty WSDL tool to generate support classes to access a Web Service.
Some of the code generated looks rather sloppy though, but then that is the case with most code generation tools.

One glaring omission seems to be that there is no way to set a request timeout when using the Service class generated.
What further adds to confusion is that the underlying Service class in fact extends mx.rpc.AbstractWebService and hence mx.rpc.AbstractService which has a requestTimeout property. Setting that property has no effect however.

To set a timeout on the request, you need to modify the Flex Builder generated class.

Find the method that actually makes the call to the remote server, and set the requestTimeout value on the AsyncRequest being created

private function call(operation:WSDLOperation, args:Object, token:AsyncToken, headers:Array=null):void
{    
  var enc:SOAPEncoder = new SOAPEncoder();
  …    
  var inv:AsyncRequest = new AsyncRequest();    
  inv.requestTimeout = _asyncRequestTimeout;
  …    
  inv.invoke(message,processRes);
}

And add an asyncRequestTimeout property to the service class

private var _asyncRequestTimeout:int;
public function set asyncRequestTimeout(asyncRequestTimeout:int):void        
{            
  _asyncRequestTimeout = asyncRequestTimeout;        
}

You could also use the asyncRequest property in AbstractService instead of creating your own property, but this way if somebody overwrites the generated class without adding these changes, the compiler will flag it as an error.
And a compile time error is always better than a runtime bug, isn’t it?