我试图通过流在Hadoop上运行一个简单的python mapreduce脚本。映射器部分加载一个json文档,从属性中读取文本,并以1发出文本中的每个单词,稍后由脚本的reducer部分进行汇总。该代码在Hadoop外部运行良好。提交到Hadoop后,该映射将失败,并显示“ValueError:无法解码Json对象”。错误线是带有“json.loads()”函数的那一行。我对此深感困惑。我正在尝试运行的Hadoop生态系统是板载Python 2.6.6的HortonWorks沙箱。还有其他人遇到类似的问题吗?

最佳答案

好吧,经过反复摆弄脚本后,我发现执行以下操作时问题消失了:

  • 在映射器和化简器文件的顶部使用#!/usr/bin/env python2。该shebang特别指定了要用于执行的Python运行时版本2.X。
  • 在发出Hadoop流命令时使用以下表示法:
    hadoop jar hadoop-streaming.jar -files mapper.py,reducer.py -mapper 'python mapper.py' -reducer 'python reducer.py' -input <hdfs path to input file(s)> -output <hdfs path to output directory>

  • 应用这些修改后,问题不再出现。去搞清楚!

    关于python - 通过Hadoop Streaming运行Python MapReduce脚本时获取 “ValueError: No Json object could be decoded”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33525524/

    10-12 16:43
    查看更多