시작지점
ZeppelinServer
zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java
public static void main(String[] args) throws Exception {
ZeppelinConfiguration conf = ZeppelinConfiguration.load();
conf.printShortInfo();
try (ZeppelinServer server = new ZeppelinServer(conf)) {
server.startZeppelin();
}
}
ZeppelinConfiguration
zeppelin-interpreter/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
public static ZeppelinConfiguration load() {
return ZeppelinConfiguration.load(null);
}
/**
* Load from via filename.
*/
public static ZeppelinConfiguration load(@Nullable String filename) {
return new ZeppelinConfiguration(filename);
}
load의 동작
private ZeppelinConfiguration(@Nullable String filename) {
try {
loadXMLConfig(filename);
} catch (ConfigurationException e) {
LOGGER.warn("Failed to load XML configuration, proceeding with a default,for a stacktrace activate the debug log");
LOGGER.debug("Failed to load XML configuration", e);
}
}
try 진입
private void loadXMLConfig(@Nullable String filename) throws ConfigurationException {
if (StringUtils.isBlank(filename)) {
filename = ZEPPELIN_SITE_XML;
}
List<FileLocationStrategy> subs = Arrays.asList(
new ZeppelinLocationStrategy(),
new ClasspathLocationStrategy());
FileLocationStrategy strategy = new CombinedLocationStrategy(subs);
Parameters params = new Parameters();
FileBasedConfigurationBuilder<XMLConfiguration> xmlbuilder =
new FileBasedConfigurationBuilder<XMLConfiguration>(XMLConfiguration.class)
.configure(params.xml()
.setLocationStrategy(strategy)
.setFileName(filename)
.setBasePath(File.separator + "conf" + File.separator));
XMLConfiguration xmlConfig = xmlbuilder.getConfiguration();
List<ImmutableNode> nodes = xmlConfig.getNodeModel().getRootNode().getChildren();
if (nodes != null && !nodes.isEmpty()) {
for (ImmutableNode p : nodes) {
String name = String.valueOf(p.getChildren("name").get(0).getValue());
String value = String.valueOf(p.getChildren("value").get(0).getValue());
if (StringUtils.isNotBlank(name) && StringUtils.isNotBlank(value)) {
setProperty(name, value);
}
}
}
}
여기를 못넘어가서 catch로 감
XMLConfiguration xmlConfig = xmlbuilder.getConfiguration();
워닝 로그 찍고
private ZeppelinConfiguration(@Nullable String filename) {
try {
loadXMLConfig(filename);
} catch (ConfigurationException e) {
LOGGER.warn("Failed to load XML configuration, proceeding with a default,for a stacktrace activate the debug log");
LOGGER.debug("Failed to load XML configuration", e);
}
}
conf 찍고
public static void main(String[] args) throws Exception {
ZeppelinConfiguration conf = ZeppelinConfiguration.load();
conf.printShortInfo();
try (ZeppelinServer server = new ZeppelinServer(conf)) {
server.startZeppelin();
}
}
public void printShortInfo() {
LOGGER.info("Server Host: {}", getServerAddress());
if (useSsl()) {
LOGGER.info("Server SSL Port: {}", getServerSslPort());
} else {
LOGGER.info("Server Port: {}", getServerPort());
}
LOGGER.info("Context Path: {}", getServerContextPath());
LOGGER.info("Zeppelin Version: {}", Util.getVersion());
}
ZeppelinServer 객체
public ZeppelinServer(ZeppelinConfiguration conf) throws IOException {
this(conf, DEFAULT_SERVICE_LOCATOR_NAME);
}
public ZeppelinServer(ZeppelinConfiguration conf, String serviceLocatorName) throws IOException {
LOG.info("Instantiated ZeppelinServer");
this.conf = conf;
if (conf.isPrometheusMetricEnabled()) {
promMetricRegistry = Optional.of(new PrometheusMeterRegistry(PrometheusConfig.DEFAULT));
} else {
promMetricRegistry = Optional.empty();
}
jettyWebServer = setupJettyServer();
sharedServiceLocator = ServiceLocatorFactory.getInstance().create(serviceLocatorName);
storage = ConfigStorage.createConfigStorage(conf);
}
프로메테우스 설정 없고 제티로 가
private Server setupJettyServer() {
InstrumentedQueuedThreadPool threadPool =
new InstrumentedQueuedThreadPool(Metrics.globalRegistry, Tags.empty(),
conf.getInt(ConfVars.ZEPPELIN_SERVER_JETTY_THREAD_POOL_MAX),
conf.getInt(ConfVars.ZEPPELIN_SERVER_JETTY_THREAD_POOL_MIN),
conf.getInt(ConfVars.ZEPPELIN_SERVER_JETTY_THREAD_POOL_TIMEOUT));
final Server server = new Server(threadPool);
initServerConnector(server);
return server;
}
샤드서비스로케이터 뭐 없고 스토리지로 가
public static ConfigStorage createConfigStorage(ZeppelinConfiguration zConf) throws IOException {
String configStorageClass =
zConf.getString(ZeppelinConfiguration.ConfVars.ZEPPELIN_CONFIG_STORAGE_CLASS);
return ReflectionUtils.createClazzInstance(configStorageClass,
new Class[] {ZeppelinConfiguration.class}, new Object[] {zConf});
}
디폴트값 가져옴
ZEPPELIN_CONFIG_STORAGE_CLASS("zeppelin.config.storage.class",
"org.apache.zeppelin.storage.LocalConfigStorage"),
제플린 스타토
public void startZeppelin() {
initMetrics();
TimedHandler timedHandler = new TimedHandler(Metrics.globalRegistry, Tags.empty());
jettyWebServer.setHandler(timedHandler);
ContextHandlerCollection contexts = new ContextHandlerCollection();
timedHandler.setHandler(contexts);
ServiceLocatorUtilities.enableImmediateScope(sharedServiceLocator);
ServiceLocatorUtilities.addClasses(sharedServiceLocator,
ImmediateErrorHandlerImpl.class);
ImmediateErrorHandlerImpl handler = sharedServiceLocator.getService(ImmediateErrorHandlerImpl.class);
ServiceLocatorUtilities.bind(
sharedServiceLocator,
new AbstractBinder() {
@Override
protected void configure() {
bind(storage).to(ConfigStorage.class);
bindAsContract(PluginManager.class).in(Singleton.class);
bind(GsonNoteParser.class).to(NoteParser.class).in(Singleton.class);
bindAsContract(InterpreterFactory.class).in(Singleton.class);
bindAsContract(NotebookRepoSync.class).to(NotebookRepo.class).in(Singleton.class);
bindAsContract(Helium.class).in(Singleton.class);
bind(conf).to(ZeppelinConfiguration.class);
bindAsContract(InterpreterSettingManager.class).in(Singleton.class);
bindAsContract(InterpreterService.class).in(Singleton.class);
bindAsContract(Credentials.class).in(Singleton.class);
bindAsContract(AdminService.class).in(Singleton.class);
bindAsContract(AuthorizationService.class).in(Singleton.class);
bindAsContract(ConnectionManager.class).in(Singleton.class);
bindAsContract(NoteManager.class).in(Singleton.class);
// TODO(jl): Will make it more beautiful
if (!StringUtils.isBlank(conf.getShiroPath())) {
bind(ShiroAuthenticationService.class).to(AuthenticationService.class).in(Singleton.class);
} else {
// TODO(jl): Will be added more type
bind(NoAuthenticationService.class).to(AuthenticationService.class).in(Singleton.class);
}
bindAsContract(HeliumBundleFactory.class).in(Singleton.class);
bindAsContract(HeliumApplicationFactory.class).in(Singleton.class);
bindAsContract(ConfigurationService.class).in(Singleton.class);
bindAsContract(NotebookService.class).in(Singleton.class);
bindAsContract(JobManagerService.class).in(Singleton.class);
bindAsContract(Notebook.class).in(Singleton.class);
bindAsContract(NotebookServer.class)
.to(AngularObjectRegistryListener.class)
.to(RemoteInterpreterProcessListener.class)
.to(ApplicationEventListener.class)
.to(NoteEventListener.class)
.to(WebSocketServlet.class)
.in(Singleton.class);
if (conf.isZeppelinNotebookCronEnable()) {
bind(QuartzSchedulerService.class).to(SchedulerService.class).in(Singleton.class);
} else {
bind(NoSchedulerService.class).to(SchedulerService.class).in(Singleton.class);
}
if (conf.getBoolean(ConfVars.ZEPPELIN_SEARCH_ENABLE)) {
bind(LuceneSearch.class).to(SearchService.class).in(Singleton.class);
} else {
bind(NoSearchService.class).to(SearchService.class).in(Singleton.class);
}
}
});
메트릭 초기화
private void initMetrics() {
if (conf.isJMXEnabled()) {
Metrics.addRegistry(new JmxMeterRegistry(JmxConfig.DEFAULT, Clock.SYSTEM));
}
if (promMetricRegistry.isPresent()) {
Metrics.addRegistry(promMetricRegistry.get());
}
new ClassLoaderMetrics().bindTo(Metrics.globalRegistry);
new JvmMemoryMetrics().bindTo(Metrics.globalRegistry);
new JvmThreadMetrics().bindTo(Metrics.globalRegistry);
new FileDescriptorMetrics().bindTo(Metrics.globalRegistry);
new ProcessorMetrics().bindTo(Metrics.globalRegistry);
new UptimeMetrics().bindTo(Metrics.globalRegistry);
new JVMInfoBinder().bindTo(Metrics.globalRegistry);
}
isJMXEnabled 디폴트값 false 임
public boolean isJMXEnabled() {
return getBoolean(ConfVars.ZEPPELIN_JMX_ENABLE);
}
프로메테우스 empty임
'Data Engineering > Zeppelin' 카테고리의 다른 글
[Zeppelin] 아파치 제플린이란 (0) | 2024.08.16 |
---|---|
[Zeppelin] 로그_20240729 (0) | 2024.07.29 |
[Zeppelin] MacOS에 minikube 설치하는 방법 (0) | 2024.07.25 |
[Zeppelin] Jira에 이슈 등록하고 PR 하는 방법 (0) | 2024.07.25 |
[Zeppelin] 제플린 개발환경 설정 (0) | 2024.07.22 |