in zeppelin-plugins/launcher/docker/src/main/java/org/apache/zeppelin/interpreter/launcher/DockerInterpreterProcess.java [448:556]
private void copyRunFileToContainer(String containerId)
throws IOException, DockerException, InterruptedException {
HashMap<String, String> copyFiles = new HashMap<>();
// Rebuild directory
rmInContainer(containerId, containerZeppelinHome);
mkdirInContainer(containerId, containerZeppelinHome);
// 1) zeppelin-site.xml is uploaded to `${CONTAINER_ZEPPELIN_HOME}` directory in the container
String confPath = "/conf";
String zeplConfPath = getPathByHome(zeppelinHome, confPath);
mkdirInContainer(containerId, containerZeppelinHome);
String containerZeplConfPath = containerZeppelinHome + confPath;
copyFiles.put(
zeplConfPath + "/zeppelin-site.xml", containerZeplConfPath + "/zeppelin-site.xml");
copyFiles.put(zeplConfPath + "/log4j.properties", containerZeplConfPath + "/log4j.properties");
copyFiles.put(zeplConfPath + "/log4j_yarn_cluster.properties",
containerZeplConfPath + "/log4j_yarn_cluster.properties");
// 2) upload krb5.conf to container
String krb5conf = "/etc/krb5.conf";
File krb5File = new File(krb5conf);
if (krb5File.exists()) {
rmInContainer(containerId, krb5conf);
copyFiles.put(krb5conf, krb5conf);
} else {
LOGGER.warn("{} file not found, Did not upload the krb5.conf to the container!", krb5conf);
}
// TODO(Vince): Interpreter specific settings, we should consider general property or some
// other more elegant solution
// 3) Get the keytab file in each interpreter properties
// Upload Keytab file to container, Keep the same directory as local host
// 3.1) shell interpreter properties keytab file
String intpKeytab = properties.getProperty("zeppelin.shell.keytab.location", "");
if (StringUtils.isBlank(intpKeytab)) {
// 3.2) spark interpreter properties keytab file
intpKeytab = properties.getProperty("spark.yarn.keytab", "");
}
if (StringUtils.isBlank(intpKeytab)) {
// 3.3) livy interpreter properties keytab file
intpKeytab = properties.getProperty("zeppelin.livy.keytab", "");
}
if (StringUtils.isBlank(intpKeytab)) {
// 3.4) jdbc interpreter properties keytab file
intpKeytab = properties.getProperty("zeppelin.jdbc.keytab.location", "");
}
if (!StringUtils.isBlank(intpKeytab)) {
LOGGER.info("intpKeytab : {}", intpKeytab);
copyFiles.putIfAbsent(intpKeytab, intpKeytab);
}
// 3.5) zeppelin server keytab file
String zeppelinServerKeytab = zConf.getString(ZEPPELIN_SERVER_KERBEROS_KEYTAB);
if (!StringUtils.isBlank(zeppelinServerKeytab)) {
copyFiles.putIfAbsent(zeppelinServerKeytab, zeppelinServerKeytab);
}
// 4) hadoop conf dir
if (envs.containsKey("HADOOP_CONF_DIR")) {
String hadoopConfDir = envs.get("HADOOP_CONF_DIR");
copyFiles.put(hadoopConfDir, hadoopConfDir);
}
// 5) spark conf dir
if (envs.containsKey("SPARK_CONF_DIR")) {
String sparkConfDir = envs.get("SPARK_CONF_DIR");
rmInContainer(containerId, containerSparkHome + "/conf");
mkdirInContainer(containerId, containerSparkHome + "/conf");
copyFiles.put(sparkConfDir, containerSparkHome + "/conf");
envs.put("SPARK_CONF_DIR", containerSparkHome + "/conf");
}
if (uploadLocalLibToContainter){
// 6) ${ZEPPELIN_HOME}/bin is uploaded to `${CONTAINER_ZEPPELIN_HOME}`
// directory in the container
String binPath = "/bin";
String zeplBinPath = getPathByHome(zeppelinHome, binPath);
String containerZeplBinPath = containerZeppelinHome + binPath;
mkdirInContainer(containerId, containerZeplBinPath);
docker.copyToContainer(new File(zeplBinPath).toPath(), containerId, containerZeplBinPath);
// 7) ${ZEPPELIN_HOME}/interpreter/spark is uploaded to `${CONTAINER_ZEPPELIN_HOME}`
// directory in the container
String intpGrpPath = "/interpreter/" + interpreterGroupName;
String intpGrpAllPath = getPathByHome(zeppelinHome, intpGrpPath);
String containerIntpGrpPath = containerZeppelinHome + intpGrpPath;
mkdirInContainer(containerId, containerIntpGrpPath);
docker.copyToContainer(new File(intpGrpAllPath).toPath(), containerId, containerIntpGrpPath);
// 8) ${ZEPPELIN_HOME}/lib/interpreter/zeppelin-interpreter-shaded-<version>.jar
// is uploaded to `${CONTAINER_ZEPPELIN_HOME}` directory in the container
String intpPath = "/interpreter";
String intpAllPath = getPathByHome(zeppelinHome, intpPath);
String containerIntpAllPath = containerZeppelinHome + intpPath;
Collection<File> listFiles = FileUtils.listFiles(new File(intpAllPath),
FileFilterUtils.suffixFileFilter("jar"), null);
for (File jarfile : listFiles) {
String jarfilePath = jarfile.getAbsolutePath();
String jarfileName = jarfile.getName();
String containerJarfilePath = containerIntpAllPath + "/" + jarfileName;
if (!StringUtils.isBlank(jarfilePath)) {
copyFiles.putIfAbsent(jarfilePath, containerJarfilePath);
}
}
}
deployToContainer(containerId, copyFiles);
}