Druid Command Line Hadoop Indexer启动流程
 
文章目录
首先找到启动的主类io.druid.cli.Main
。在Main中,使用Airline包来解析命令。
如图,可知Druid接收的启动命令分为五组,分别是server、example、tools、index、internal。
这里分析index命令组,详细用法可见官方文档。由代码81行可知该命令组调用了CliHadoopIndexer类。
该类接收参数:
官方文档中启动命令为:
1 | java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -classpath lib/*:<hadoop_config_dir> io.druid.cli.Main index hadoop <spec_file> |
其中spec_file
即为argumentSpec。
接着程序执行run方法。先设定Hadoop版本,然后通过注入的extensionsConfig
设置扩展信息。接着将所有的需要的驱动包路径放入driverURLs,不含Hadoop的包位置放入nonHadoopURLS,扩展包的路径放入extensionURLs:
然后借助URLClassLoader来载入driverURLs:
1 | final URLClassLoader loader = new URLClassLoader(driverURLs.toArray(new URL[driverURLs.size()]), null); |
之后将nonHadoopURLs和extensionURLs合并为jobUrls,并且设置为druid.hadoop.internal.classpath
属性:
之后,重新调用main方法,并设置执行internal命令组的hadoop-indexer命令,即CliInternalHadoopIndexer
类,并提交job到Hadoop。