/******************************************************************************* * * Pentaho Big Data * * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.hadoop.shim.mapr510; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.filecache.DistributedCache; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.pentaho.hadoop.shim.HadoopConfiguration; import org.pentaho.hadoop.shim.common.DistributedCacheUtilImpl; public class MapR5DistributedCacheUtilImpl extends DistributedCacheUtilImpl { public MapR5DistributedCacheUtilImpl( HadoopConfiguration configuration ) { super( configuration ); } /** * Add an file path to the current set of classpath entries. It adds the file to cache as well. * <p/> * This is copied from Hadoop 0.20.2 o.a.h.filecache.DistributedCache so we can inject the correct path separator for * the environment the cluster is executing in. See {@link #getClusterPathSeparator()}. * * @param file Path of the file to be added * @param conf Configuration that contains the classpath setting */ @Override public void addFileToClassPath( Path file, Configuration conf ) throws IOException { String classpath = conf.get( "mapred.job.classpath.files" ); conf.set( "mapred.job.classpath.files", classpath == null ? file.toString() : classpath + getClusterPathSeparator() + file.toString() ); FileSystem fs = FileSystem.get( conf ); URI uri = fs.makeQualified( file ).toUri(); DistributedCache.addCacheFile( uri, conf ); } public String getClusterPathSeparator() { // Use a comma rather than an OS-specific separator (see https://issues.apache.org/jira/browse/HADOOP-4864) return System.getProperty( "hadoop.cluster.path.separator", "," ); } }