hadoop的MR当用MultipleInputs时要获取文件路径方法

本文详细介绍了如何在Hadoop MR的MultipleInputs模式下,通过反射技术获取文件路径,解决了一个常见的ClassCastException问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hadoop的MR当用MultipleInputs时,要获取文件路径的话比较麻烦,需要如下代码

protected void setup(Context context) throws IOException,
        InterruptedException {
    InputSplit split = context.getInputSplit();
    Class<? extends InputSplit> splitClass = split.getClass();

    FileSplit fileSplit = null;
    if (splitClass.equals(FileSplit.class)) {
        fileSplit = (FileSplit) split;
    } else if (splitClass.getName().equals(
            "org.apache.hadoop.mapreduce.lib.input.TaggedInputSplit")) {
        // begin reflection hackery...

        try {
            Method getInputSplitMethod = splitClass
                    .getDeclaredMethod("getInputSplit");
            getInputSplitMethod.setAccessible(true);
            fileSplit = (FileSplit) getInputSplitMethod.invoke(split);
        } catch (Exception e) {
            // wrap and re-throw error
            throw new IOException(e);
        }

        // end reflection hackery
    }
}
参考链接: http://stackoverflow.com/questions/11130145/hadoop-multipleinputs-fails-with-classcastexception

1.启动全分布模式Hadoop集群,守护进程包括NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager和JobHistoryServer。 在Hadoop集群主节点上搭建MapReduce开发环境Eclipse。 查看Hadoop自带的MR-App单词计数源代码WordCount.java,在Eclipse项目MapReduceExample下建立新包com.mapreduce,模仿内置的WordCount示例,自己编写一个WordCount程序,最后打包成JAR形式并在Hadoop集群上运行该MR-App,查看运行结果。 分别在自编MapReduce程序WordCount运行过程中和运行结束后查看MapReduce Web界面。 2. 有如下股票买卖文件,计算股票的资本损益,统计买卖的每个股票收益。(提示:将每个股票的名称作为key值,当操作为Buy,value记为负的价格,当操作为Sell,value记为正的价格,以这个key和value作为map阶段输出,reduce阶段的输入)。实验要求如下: (1)编写MapReduce代码 (2)编译并打包项目 (3)使用hadoop jar命令运行程序 (4)到控制台查看输出文件结果。 文件内容: Leetcode Buy 1000 Corona Buy 10 Leetcode Sell 9000 Handbags Buy 30000 Corona Sell 1010 Corona Buy 1000 Corona Sell 500 Corona Buy 1000 Handbags Sell 7000 Corona Sell 10000 输出结果是: Corona 9500 Handbags -23000 Leetcode 8000 3. 编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文件的一个样例供参考。 输入文件A的样例如下: 20170101 x 20170102 y 20170103 x 20170104 y 20170105 z 20170106 x 输入文件B的样例如下: 20170101 y 20170102 y 20170103 x 20170104 z 20170105 y 根据输入文件A和B合并得到的输出文件C的样例如下: 20170101 x 20170101 y 20170102 y 20170103 x 20170104 y 20170104 z 20170105 y 20170105 z 三、实验过程与结论 记录每一步操作,要求贴出实验结果的截图。 给出我具体的操作示例,详细以及验证
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值