/*
* Eoulsan development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public License version 2.1 or
* later and CeCILL-C. This should be distributed with the code.
* If you do not have a copy, see:
*
* http://www.gnu.org/licenses/lgpl-2.1.txt
* http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt
*
* Copyright for this code is held jointly by the Genomic platform
* of the Institut de Biologie de l'École normale supérieure and
* the individual authors. These should be listed in @author doc
* comments.
*
* For more information on the Eoulsan project and its aims,
* or to join the Eoulsan Google group, visit the home page
* at:
*
* http://outils.genomique.biologie.ens.fr/eoulsan
*
*/
package fr.ens.biologie.genomique.eoulsan.util.hadoop;
import static fr.ens.biologie.genomique.eoulsan.EoulsanLogger.getLogger;
import java.io.File;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.DF;
import org.apache.hadoop.util.VersionInfo;
import fr.ens.biologie.genomique.eoulsan.EoulsanRuntime;
import fr.ens.biologie.genomique.eoulsan.HadoopEoulsanRuntime;
import fr.ens.biologie.genomique.eoulsan.AbstractEoulsanRuntime.EoulsanExecMode;
import fr.ens.biologie.genomique.eoulsan.util.LinuxCpuInfo;
import fr.ens.biologie.genomique.eoulsan.util.LinuxMemInfo;
import fr.ens.biologie.genomique.eoulsan.util.StringUtils;
/**
* This class show in log some Hadoop information.
* @since 1.0
* @author Laurent Jourdren
*/
public class HadoopInfo {
private static final String ROOT_PATH = "/";
private static final String VAR_PATH = "/var";
private static final String TMP_PATH = "/tmp";
public static void logHadoopSysInfo() {
if (EoulsanRuntime.getRuntime().getMode() != EoulsanExecMode.AMAZON) {
return;
}
logHadoopVersionInfo();
// Get Eoulsan Hadoop runtime
HadoopEoulsanRuntime runtime =
(HadoopEoulsanRuntime) EoulsanRuntime.getRuntime();
if (EoulsanRuntime.getSettings().isDebug()) {
sysInfo(runtime.getConfiguration());
}
}
//
// Other methods
//
private static void sysInfo(final Configuration conf) {
try {
parseCpuinfo();
parseMeminfo();
df(new File(ROOT_PATH), conf);
df(new File(TMP_PATH), conf);
df(new File(VAR_PATH), conf);
// Log the usage of the hadoop temporary directory partition
final String hadoopTmp = conf.get("hadoop.tmp.dir");
if (hadoopTmp != null) {
df(new File(hadoopTmp), conf);
}
// Log the usage of the Java temporary directory partition
final File tmpDir = new File(System.getProperty("java.io.tmpdir"));
if (tmpDir != null && tmpDir.exists() && tmpDir.isDirectory()) {
df(tmpDir, conf);
}
} catch (IOException e) {
getLogger()
.warning("Error while get system information: " + e.getMessage());
}
}
private static void parseCpuinfo() throws IOException {
final LinuxCpuInfo cpuinfo = new LinuxCpuInfo();
final String modelName = cpuinfo.getModelName();
final String processor = cpuinfo.getProcessor();
final String cpuMHz = cpuinfo.getCPUMHz();
final String bogomips = cpuinfo.getBogoMips();
final String cores = cpuinfo.getCores();
getLogger().info(
"SYSINFO CPU model name: " + (modelName == null ? "NA" : modelName));
getLogger().info("SYSINFO CPU count: "
+ (processor == null
? "NA" : "" + (Integer.parseInt(processor.trim()) + 1)));
getLogger().info("SYSINFO CPU cores: " + (cores == null ? "NA" : cores));
getLogger().info(
"SYSINFO CPU clock: " + (cpuMHz == null ? "NA" : cpuMHz) + " MHz");
getLogger()
.info("SYSINFO Bogomips: " + (bogomips == null ? "NA" : bogomips));
}
private static void parseMeminfo() throws IOException {
final LinuxMemInfo meminfo = new LinuxMemInfo();
final String memTotal = meminfo.getMemTotal();
getLogger()
.info("SYSINFO Mem Total: " + (memTotal == null ? "NA" : memTotal));
}
private static void df(final File f, final Configuration conf)
throws IOException {
DF df = new DF(f, conf);
getLogger().info("SYSINFO "
+ f + " " + StringUtils.sizeToHumanReadable(df.getCapacity())
+ " capacity, " + StringUtils.sizeToHumanReadable(df.getUsed())
+ " used, " + StringUtils.sizeToHumanReadable(df.getAvailable())
+ " available, " + df.getPercentUsed() + "% used");
}
private static void logHadoopVersionInfo() {
getLogger().info("SYSINFO Hadoop version: " + VersionInfo.getVersion());
getLogger().info("SYSINFO Hadoop revision: " + VersionInfo.getRevision());
getLogger().info("SYSINFO Hadoop date: " + VersionInfo.getDate());
getLogger().info("SYSINFO Hadoop user: " + VersionInfo.getUser());
getLogger().info("SYSINFO Hadoop url: " + VersionInfo.getUrl());
}
}