|
@@ -24,6 +24,7 @@ import java.io.DataInputStream;
|
|
import java.io.DataOutputStream;
|
|
import java.io.DataOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStream;
|
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
@@ -36,6 +37,8 @@ import java.util.concurrent.ThreadFactory;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
|
|
+import javax.crypto.KeyGenerator;
|
|
|
|
+
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.apache.hadoop.classification.InterfaceAudience;
|
|
import org.apache.hadoop.classification.InterfaceAudience;
|
|
@@ -47,13 +50,16 @@ import org.apache.hadoop.io.Text;
|
|
import org.apache.hadoop.ipc.ProtocolSignature;
|
|
import org.apache.hadoop.ipc.ProtocolSignature;
|
|
import org.apache.hadoop.mapreduce.Cluster.JobTrackerStatus;
|
|
import org.apache.hadoop.mapreduce.Cluster.JobTrackerStatus;
|
|
import org.apache.hadoop.mapreduce.ClusterMetrics;
|
|
import org.apache.hadoop.mapreduce.ClusterMetrics;
|
|
|
|
+import org.apache.hadoop.mapreduce.CryptoUtils;
|
|
import org.apache.hadoop.mapreduce.MRConfig;
|
|
import org.apache.hadoop.mapreduce.MRConfig;
|
|
|
|
+import org.apache.hadoop.mapreduce.MRJobConfig;
|
|
import org.apache.hadoop.mapreduce.OutputFormat;
|
|
import org.apache.hadoop.mapreduce.OutputFormat;
|
|
import org.apache.hadoop.mapreduce.QueueInfo;
|
|
import org.apache.hadoop.mapreduce.QueueInfo;
|
|
import org.apache.hadoop.mapreduce.TaskCompletionEvent;
|
|
import org.apache.hadoop.mapreduce.TaskCompletionEvent;
|
|
import org.apache.hadoop.mapreduce.TaskTrackerInfo;
|
|
import org.apache.hadoop.mapreduce.TaskTrackerInfo;
|
|
import org.apache.hadoop.mapreduce.TaskType;
|
|
import org.apache.hadoop.mapreduce.TaskType;
|
|
import org.apache.hadoop.mapreduce.protocol.ClientProtocol;
|
|
import org.apache.hadoop.mapreduce.protocol.ClientProtocol;
|
|
|
|
+import org.apache.hadoop.mapreduce.security.TokenCache;
|
|
import org.apache.hadoop.mapreduce.security.token.delegation.DelegationTokenIdentifier;
|
|
import org.apache.hadoop.mapreduce.security.token.delegation.DelegationTokenIdentifier;
|
|
import org.apache.hadoop.mapreduce.server.jobtracker.JTConfig;
|
|
import org.apache.hadoop.mapreduce.server.jobtracker.JTConfig;
|
|
import org.apache.hadoop.mapreduce.split.JobSplit.TaskSplitMetaInfo;
|
|
import org.apache.hadoop.mapreduce.split.JobSplit.TaskSplitMetaInfo;
|
|
@@ -83,6 +89,8 @@ public class LocalJobRunner implements ClientProtocol {
|
|
public static final String LOCAL_MAX_REDUCES =
|
|
public static final String LOCAL_MAX_REDUCES =
|
|
"mapreduce.local.reduce.tasks.maximum";
|
|
"mapreduce.local.reduce.tasks.maximum";
|
|
|
|
|
|
|
|
+ public static final String INTERMEDIATE_DATA_ENCRYPTION_ALGO = "HmacSHA1";
|
|
|
|
+
|
|
private FileSystem fs;
|
|
private FileSystem fs;
|
|
private HashMap<JobID, Job> jobs = new HashMap<JobID, Job>();
|
|
private HashMap<JobID, Job> jobs = new HashMap<JobID, Job>();
|
|
private JobConf conf;
|
|
private JobConf conf;
|
|
@@ -187,6 +195,25 @@ public class LocalJobRunner implements ClientProtocol {
|
|
|
|
|
|
jobs.put(id, this);
|
|
jobs.put(id, this);
|
|
|
|
|
|
|
|
+ if (CryptoUtils.isEncryptedSpillEnabled(job)) {
|
|
|
|
+ try {
|
|
|
|
+ int keyLen = conf.getInt(
|
|
|
|
+ MRJobConfig.MR_ENCRYPTED_INTERMEDIATE_DATA_KEY_SIZE_BITS,
|
|
|
|
+ MRJobConfig
|
|
|
|
+ .DEFAULT_MR_ENCRYPTED_INTERMEDIATE_DATA_KEY_SIZE_BITS);
|
|
|
|
+ KeyGenerator keyGen =
|
|
|
|
+ KeyGenerator.getInstance(INTERMEDIATE_DATA_ENCRYPTION_ALGO);
|
|
|
|
+ keyGen.init(keyLen);
|
|
|
|
+ Credentials creds =
|
|
|
|
+ UserGroupInformation.getCurrentUser().getCredentials();
|
|
|
|
+ TokenCache.setEncryptedSpillKey(keyGen.generateKey().getEncoded(),
|
|
|
|
+ creds);
|
|
|
|
+ UserGroupInformation.getCurrentUser().addCredentials(creds);
|
|
|
|
+ } catch (NoSuchAlgorithmException e) {
|
|
|
|
+ throw new IOException("Error generating encrypted spill key", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
this.start();
|
|
this.start();
|
|
}
|
|
}
|
|
|
|
|