您的位置:首页 > 其它

hive执行流程------CommandProcessor

2014-11-05 22:21 211 查看
CliDriver 类中介绍了CliDriver 类会引用到CommandProcessor相关类,主要是根据命令来判断具体实现类,比如通过本地的hive cli启动时,运行hive的命令(非list/source/shell命令等)时在processCmd方法中有如下实现:

具体的决定什么样的命令对应什么样的具体实现类由 CommandProcessorFactory 规定:如果是set,reset,dfs,add delete,compile等命令,返回对应的CommandProcessor实现类。其余有效命令比如select,insert 都是返回Driver类。

CommandProcessor相关类在org.apache.hadoop.hive.ql.processors包中,类的具体的uml图如下:





简单看下几个类的实现:

1.HiveCommand类,是一个迭代类,定义了非sql的一些语句

2.CommandProcessorFactory 类,主要用于获取具体的命令实现类

主要定义了get和getForHiveCommand方法

方法调用get----->getForHiveCommand,其中getForHiveCommand会调HiveCommand 类,HiveCommand 类是一个枚举类型,定义了一些命令。

3.CommandProcessorResponse类封装了processor的返回信息,比如返回码,错误信息等。

4.CommandProcessor 类是一个接口,具体的实现类由下面几个:

主要实现方法在各个实现类的run方法中,run方法返回一个CommandProcessorResponse的对象。

下面简单的说下常用的几个实现类:

a.AddResourceProcessor类是处理add xxx命令的。

主要有两个步骤:

1)判断命令的合法性(长度,类型是否在FILE,JAR,ARCHIVE 3种之内)

2)调用SessionState的add_resource方法(

)

b.相反的DeleteResourceProcessor是用来处理delete xxx命令的。

最终调用了SessionState的delete_resource方法,把resource从HashMap中去掉。

c.DfsProcessor类用来处理dfs 命令,即已“!dfs”开头的命令,最终调用了FsShell的run方法

d.SetProcessor类用来处理set xxx等命令,可以用来设置参数,变量等。

设置参数时

1)以system: 开头的调用了 System.getProperties().setProperty方法。

比如

2)以hiveconf:开头:

调用了HiveConf的verifyAndSet方法

3)以hivevar:开头:

ss.getHiveVariables().put方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hive