在hadoop中使用distributedcache时发生分布式缓存获取异常

baubqpgj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(281)

我在主类中使用了下面提到的分布式缓存代码。

job.addCacheFile(new URI(args[2]));

下面提到的代码在reduce类中。

@Override
        protected void setup(Reducer<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException {
            super.setup(context);
            URI[] paths = context.getCacheFiles();
            if (paths.length > 0) {
                loadDeliveryStatusCodes(paths[0].toString());
            }
        }
        private void loadDeliveryStatusCodes(String file) {
            String strRead;
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new FileReader("./some"));
                while ((strRead = reader.readLine()) != null) {
                    String splitarray[] = strRead.split(",");
                    deliveryCodesMap.put(splitarray[0].trim(), splitarray[1].trim());
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

我得到下面提到的例外。

@@@@@@@@/user/DeliveryStatusCodes.txt 1
java.io.FileNotFoundException: ./some (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at java.io.FileReader.<init>(FileReader.java:58)
    at com.hadoop.intellipaat.UserSMSDeliveryJob$USERNameSMSStatusCodeMapper.loadDeliveryStatusCodes(UserSMSDeliveryJob.java:95)

你的帮助将拯救我的一天。谢谢。

qaxu7uf2

qaxu7uf21#

看来你错过了 #some 从你生命的尽头 args[2] .目前你有 /user/DeliveryStatusCodes.txt ,但你应该

/user/DeliveryStatusCodes.txt#some

没有它, FileReader 实际上是在寻找 ./some 当然,这是不存在的。
或者您可以跳过别名(这是可选的)并写入

new FileReader("/user/DeliveryStatusCodes.txt")

相关问题