Hive cli源码阅读和梳理
对Cli的重新认识
*). hive cli有两种模式, 本地模式: 采用持有的driver对象来处理, 远程模式: 通过连接HiveServer来实现, 由此可见之前的架构图中的描述还是模糊且带有误导性
*). 支持singal的处理支持, 比如对ctrl+c中断, 需要两次才完全退出交互
*). 交互式命令处理模式
源码阅读
*). Signal类对象的使用,Singal
静态函数 Signal.handle(Singal singla, SingalHandler handler);
对signal函数的理解和看法, 对kill -9程序是无法捕获这类信号的,
Runtime.getRuntime().addShutdownHook()的局限性, 会遇到SIGKILL信号导致进程未能处理必要的清理工作
*). OptionBuilder
推崇链式编程+builder构建模式, 确实对命令行程序而言, 是非常好的处理模式
// -database database
options.addOption(OptionBuilder
.hasArg()
.withArgName("databasename")
.withLongOpt("database")
.withDescription("Specify the database to use")
.create());
apache.common.cli解析命令行: heipark.iteye.com/blog/1397513
antlr处理命令行解析: www.shangxueba.com/jingyan/99359.html
*). 可交互的shell如何编写
jline的学习和使用
whitesock.iteye.com/blog/692816
ConsoleReader reader = new ConsoleReader();
reader.setCompeletor(...);
while ( (line = reader.readLine("prompt>")) != null ) {
// handle(line);
}
对jline处理流程的看法
在Windows平台下,JLine通过自带的.dll文件初始化终端。jline.jar中包含了jline32.dll和jline64.dll,在Windows平台上使用的时候, JLine会自动将其解压缩到临时目录并进行加载。
在Unix或者Max OS X平台下,JLine通过stty命令初始化终端。例如通过调用stty -icanon min 1将控制台设置为character-buffered模式。以及通过调用stty -echo禁止控制台回显。在修改终端的属性之前,JLine会对终端的属性进行备份,然后注册一个ShutdownHook,以便在程序退出时进行恢复。由于JVM在非正常退出时(例如收到SIGKILL信号)不保证ShutdownHook一定会被调用,因此终端的属性可能无法恢复。
*) cli的命令分类
source
list
quit/exit
! /bin/bash -c 'command'
hive的具体命令
---------------------
hive的具体命令又如下细分
#)Hive session配置相关命令
#)SQL相关的命令
参考url: www.cnblogs.com/ggjucheng/archive/2013/01/04/2844987.html
*). CommandProcessor类层次结构
public final class CommandProcessorFactory {
public static CommandProcessor get(String cmd, HiveConf conf);
} public interface CommandProcessor {
public void init();
public CommandProcessorResponse run(String command) throws CommandNeedRetryException;
} //errorMessage & SQLState will be set only if responseCode is not zero
public class CommandProcessorResponse {
private int responseCode;
private String errorMessage;
private String SQLState;
private Schema resSchema;
}
一批具体的实现类
SetProcessor, ResetProcessor...
比较特殊的是Driver类, 封装了具体的功能
*). 主逻辑循环
while ( (line = readline()) != null ) {
commands = parse(line);
dispatch(commands);
/*
CommandProcessor processor = CommandProcessorFactory.get(command);
CommandProcessorResponse response = processor.run(command);
handle(response);
*/
}
*) ClassLoader的使用方法
对类加载机制的理解和看法
blog.sina.com.cn/s/blog_5751ee0b0100g7bl.html
my.oschina.net/rouchongzi/blog/171046
blog.csdn.net/kabini/article/details/2975263
加密和安全
http://www.cnblogs.com/kanjingcai/archive/2009/04/30/1447265.html
Hive cli源码阅读和梳理的更多相关文章
- Hive metastore源码阅读(三)
上次写了hive metastore的partition的生命周期,但是简略概括了下alter_partition的操作,这里补一下alter_partition,因为随着项目的深入,发现它涉及的地方 ...
- Hive metastore源码阅读(一)
不要问我为什么,因为爱,哈哈哈哈...进入正题,最近做项目顺带学习了下hive metastore的源码,进行下知识总结. hive metastore的整体架构如图: 一.组成结构: 如图我们可以看 ...
- Hive metastore源码阅读(二)
最近随着项目的深入,发现hive meta有些弊端,就是你会发现它的元数据操作与操作物理集群的代码耦合在一起,非常不利于扩展.比如:在create_table的时候同时进行路径校验及创建,如下代码: ...
- 【面试】足够“忽悠”面试官的『Spring事务管理器』源码阅读梳理(建议珍藏)
PS:文章内容涉及源码,请耐心阅读. 理论实践,相辅相成 伟大领袖毛主席告诉我们实践出真知.这是无比正确的.但是也会很辛苦. 就像淘金一样,从大量沙子中淘出金子一定是一个无比艰辛的过程.但如果真能淘出 ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
- CI框架源码阅读笔记2 一切的入口 index.php
上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...
- 详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)
首先,说的是,本人到现在为止,已经玩过. 对于,这样的软件,博友,可以去看我博客的相关博文.在此,不一一赘述! Eclipse *版本 Eclipse *下载 Jd ...
- 【 js 基础 】【 源码学习 】backbone 源码阅读(一)
最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...
随机推荐
- NOIP2004 解题报告
第一题:津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里, ...
- 如何判断Intent有没有对应的Activity去处理?
如何判断Intent有没有对应的Activity去处理?至少有以下两种方法,最近使用过,随笔记下来,以供查阅. 第一种, 如下: public boolean isIntentResolvable(I ...
- SA 的参数
SA 的参数也只能是常数数组. http://www.cnblogs.com/del/archive/2009/10/27/1590692.html ja := SA([]); jo := SO(); ...
- 结构化视角看django
分析一个软件的整体框架,我认为应该从静态和动态两方面入手.静态方面,看它有哪些用例,即有哪些功能模块:动态方面,看主流程如何连接上这些模块 静态方面:分View.Model.Template.Sess ...
- [网络技术][转]PPTP协议解析
PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control Connection Protol 控制层连接是基于T ...
- MongoDB数据访问[C#]附源码下载(查询增删改) 转载
安装完MongoDBhttp://localhost:28017/监测是否成功! vs 2008 C# MongoDB 源代码下载地址:http://download.csdn.net/source/ ...
- asp中cookie欺骗/注入原理与防范
一直以来sql注入被广泛关注,也有专门的防注系统代码.发现,如果代码不严谨也会有cookie欺骗/注入的情况.原来, 防注入系统没有注意到 Cookies 的问题!这里以ASP为例,分析一下cook ...
- Python学习路程day7
多态 class Animal: def __init__(self, name): # Constructor of the class self.name = name def talk(self ...
- hdu 2045
Ps:上课的时候用iPad做的...没有调试..一次AC机.就是简单的递推... 代码: #include "stdio.h"#include "math.h" ...
- hdu 2041
ps:这道题之前一直没思路,有大神提醒我用递推,但当时没搞清...今天做了那个小蜜蜂..才懂得用递推做这道题.. 代码: #include "stdio.h"long long d ...