Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行MapReduce时如何读取同一项目中的文件_Java_Hadoop_Mapreduce - Fatal编程技术网

Java 执行MapReduce时如何读取同一项目中的文件

Java 执行MapReduce时如何读取同一项目中的文件,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我需要使用MapReduce从ORC文件中读取一些内容,但同时,我希望当我的程序启动时,它能够自动加载一个位于我的MapReduce程序的同一jar包中的文件 我的目录树文件夹如下所示: MRProj/ ├── bin │   ├── com │   │   ├── folder ├── **FILE_I_WANT_TO_READIN.dat** ├── lib │   ├── jar01 │   ├── jar02 │   ├── .... └── src ├── com │ 

我需要使用MapReduce从ORC文件中读取一些内容,但同时,我希望当我的程序启动时,它能够自动加载一个位于我的MapReduce程序的同一jar包中的文件

我的目录树文件夹如下所示:

MRProj/
├── bin
│   ├── com
│   │   ├── folder
├── **FILE_I_WANT_TO_READIN.dat**
├── lib
│   ├── jar01
│   ├── jar02
│   ├── ....
└── src
    ├── com
    │   ├── **MY_MAPREDUCE_FOLDER**
            ├── **MR.java**
public static HashMap<String, String> ReadBinaryFile(String inputDir) {

    HashMap<String, String> opt = new HashMap<String, String>();
    String k = "";
    try {
        DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(new File(inputDir))));
        while (dis.available() > 0) {
            k = dis.readUTF();
            ... other codes ...
        }
        dis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return opt;
}
在HDFS上读取ORC文件对我来说没有问题,但在运行MapReduce时,我的程序似乎找不到我的文件:“file_I_WANT_to_READIN.dat”

读取此文件的代码如下所示:

MRProj/
├── bin
│   ├── com
│   │   ├── folder
├── **FILE_I_WANT_TO_READIN.dat**
├── lib
│   ├── jar01
│   ├── jar02
│   ├── ....
└── src
    ├── com
    │   ├── **MY_MAPREDUCE_FOLDER**
            ├── **MR.java**
public static HashMap<String, String> ReadBinaryFile(String inputDir) {

    HashMap<String, String> opt = new HashMap<String, String>();
    String k = "";
    try {
        DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(new File(inputDir))));
        while (dis.available() > 0) {
            k = dis.readUTF();
            ... other codes ...
        }
        dis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return opt;
}
publicstatichashmap ReadBinaryFile(stringinputdir){
HashMap opt=新的HashMap();
字符串k=“”;
试一试{
DataInputStream dis=新DataInputStream(新BufferedInputStream(新文件InputStream(新文件inputDir)));
而(dis.available()>0){
k=dis.readUTF();
…其他代码。。。
}
dis.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回opt;
}

文件需要驻留在HDFS上-这是因为映射器+还原器将在本地没有文件的节点上运行。有关将文件加载到每个Mapper/Reducer中内存的解决方案,请参阅。该文件需要驻留在HDFS上-这是因为Mapper+Reducer将在本地没有文件的节点上运行。有关将文件加载到每个Mapper/Reducer内存中的解决方案,请参阅。