• 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构建模式, 确实对命令行程序而言, 是非常好的处理模式

    1     // -database database
    2     options.addOption(OptionBuilder
    3         .hasArg()
    4         .withArgName("databasename")
    5         .withLongOpt("database")
    6         .withDescription("Specify the database to use")
    7         .create());

    apache.common.cli解析命令行:   heipark.iteye.com/blog/1397513
    antlr处理命令行解析:  www.shangxueba.com/jingyan/99359.html

    *). 可交互的shell如何编写
    jline的学习和使用
    whitesock.iteye.com/blog/692816

    1 ConsoleReader reader = new ConsoleReader();
    2 reader.setCompeletor(...);
    3 while ( (line = reader.readLine("prompt>")) != null ) {
    4     // handle(line);    
    5 }

    对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类层次结构

     1 public final class CommandProcessorFactory {
     2     public static CommandProcessor get(String cmd, HiveConf conf);
     3 }
     4 
     5 public interface CommandProcessor {
     6     public void init();
     7     public CommandProcessorResponse run(String command) throws CommandNeedRetryException;
     8 }
     9 
    10 //errorMessage & SQLState will be set only if responseCode is not zero
    11 public class CommandProcessorResponse {
    12     private int responseCode;
    13     private String errorMessage;
    14     private String SQLState;
    15     private Schema resSchema;
    16 }

    一批具体的实现类
    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

  • 相关阅读:
    [翻译]windows下 连接到 bitnami的phpmyadmin
    Redmine 和GitBlit仓库服务器整合
    Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本
    Codeigniter 列出所有控制器和控制器的方法(类似路由列表)
    FastStone Capture 文件名设置小记录
    [转]sourceforge文件下载过慢
    Cacti 添加 CPU 监听
    Cacti 发送警告邮件
    尝试让Virtualbox的Ubuntu可以调整分辨率
    Html5+离线打包创建本地消息
  • 原文地址:https://www.cnblogs.com/mumuxinfei/p/3701876.html
Copyright © 2020-2023  润新知