对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源码阅读和梳理的更多相关文章

  1. Hive metastore源码阅读(三)

    上次写了hive metastore的partition的生命周期,但是简略概括了下alter_partition的操作,这里补一下alter_partition,因为随着项目的深入,发现它涉及的地方 ...

  2. Hive metastore源码阅读(一)

    不要问我为什么,因为爱,哈哈哈哈...进入正题,最近做项目顺带学习了下hive metastore的源码,进行下知识总结. hive metastore的整体架构如图: 一.组成结构: 如图我们可以看 ...

  3. Hive metastore源码阅读(二)

    最近随着项目的深入,发现hive meta有些弊端,就是你会发现它的元数据操作与操作物理集群的代码耦合在一起,非常不利于扩展.比如:在create_table的时候同时进行路径校验及创建,如下代码: ...

  4. 【面试】足够“忽悠”面试官的『Spring事务管理器』源码阅读梳理(建议珍藏)

    PS:文章内容涉及源码,请耐心阅读. 理论实践,相辅相成 伟大领袖毛主席告诉我们实践出真知.这是无比正确的.但是也会很辛苦. 就像淘金一样,从大量沙子中淘出金子一定是一个无比艰辛的过程.但如果真能淘出 ...

  5. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  6. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

  7. CI框架源码阅读笔记2 一切的入口 index.php

    上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...

  8. 详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)

    首先,说的是,本人到现在为止,已经玩过.                   对于,这样的软件,博友,可以去看我博客的相关博文.在此,不一一赘述! Eclipse *版本 Eclipse *下载 Jd ...

  9. 【 js 基础 】【 源码学习 】backbone 源码阅读(一)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

随机推荐

  1. cocopods的使用方法

    虽然网上关于CocoaPods安装教程多不胜数,但是我在安装的过程中还是出现了很多错误,所以大家可以照下来步骤装一下,我相信会很好用. 前言 在iOS项目中使用第三方类库可以说是非常常见的事,但是要正 ...

  2. 学习KMP算法的一点小心得

    KMP算法应用于 在一篇有n个字母的文档中 查找某个想要查找的长度为m的单词:暴力枚举:从文档的前m个字母和单词对比,然后是第2到m+1个,然后是第3到m+2个:这样算法复杂度最坏就达到了O(m*n) ...

  3. ASP.NET MVC学习之路由篇(3)

    根据路由输出链接 既然是网站开发自然少不了链接,我们已经学会了强大的路由,但是还缺少一步就是能够将这些路由的路径输出到页面,下面我们就开始学习如何输出路由路径. 首先我们的路由注册部分如下所示: 1 ...

  4. [开发笔记]-Visual Studio 2012中为创建的类添加注释的模板

    为类文件添加注释,可以让我们在写代码时能够方便的查看这个类文件是为了实现哪些功能而写的. 一:修改类文件模板 找到类模版的位置:C:\Program Files (x86)\Microsoft Vis ...

  5. git初识

    下载网上的开发员的项目 git clone https://github.com/xxxxxx/test.git 下载好,进入刚下载的好的test项目目录,可以修改对应的代码,然后 git statu ...

  6. RPI学习--wiringpi_API

    reference: https://projects.drogon.net/raspberry-pi/wiringpi/functions/ Functions (API) Some of the ...

  7. JS事件大全

    橙色表示“非常常用”  绿色表示“常用” onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick IE4|N4|O 鼠标双击事件 onMouseD ...

  8. 12-27cell常用的属性

    1.创建cell //    创建一个cell并且设置cell的风格 UITableViewCell *cell  = [[UITableViewCell alloc]initWithStyle:UI ...

  9. Fake_AP模式下的Easy-Creds浅析

    Easy-Creds是一款欺骗嗅探为主的攻击脚本工具,他具备arp毒化,dns毒化等一些嗅探攻击模式.它最亮的地方就是它的fakeAP功能.它比一般自行搭建的fake AP要稳定的多.而且里面还包含了 ...

  10. Cookies和Session的区别

    原文:http://www.cnblogs.com/lijihong/p/4743818.html 今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一 ...