NativeCodeLoader.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.util;
  19. import org.apache.commons.logging.Log;
  20. import org.apache.commons.logging.LogFactory;
  21. import org.apache.hadoop.conf.Configuration;
  22. /**
  23.  * A helper to load the native hadoop code i.e. libhadoop.so.
  24.  * This handles the fallback to either the bundled libhadoop-Linux-i386-32.so
  25.  * or the default java implementations where appropriate.
  26.  *  
  27.  */
  28. public class NativeCodeLoader {
  29.   private static final Log LOG =
  30.     LogFactory.getLog(NativeCodeLoader.class);
  31.   
  32.   private static boolean nativeCodeLoaded = false;
  33.   
  34.   static {
  35.     // Try to load native hadoop library and set fallback flag appropriately
  36.     LOG.debug("Trying to load the custom-built native-hadoop library...");
  37.     try {
  38.       System.loadLibrary("hadoop");
  39.       LOG.info("Loaded the native-hadoop library");
  40.       nativeCodeLoaded = true;
  41.     } catch (Throwable t) {
  42.       // Ignore failure to load
  43.       LOG.debug("Failed to load native-hadoop with error: " + t);
  44.       LOG.debug("java.library.path=" + System.getProperty("java.library.path"));
  45.     }
  46.     
  47.     if (!nativeCodeLoaded) {
  48.       LOG.warn("Unable to load native-hadoop library for your platform... " +
  49.                "using builtin-java classes where applicable");
  50.     }
  51.   }
  52.   /**
  53.    * Check if native-hadoop code is loaded for this platform.
  54.    * 
  55.    * @return <code>true</code> if native-hadoop is loaded, 
  56.    *         else <code>false</code>
  57.    */
  58.   public static boolean isNativeCodeLoaded() {
  59.     return nativeCodeLoaded;
  60.   }
  61.   /**
  62.    * Return if native hadoop libraries, if present, can be used for this job.
  63.    * @param conf configuration
  64.    * 
  65.    * @return <code>true</code> if native hadoop libraries, if present, can be 
  66.    *         used for this job; <code>false</code> otherwise.
  67.    */
  68.   public boolean getLoadNativeLibraries(Configuration conf) {
  69.     return conf.getBoolean("hadoop.native.lib", true);
  70.   }
  71.   
  72.   /**
  73.    * Set if native hadoop libraries, if present, can be used for this job.
  74.    * 
  75.    * @param conf configuration
  76.    * @param loadNativeLibraries can native hadoop libraries be loaded
  77.    */
  78.   public void setLoadNativeLibraries(Configuration conf, 
  79.                                      boolean loadNativeLibraries) {
  80.     conf.setBoolean("hadoop.native.lib", loadNativeLibraries);
  81.   }
  82. }