[ 
https://issues.apache.org/jira/browse/HADOOP-6248?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12753299#action_12753299
 ] 

Alex Loddengaard commented on HADOOP-6248:
------------------------------------------

h1. Overview

This proposal defines a system testing framework for Hadoop, named Circus. 
Circus will let Hadoop testers and users run one or more tests on a Hadoop 
"context." A context might be a local pseudo-distributed cluster, an EC2 
cluster, two Hadoop clusters-each running a different version of Hadoop-or 
anything else. A test might be the canned pi example, HDFS manipulations, an 
HDFS upgrade, custom MapReduce code that is compiled and checked for validity, 
a distcp across two different versions of Hadoop, or anything else. This 
proposal will provide more examples of contexts and jobs in its later sections.

h1. System Testing vs. Unit Testing

One might wonder how Circus is different from a unit testing framework such as 
JUnit.  A unit testing framework is meant to run short-lived tests, one after 
another. Unit tests, by definition, are meant to test small, independent pieces 
of a larger entity.  A system test, in general, is larger than a unit test, in 
that a system test might run for several hours, analyze logs, run on a large 
cluster of machines, or test the runtime and performance of a job. We will see 
more use cases later.

h1. Motivation and Use Cases

# Hadoop users want to know if their MapReduce jobs are compatible with new 
Hadoop releases.  They should have a tool that lets them easily spin up a 
cluster running a particular version of Hadoop and compile and run MapReduce 
jobs on that cluster.  Ideally users will put their MR jobs in Circus and put 
Circus in their QA pipeline.  Then, when considering an upgrade, they can make 
minimal changes to test those same jobs in a newer release of Hadoop.
# Hadoop users want to know how their MapReduce jobs will perform in a new 
Hadoop release.
# Hadoop QA engineers want to run complicated tests such as HDFS upgrades, 
distcp jobs between two different versions of HDFS, etc.  Testers want these 
tests to all be part of the same framework so a suite of regression tests can 
be run with a single command.
# Hadoop QA engineers want to continually be running Hadoop jobs to ensure API 
compatibility between versions.  Circus could power a community-driven website, 
where community members upload Hadoop jobs and sample data that help generate 
reports on backwards compatibility, both at the API level and at the runtime 
level.

h1. Expected Usage

I imagine that large users of Hadoop can port their MapReduce jobs to work in 
this framework, and add Circus to their QA pipeline.  They might also configure 
the local context to work with their dev cluster.  I imagine Hadoop QA 
engineers can use Circus to test some of the tricky use cases of Hadoop, such 
as cross-version distcp jobs, HDFS upgrades, or anything else.  Testing these 
use cases will require that the QA engineer write contexts and tests.

h1. Implementation Details

Please see the source code.  A README file exists that explains interfaces and 
other implementation details.

h1. Open Issues and Questions

# Can this framework be useful to Hadoop developers?  And if so, how?
## Should Circus provide hooks for inducing failure in a Hadoop cluster?
## Might a trunk context be useful so developers can spin up a cluster very 
quickly from their local SVN checkout?
## Can the local context allow the user to specify a core jar to be used, 
instead of a release?
# What other canned contexts would be useful besides the local context?  
Probably an EC2 context.
# How can this framework cater to performance testing?  Is just providing time 
information sufficient?
# Should tests specify the contexts they are supposed to run in?  Seems like 
tests should at least have the option to.  This will be particularly 
interesting for tests that need to run on two Hadoop clusters.
# Should the environment variables specified by a context be validated?  That 
is, should the interface for contexts be more rigid?
# Should Circus provide a facility for analyzing the Hadoop logs generated 
during the run of a test?

> Circus: Proposal and Preliminary Code for a Hadoop System Testing Framework
> ---------------------------------------------------------------------------
>
>                 Key: HADOOP-6248
>                 URL: https://issues.apache.org/jira/browse/HADOOP-6248
>             Project: Hadoop Common
>          Issue Type: New Feature
>          Components: test
>         Environment: Python, bash
>            Reporter: Alex Loddengaard
>
> This issue contains a proposal and preliminary source code for Circus, a 
> Hadoop system testing framework.  At a high level, Circus will help Hadoop 
> users and QA engineers to run system tests on a configurable Hadoop cluster, 
> or distribution of Hadoop.  See the comment below for the proposal itself.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to