Unter der Annahme, auf der Grundlage der OP Reaktion auf die andere Antwort, werden die Metadaten für einen anderen MR Job erforderlich. Distributed Cache in diesem Fall zu verwenden ist ziemlich einfach:
In der Treiberklasse:
public class DriverClass extends Configured{
public static void main(String[] args) throws Exception {
/* ...some init code... */
/*
* Instantiate a Job object for your job's configuration.
*/
Configuration job_conf = new Configuration();
DistributedCache.addCacheFile(new Path("path/to/your/data.txt").toUri(),job_conf);
Job job = new Job(job_conf);
/* ... configure and start the job... */
}
}
In der Mapper-Klasse können Sie die Daten auf der Setup-Phase gelesen und es für die Karte Klasse zur Verfügung stellen:
public class YourMapper extends Mapper<LongWritable, Text, Text, Text>{
private List<String> lines = new ArrayList<String>();
@Override
protected void setup(Context context) throws IOException,
InterruptedException {
/* Get the cached archives/files */
Path[] cached_file = new Path[0];
try {
cached_file = DistributedCache.getLocalCacheFiles(context.getConfiguration());
} catch (IOException e1) {
// TODO add error code
e1.printStackTrace();
}
File f = new File (cached_file[0].toString());
try {
/* Read the data some thing like: */
lines = Files.readLines(f,charset);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
/*
* In the mapper - use the data as needed
*/
}
}
Beachten Sie, dass Cache Distributed kann mehr die reine Textdatei halten. Sie können Archive (zip, tar ..) und sogar eine vollständige Java-Klasse (JAR-Dateien) verwenden.
Beachten Sie auch, dass in neueren Hadoop-Implementierungen die Distributed Cache API in der Job-Klasse selbst gefunden wird. Siehe this API und this answer.
Was meinen Sie durch eine Datenstruktur erstellen? Wenn Sie Abfragen sagen, meinen Sie, dass Sie einen MR-Job für die Abfrage ausführen werden? Bitte erläutern Sie das Szenario. –
wie diese Stellen Sie sich vor, Sie haben B-Baum im Speicher zu Datendateien auf HDFS zu zeigen. Bei Abfragen verweisen Sie auf B-Tree, um auf einige Datendateien zuzugreifen und dann einen MR-Job auszuführen. – AKJ88