Java 执行MapReduce时如何读取同一项目中的文件
我需要使用MapReduce从ORC文件中读取一些内容,但同时,我希望当我的程序启动时,它能够自动加载一个位于我的MapReduce程序的同一jar包中的文件 我的目录树文件夹如下所示: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 │
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内存中的解决方案,请参阅。