0%

Hive源码解析

入口:hive-cli-1.1.0-cdh5.14.4.jar!/org/apache/hadoop/hive/cli/CliDriver.class

参考文档

1. 启动

命令行输入 hive 后,启动log进程,建立一个客户端Session,获取到服务器的hive conf配置文件,启动客户端

启动后 executeDriver(CliSessionState ss, HiveConf conf, OptionsProcessor oproc) 一直监听输入的 line; line 会按照 ; 来进行分割拼接成 command,对每一个 command 依次进行处理。command 一共分四种情况:① quit\exit ② source FilePath 指定执行某个文件里的语句 ③ 以 ! 开头的 shell 命令 ④ 本地客户端的各种命令(processLocalCmd(String cmd, CommandProcessor proc, CliSessionState ss))

通过读取 conf 配置,拿到 Driver 信息,然后交给对应的 Driver 来执行命令:org.apache.hadoop.hive.ql.Driver.compile(String command, boolean resetTaskIds, boolean deferClose)

Read more »

Java IO相关使用

1. 文件

创建 File 对象的三种方式

  • 一个路径名:File(String pathname)
  • 一个父路径名和子路径名:File(File parent, String child)File(String parent, String child)
  • 一个URI (统一资源标识符):File(URI uri)

有文件时覆盖,无文件时创建。

通过 f.getAbsolutePath()f.getCanonicalPath() 可获取文件的绝对路径和规范路径

Read more »

守护线程和用户线程

Java分为两种线程:用户线程和守护线程

所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。

当用户进程结束后,程序终止,不管此时是否还有正在运行的守护线程。

Read more »

HashMap 中的哈希值计算问题

1. hash 计算

JDK1.8
HashMap源码

1
2
3
4
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
Read more »