java - Hadoop Map任务:读取指定输入文件的内容

标签 java hadoop mapreduce cloudera hadoop-partitioning

我对Hadoop环境非常陌生。最近,我运行了一个基本的mapreduce程序。它很容易运行。

现在,我在输入路径目录中有一个包含以下内容的输入文件

fileName1
fileName2
fileName3
...

我需要逐一读取此文件的各行,并在指定的输出目录中创建一个具有这些名称(即fileName1,fileName2等)的新文件。

我写了下面的 map 实现,但没有成功
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException {

            String fileName = value.toString();
            String path = outputFilePath + File.separator + fileName;
            File newFile = new File(path);

            newFile.mkdirs();
            newFile.createNewFile();
        }

有人可以向我解释我错过了什么吗?

谢谢

最佳答案

我认为您应该开始研究 FileSystem的类,我认为您只能在分布式文件系统中创建文件。这是一个我打开文件进行读取的代码示例,您可能只需要一个FSDataOutputStream。在您的映射器中,您可以从Context类中获取配置。

    Configuration conf = job.getConfiguration();
    Path inFile = new Path(file);
    try {
        FileSystem fs;
        fs = FileSystem.get(conf);

        if (!fs.exists(inFile))
            System.out.println("Unable to open settings file: "+file);

        FSDataInputStream in = fs.open(inFile);
                    ...
    }

关于java - Hadoop Map任务:读取指定输入文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379083/

相关文章:

java - 转换 PGP 公钥

java - ActiveMQ 使用 AMQP、MQTT 或 TCP 哪个更好?

java - 我如何从对象中获取哈希值/md5?

java - 是否可以从 assert 方法引发自定义异常?

java - 如何使用storm将数据持久化到HDFS

java - mapreduce 中 map 任务中的 NullPointer 异常

hadoop - Hive外表数据是不是和内表一样分布到数据节点?

hadoop - hadoop的矩阵向量乘法:不同文件中的向量和矩阵

hadoop - 手动将任务分配给计算机

java - 由于 ConnectException,Hadoop 映射失败