Повторное задание MapReduce имеет ошибку NumberFormatException - PullRequest
0 голосов
/ 25 сентября 2018

Моя программа выполняет несколько заданий уменьшения карты, по одному на каждую строку параметров в файле параметров, который я передаю ему.

Основная функция выглядит следующим образом:

public static void main(String[] args) throws Exception {
        // Create configuration
        Configuration conf = new Configuration();

        if (args.length != 3) 
        {
            System.err.println("Usage: KnnPattern <in> <out> <parameter file>");
            System.exit(2);
        }

        //Reading argument using Hadoop API now
        conf.set ("params", (args[2]));
        String param = conf.get("params");
        StringTokenizer inputLine = new StringTokenizer(param, "|");

        int n = 1;
        while(inputLine.hasMoreTokens())
        {

            conf.set("passedVal", inputLine.nextToken());

            //Job Configuration here

            ++n;
        }}

Основная функция читает 3-й аргумент, т. Е. Файл параметров, хранящийся в HDFS, и передает 1 строку параметров для каждого выполняемого задания MapReduce.Или, по крайней мере, я этого хотел.Я не уверен на 100%, если это полностью правильно.

Настройка для моего Mapper выглядит примерно так:

        protected void setup(Context context) throws IOException, InterruptedException
    {
            // Read parameter file using alias established in main()
            Configuration conf = context.getConfiguration();
            String knnParams = conf.get("passedVal");

            StringTokenizer st = new StringTokenizer(knnParams, ",");

            // Using the variables declared earlier, values are assigned to K and to the test dataset, S.
            // These values will remain unchanged throughout the mapper
            K = Integer.parseInt(st.nextToken());
            normalisedSAge = normalisedDouble(st.nextToken(), minAge, maxAge);
            normalisedSIncome = normalisedDouble(st.nextToken(), minIncome, maxIncome);
            sStatus = st.nextToken();
            sGender = st.nextToken();
            normalisedSChildren = normalisedDouble(st.nextToken(), minChildren, maxChildren);

    }

Мой файл параметров содержит это:

67, 16668, одиночный, мужской, 3 | 40, 25000, одиночный, мужской, 2 | 67, 16668, одиночный, мужской, 3

То есть 3 набора входов, разделенных '| '.

Ошибка времени выполнения, которую я получаю, такова:

Ошибка: java.lang.NumberFormatException: Для входной строки: "/KNN/PARAMS/paramFinal.txt"в java.lang.NumberFormatException.forInputString (NumberFormatException.java:65) в java.lang.Integer.parseInt (Integer.java:569) в java.lang.Integer.parseInt (Integer.java:615) в KnnPattern $ KnnMapper.настройка (KnnPattern.java:168) в org.apache.hadoop.mapreduce.Mapper.run (Mapper.java:143) в org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java:787) в org.apache.hadoop.mapred.MapTask.run (MapTask.java:341) в org.apache.hadoop.mapred.YarnChild $ 2.run (YarnChild.java:164) в java.security.AccessController.doPrivileged (собственный метод) в javax.security.auth.Subject.doAs (Subject.java:422) в org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1762) в org.apache.hadoop.mapred.YarnChild.main (YarnChild.java:158)

Контейнер убит ApplicationMaster.Контейнер убит по запросу.Код выхода - 143 Контейнер завершен с ненулевым кодом выхода 143

Насколько я могу судить, это похоже на ошибку при типизации (?), И я не уверен, как и почему это происходит.

Этот код был в основном тем, что я получил отсюда - https://github.com/matt-hicks/MapReduce-KNN/blob/master/KnnPattern.java

Он отлично работает для одного набора параметров, но мне нужно, чтобы он работал для нескольких параметров или тестовых случаев одновременно длядальнейшее применение.

Любой способ исправить это или хотя бы любую идею, почему именно я получаю эту ошибку?Любая помощь очень ценится.Спасибо.

1 Ответ

0 голосов
/ 02 октября 2018

Я понял, почему я получаю NumberFormatException.

Проблема заключалась в том, что я прочитал 3-ий аргумент (args [2]) как строку вместо расположения файла в HDFS, поэтому в журнале ошибок написано:

Для входной строки: "/ KNN / PARAMS / paramFinal.txt"

Что я сейчас делаю в целях тестирования, так это то, что вместо указания местоположения файла я непосредственно передаю входной текст в качестве 3-го аргумента,Это помогло мне избавиться от этой конкретной ошибки.

$ hadoop jar poker00.jar KnnPokerhand /Poker/train.txt /PokerOutputs/Output00 1,1,1,13,2,4,2,3,1,12,0/3,12,3,2,3,11,4,5,2,5,1/1,9,4,6,1,4,3,2,3,9,1

Надеюсь, это поможет всем, у кого эта проблема возникнет в будущем.Приветствия.

...