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 ...
随机推荐
- 小记:使用SharedPreferences存储来设置程序第一次进入欢迎界面,以后不会再进入欢迎界面。
SharedPreferences mSharedPreferences = this.getSharedPreferences(NAME, this.MODE_PRIVATE); boolean f ...
- Android webview 取得javascript返回值
package com.she.jyass.UI; import android.content.Context; import android.webkit.WebView; public clas ...
- WEKA使用教程(界面工具的用法)
WEKA使用教程 目录 1. 简介2. 数据格式3.数据准备4. 关联规则(购物篮分析)5. 分类与回归6. 聚类分析 1. 简介 WEKA的全名是怀卡托智能分析环境(Waikato Environm ...
- 【HDU2087】KMP
KMP算法其实很好理解,就是在匹配串中找最近的相同的串. 下面是HDU的2087: #include<iostream> #include<cstdio> #include&l ...
- Linux-Gcc生成和使用静态库和动态库详解
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- java.net.SocketException: Too many open files
1.ps -ef|grep java 2.lsof -p 32636 3.lsof -p 20812|wc –l 这个也可以看一个进程打开的文件数 4.ulimit –a c3p0官方提供了两个参 ...
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
转自:http://www.jianshu.com/p/89687f618837 原因分析 当我们在Android依赖库中使用switch-case语句访问资源ID时会报如下图所示的错误,报的错误 ...
- IE和火狐 差异
1.JavaScript中 1)IE和FireFox中childNodes的差别: <head> <script type="text/javascript"&g ...
- hdu1078 bfs
//Accepted 468 KB 812 ms //bfs+dp #include <cstdio> #include <cstring> #include <iost ...
- select multiple images in Android Gallery
http://stackoverflow.com/questions/18520976/all-properties-of-intent-putextra-to-crop-image-in-andro ...