Файл кэша Hadoop для всех задач карты - PullRequest
4 голосов
/ 14 февраля 2012

Моя функция карты должна читать файл для каждого ввода. Этот файл не меняется вообще, он только для чтения. Я думаю, что распределенный кеш может мне сильно помочь, но я не могу найти способ его использовать. Публичная функция void configure (JobConf conf), которую мне нужно переопределить, я считаю устаревшей. Ну, JobConf устарела наверняка. Все учебники по DistributedCache используют устаревший способ. Что я могу сделать? Есть ли другая функция настройки, которую я могу переопределить?

Это самые первые строки моей функции карты:

     Configuration conf = new Configuration();          //load the MFile
     FileSystem fs = FileSystem.get(conf);
     Path inFile = new Path("planet/MFile");       
     FSDataInputStream in = fs.open(inFile);
     DecisionTree dtree=new DecisionTree().loadTree(in);

Я хочу кэшировать этот MFile, чтобы моей функции карты не приходилось просматривать ее снова и снова

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

Ну, я сделал это, я думаю.Я следовал советам Рави Бхатта и написал:

  @Override
  protected void setup(Context context) throws IOException, InterruptedException
  {      
      FileSystem fs = FileSystem.get(context.getConfiguration());
      URI files[]=DistributedCache.getCacheFiles(context.getConfiguration());
      Path path = new Path(files[0].toString());
      in = fs.open(path);
      dtree=new DecisionTree().loadTree(in);                 
  } 

Внутри моего основного метода я делаю это, чтобы добавить его в кеш:

  DistributedCache.addCacheFile(new URI(args[0]+"/"+"MFile"), conf);
  Job job = new Job(conf, "MR phase one");

Я могу получить файлМне нужно с этим способом, но пока не могу сказать, работает ли он на 100%.Есть ли способ проверить это?Спасибо.

1 голос
/ 14 февраля 2012

Jobconf устарела в 0.20. x, но в 1.0.0 это не так!:-) (на момент написания этой статьи)

К вашему вопросу, есть два способа запустить задания сокращения карт в Java, один из них - использование (extending) классов в пакете org.apache.hadoop.mapreduce, а другой -implementing классов в пакете org.apache.hadoop.mapred (или наоборот).

Не уверен, какой из них вы используете, если у вас нет метода configure для переопределения, вы получите метод setup для переопределения.

@Override
protected void setup(Context context) throws IOException, InterruptedException

Это похоже на настройку и должно помочь вам.

Вы получаете setup метод для override, когда вы extend Mapper class в org.apache.hadoop.mapreduce пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...