我试图在amazon弹性mapreduce系统中运行hadoop程序。我的程序从本地文件系统获取一个输入文件,其中包含程序运行所需的参数。但是,由于文件通常是从本地文件系统读取的,因此 FileInputStream
任务在aws环境中执行时失败,错误为未找到参数文件。注意,我已经把这个文件上传到amazons3了。我怎样才能解决这个问题?谢谢。下面是我用来读取参数表文件并读取文件中参数的代码。
FileInputStream fstream = new FileInputStream(path);
FileInputStream os = new FileInputStream(fstream);
DataInputStream datain = new DataInputStream(os);
BufferedReader br = new BufferedReader(new InputStreamReader(datain));
String[] args = new String[7];
int i = 0;
String strLine;
while ((strLine = br.readLine()) != null) {
args[i++] = strLine;
}
3条答案
按热度按时间30byixjq1#
如果必须从本地文件系统读取文件,可以将emr作业配置为使用boostrap操作运行。在该操作中,只需使用s3cmd或类似命令将文件从s3复制到本地文件。
您还可以通过hadoop文件系统类来读取文件,因为我非常确定emr支持这样的直接访问。例如:
xeufq47z2#
我还没有尝试amazonelastic,但是它看起来像一个典型的分布式缓存应用程序。您可以使用添加文件缓存
-files
选项(如果您实施Tool
/ToolRunner
)或者job.addCacheFile(URI uri)
方法,并像它在本地存在一样访问它。0ejtzxu13#
您可以将此文件添加到分布式缓存,如下所示:
稍后,在mapper/reducer的configure()中,可以执行以下操作: