SqoopConfiguration 객체 소스 분석

3730 단어

SqoopConfiguration 클래스


SqoopConfiguration 클래스의 객체는 sqoop의 구성 정보를 관리하는 데 사용됩니다.다음과 같은 특징이 있습니다.
  • 각 sqoop서버에 고유한 SqoopConfiguration 인스턴스가 있습니다.

  • SqoopConfiguration 초기화


    serer는 sqoop의 초기화 과정을 호출합니다.

    SqoopConfiguration.getInstance().initialize();
    
  • SqoopConfiguration 클래스는 단일 디자인 모드를 사용하여 고유한 객체를 저장합니다.소스 코드는 다음과 같습니다.
  • /**
       * Private instance to singleton of this class.
       */
      private static SqoopConfiguration instance;
    
      /**
       * Create default object by default.
       *
       * Every Sqoop server application needs one so this should not be performance issue.
       */
      static {
        instance = new SqoopConfiguration();
      }
    
      /**
       * Return current instance.
       *
       * @return Current instance
       */
      public static SqoopConfiguration getInstance() {
        return instance;
      }
    

    SqoopConfiguration 데이터 구조


    SqoopConfiguration은 구성 정보를 관리하는 데 사용됩니다.데이터 구조는 다음과 같습니다.
     private File configDir = null;
      private boolean initialized = false;
      private ConfigurationProvider provider = null;
      private Map config = null;
      private Map oldConfig = null;
    

    특히 oldConfig 변수는 이전 구성 정보를 저장하는 데 사용됩니다.provider 변수는 설정 정보의 공급자로서 파일에서 설정 정보를 읽는 데 작용합니다.

    SqoopConfiguration 계층 관계


    SqoopConfiguration은 Reconfigurable 인터페이스를 구현합니다.
    /**
     * Interface that make Sqoop Server components sensitive to
     * configuration file changes at the runtime
     */
    public interface Reconfigurable {
      /**
       * Method to notify each reconfigurable components
       */
      public void configurationChanged();
    }
    

    Reconfigurable 인터페이스는 플래그 구성을 업데이트할 수 있음을 나타냅니다.oldConfig 변수가 있는 이유이기도 합니다.인터페이스 방법의 실현은 다음과 같다.
    @Override
      public synchronized void configurationChanged() {
        oldConfig = config;
        config = provider.getConfiguration();
        configureLogging();
      }
    

    그중에서provider.getConfiguration은provider를 위해 설정 파일에서 설정 정보를 다시 읽습니다.

    SqoopConfiguration의 initialize 프로세스


    초기화 프로세스는 주로 다음과 같습니다.
  • 구성 파일 정보 읽기
  • ConfigurationProvider의 클래스 정보를 얻고 구성
  • ConfigurationProvider 객체 초기화
  • ConfigurationProvider에 구성 관리자를 등록합니다.구성이 업데이트되면 ConfigurationProvider는 구성 업데이트를 위해 SqoopConfiguration에 알립니다.
  • 마크업 초기화가 완료되었습니다.주요 코드는 다음과 같습니다.
  • String configDirPath = System.getProperty(
            ConfigurationConstants.SYSPROP_CONFIG_DIR);  // 1
    ...    // 
      provider = (ConfigurationProvider) configProviderClass.newInstance();  //step2
      .... // 
      // Initialize the configuration provider
        provider.initialize(configDir, bootstrapProperties); //step3
        configurationChanged();
    
        provider.registerListener(new CoreConfigurationListener(SqoopConfiguration.getInstance())); //step4
    
        initialized = true; //step5
    

    여기서 step1은 다음과 같습니다.
    System.getProperty("sqoop.config.provider")
    

    시스템 변수는 SQOOPHOME 폴더 아래/server/setenv.sh 설정setp4의 CoreConfigurationListener는 SquopConfiguration 클래스의 정적 클래스 구성원입니다.소스 코드는 다음과 같습니다.
     public static class CoreConfigurationListener implements ConfigurationListener {
    
        private Reconfigurable listener;
    
        public CoreConfigurationListener(Reconfigurable target) {
          listener = target;
        }
    
        @Override
        public void configurationChanged() {
          listener.configurationChanged();
        }
      }
    

    ConfigurationProvider의 구현


    ConfigurationProvider는 인터페이스입니다.그 주요 기능은 설정의 변화 여부를 감청하는 것이다.그런 다음 해당 객체를 업데이트합니다.원본 코드에서Properties Configuration Provider 클래스에서Configuration Provider 인터페이스를 실현했습니다.

    좋은 웹페이지 즐겨찾기