ACCUMULO-2379 Document running functional tests under MR as a different user
Functional tests might not run under MapReduce in clusters where a different user from the Accumulo user runs mappers. Needed configuration changes are now documented in the functional test README. Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/ac18b569 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/ac18b569 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/ac18b569 Branch: refs/heads/1.6.0-SNAPSHOT Commit: ac18b569738b6dd8f950ee5d747af5176bbc8d13 Parents: 3898317 Author: Bill Havanki <bhava...@cloudera.com> Authored: Wed Feb 19 11:05:12 2014 -0500 Committer: Bill Havanki <bhava...@cloudera.com> Committed: Wed Feb 19 11:05:12 2014 -0500 ---------------------------------------------------------------------- test/system/auto/README | 94 ++++++++++++++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/ac18b569/test/system/auto/README ---------------------------------------------------------------------- diff --git a/test/system/auto/README b/test/system/auto/README index 4773393..45ed158 100644 --- a/test/system/auto/README +++ b/test/system/auto/README @@ -1,58 +1,94 @@ Apache Accumulo Functional Tests -These scripts run a series of tests against a small local accumulo instance. To run these scripts, -you must have hadoop and zookeeper installed and running. You will need a functioning C compiler to build -a shared library needed for one of the tests. The test suite is known to run on Linux RedHat Enterprise +These scripts run a series of tests against a small local accumulo instance. +To run these scripts, you must have Hadoop and Zookeeper installed and running. +You will need a functioning C compiler to build a shared library needed for +one of the tests. The test suite is known to run on Linux RedHat Enterprise version 5, and Mac OS X 10.5. -The tests are shown as being run from the ACCUMULO_HOME directory, but they should run from any directory. -Make sure to create "logs" and "walogs" directories in ACCUMULO_HOME. Also, ensure that accumulo-env.sh -specifies its ACCUMULO_LOG_DIR in the following way: +How to Run + +The tests are shown as being run from the ACCUMULO_HOME directory, but they +should run from any directory. Make sure to create "logs" and "walogs" +directories in ACCUMULO_HOME. Also, ensure that accumulo-env.sh specifies its +ACCUMULO_LOG_DIR in the following way: + test -z "$ACCUMULO_LOG_DIR" && export ACCUMULO_LOG_DIR=$ACCUMULO_HOME/logs $ ./test/system/auto/run.py -l - -Will list all the test names. You can run the suite like this: - + +will list all the test names. You can run the suite like this: + $ ./test/system/auto/run.py - + You can select tests using a case-insensitive regular expression: - + $ ./test/system/auto/run.py -t simple $ ./test/system/auto/run.py -t SunnyDay - + To run tests repeatedly: $ ./test/system/auto/run.py -r 3 -If you are attempting to debug what is causing a test to fail, you can run the tests in "verbose" mode: +If you are attempting to debug what is causing a test to fail, you can run the +tests in "verbose" mode: $ python test/system/auto/run.py -t SunnyDay -v 10 - -If a test is failing, and you would like to examine logs from the run, you can run the test in "dirty" -mode which will keep the test from cleaning up all the logs at the end of the run: - + +If a test is failing, and you would like to examine logs from the run, you can +run the test in "dirty" mode which will keep the test from cleaning up all the +logs at the end of the run: + $ ./test/system/auto/run.py -t some.failing.test -d - -If the test suite hangs, and you would like to re-run the tests starting with the last test that failed: - + +If the test suite hangs, and you would like to re-run the tests starting with +the last test that failed: + $ ./test/system/auto/run.py -s start.over.test - -If tests tend to time out (on slower hardware, for example), you can scale up the timeout values by a -multiplier. This example triples timeouts: + +If tests tend to time out (on slower hardware, for example), you can scale up +the timeout values by a multiplier. This example triples timeouts: $ ./test/system/auto/run.py -f 3 -Test results are normally printed to the console, but you can send them to XML files compatible with -Jenkins: +Test results are normally printed to the console, but you can send them to XML +files compatible with Jenkins: $ ./test/system/auto/run.py -x -The full test suite can take nearly an hour. If you have a larger hadoop cluster at your disposal, you can -run the tests as a map-reduce job: +Running under MapReduce + +The full test suite can take nearly an hour. If you have a larger Hadoop +cluster at your disposal, you can run the tests as a MapReduce job: $ python test/system/auto/run.py -l > tests $ hadoop fs -put tests /user/hadoop/tests - $ ./bin/accumulo org.apache.accumulo.server.test.functional.RunTests /user/hadoop/tests /user/hadoop/results + $ ./bin/accumulo org.apache.accumulo.server.test.functional.RunTests \ + /user/hadoop/tests /user/hadoop/results + +The example above runs every test. You can trim the tests file to include +only the tests you wish to run. + +In some clusters, the user under which MR jobs run is different from the user +under which Accumulo is installed, and this can cause failures running the +tests. Various configuration and permission changes can be made to help the +tests run, including the following: + +* Opening up directory and file permissions on each cluster node so that the MR + user has the same read/write privileges as the Accumulo user. Adding the MR + user to a shared group is one easy way to accomplish this. Access is required + to the Accumulo installation, log, write-ahead log, and configuration + directories. +* Creating a user directory in HDFS, named after and owned by the MR user, + e.g., /user/mruser. +* Setting the ZOOKEEPER_HOME and HADOOP_CONF_DIR environment variables for the + MR user. These can be set using the mapred.child.env property in + mapred-site.xml, e.g.: + + <property> + <name>mapred.child.env</name> + <value>ZOOKEEPER_HOME=/path/to/zookeeper,HADOOP_CONF_DIR=/path/to/hadoop/conf</value> + </property> - +Each functional test is run by a mapper, and so you can check the mapper logs +to see any error messages tests produce.