The preferred way of using DistributedCache for YARN/MapReduce 2 is as follows:
In your driver, use the Job.addCacheFile()
public int run(String[] args) throws Exception {
    Configuration conf = getConf();
    Job job = Job.getInstance(conf, "MyJob");
    job.setMapperClass(MyMapper.class);
    // ...
    // Mind the # sign after the absolute file location.
    // You will be using the name after the # sign as your
    // file name in your Mapper/Reducer
    job.addCacheFile(new URI("/user/yourname/cache/some_file.json#some"));
    job.addCacheFile(new URI("/user/yourname/cache/other_file.json#other"));
    return job.waitForCompletion(true) ? 0 : 1;
}
And in your Mapper/Reducer, override the setup(Context context) method:
@Override
protected void setup(
        Mapper<LongWritable, Text, Text, Text>.Context context)
        throws IOException, InterruptedException {
    if (context.getCacheFiles() != null
            && context.getCacheFiles().length > 0) {
        File some_file = new File("./some");
        File other_file = new File("./other");
        // Do things to these two files, like read them
        // or parse as JSON or whatever.
    }
    super.setup(context);
}