2011-11-29 13 views

risposta

6

Date un'occhiata al barattolo Hadoop-test

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-test</artifactId> 
    <version>0.20.205.0</version> 
</dependency> 

si è classificato per la creazione di un MiniDFSCluster e MiniMRCluster modo da poter testare senza Hadoop

0

Quello che ho fatto (fino a quando non troverò una soluzione migliore) ho esteso il FileSystem.

5

Perché non utilizzare una struttura di simulazione come Mockito o PowerMock per prendere in giro le tue interazioni con FileSystem? I test dell'unità non devono dipendere da un FileSystem effettivo, ma devono semplicemente verificare il comportamento nel codice nell'interazione con FileSystem.

10

Se si sta utilizzando Hadoop 2.0.0 e sopra - considerare l'utilizzo di un Hadoop-minicluster

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-minicluster</artifactId> 
    <version>2.5.0</version> 
    <scope>test</scope> 
</dependency> 

Con esso, è possibile creare una HDFS temporanei sul computer locale, ed eseguire i test su di esso. Un metodo di impostazione può apparire come segue:

baseDir = Files.createTempDirectory("test_hdfs").toFile().getAbsoluteFile(); 
Configuration conf = new Configuration(); 
conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, baseDir.getAbsolutePath()); 
MiniDFSCluster.Builder builder = new MiniDFSCluster.Builder(conf); 
hdfsCluster = builder.build(); 

String hdfsURI = "hdfs://localhost:"+ hdfsCluster.getNameNodePort() + "/"; 
DistributedFileSystem fileSystem = hdfsCluster.getFileSystem(); 

E in un metodo tearDown si dovrebbe spegnere il mini gruppo HDFS, e rimuovere directory temporanea.

hdfsCluster.shutdown(); 
FileUtil.fullyDelete(baseDir); 
0

Si potrebbe voler dare un'occhiata a RawLocalFileSystem. Anche se penso che faresti meglio a deriderlo.

0

È possibile utilizzare HBaseTestingUtility:

public class SomeTest { 
    private HBaseTestingUtility testingUtil = new HBaseTestingUtility(); 

    @Before 
    public void setup() throws Exception { 
     testingUtil.startMiniDFSCluster(1); 
    } 

    @After 
    public void tearDown() throws IOException { 
     testingUtil.shutdownMiniDFSCluster(); 
    } 

    @Test 
    public void test() throws Exception { 
     DistributedFileSystem fs = testingUtil.getDFSCluster().getFileSystem(); 
     final Path dstPath = new Path("/your/path/file.txt); 
     final Path srcPath = new Path(SomeTest.class.getResource("file.txt").toURI()); 
     fs.copyFromLocalFile(srcPath, dstPath); 
     ... 
    } 
}