本文介绍如何使用MapReduce读写JindoFS上的数据。

JindoFS配置

以EMR-3.35版本为例,创建名为emr-jfs的命名空间,相关配置参数示例如下:
  • jfs.namespaces=emr-jfs
  • jfs.namespaces.emr-jfs.oss.uri=oss://oss-bucket/oss-dir
  • jfs.namespaces.emr-jfs.mode=block

MapReduce简介

Hadoop MapReduce作业通常是通过HDFS进行读写,JindoFS目前已兼容大部分HDFS接口,只需要将MapReduce作业的输入、输出目录配置到JindoFS,即可实现读写JindoFS上的文件 。

Hadoop MapReduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。一个MapReduce作业通常会把输入的数据集切分为若干独立的数据块,由Map任务以完全并行的方式处理它们。框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。 整个框架负责任务的调度和监控,以及重新执行已经失败的任务。

作业的输入和输出

MapReduce作业通常会指明输入或输出的位置(路径),并通过实现合适的接口或抽象类提供map和reduce函数。Hadoop的job client再加上其他作业的参数提交给ResourceManager,进行调度执行。这种情况下,我们直接修改作业的输入和输出目录即可实现JindoFS的读写。

MapReduce on JindoFS样例

以下是MapReduce作业通过修改输入输出实现JindoFS的读写的例子。

  • Teragen数据生成样例
    Teragen是Example中生成随机数据演示程序,在指定目录上生成指定行数的数据,具体命令如下:
    hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen <num rows> <output dir>
    替换输出路径,可以把数据输出到JindoFS上:
    hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen 100000 jfs://emr-jfs/teragen_data_0
  • Terasort数据生成样例
    Terasort是Example中数据排序演示样例,有输入和输出目录,具体命令如下:
    hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar terasort <in> <out>
    替换输入和输出路径,即可处理JindoFS上的数据:
    hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar terasort jfs://emr-jfs/teragen_data_0/  jfs://emr-jfs/terasort_data_0