程序员的自我修养
Home » 标签 » 学习笔记

Hive窗口和分析函数(上)

0条评论4,506次浏览

之前记录row_number()的使用方法,最近终于有空将窗口函数这一块完整的看一遍,在此记录。

Analytics functions

RANK()、DENSE_RANK()、ROW_NUMBER()

使用示例:

其中PARTITION by calling_nbr可选,若加上则是窗口内统计,否则则是全局统计。

部分结果如下:

(更多…)

分类:Apache Hive
标签:,

Java并发编程学习笔记(5)——Fork/Join框架

0条评论12,843次浏览

Fork/Join简介

Fork/Join的核心思想为分治算法:将一个规模较大的问题划分为同样性质但规模较小的若干子问题来求解,然后将子问题的结果汇总并输出最后的结果。Fork/Join框架执行任务时,检查该任务的规模大小,若大于设定的阀值,则划分为更小的子任务,然后继续用框架来执行。若划分后的子问题小于阀值则直接执行,若大于阀值则继续划分成更小的子问题。下图总结了这个概念:
fork-join

核心操作

  • fork操作:把任务分成更小的任务和使用这个框架执行它们。
  • join操作:一个任务等待它创建的任务的结束。

特性

Work-stealing算法,类似Hadoop中的推测执行:一个先完成所有任务的线程会尝试着窃取其它线程中没有完成的任务来执行(任务队列尾部窃取)。这样做的好处是重用利用了并发多线程的优点,并减少了线程间的竞争。

阅读全文>>

标签:,

Java并发编程学习笔记(4)——线程池

0条评论1,523次浏览

从Java5开始,JDK并发API提供了ThreadPoolExecutor类,用来创建线程池。合理的使用线程池,有以下三个好处:

  • 降低资源消耗
  • 提高响应速度
  • 提高线程的可管理性

ThreadPoolExecutor

构造方法

基本构造方法

创建大小固定的线程池

创建大小为1的线程池

常用方法

  • void executeTask(Runnable command),执行Runnable任务
  • void shutdown(),关闭线程池
  • int getPoolSize(),获取线程池大小
  • int getActiveCount(),获取正在运行的线程数量
  • long getCompletedTaskCount(),获取已完成的任务数量
  • Future<T> submit(Callable<T> task),执行Callable任务
  • T invokeAny(Collection<? extends Callable<T>> tasks),执行一组Callable任务,只获取第一个返回结果
  • List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks),执行一组Callable任务,获取全部返回结果

阅读全文>>

标签:,

Java并发编程学习笔记(3)——线程同步进阶

0条评论1,264次浏览

Semaphore

Semaphore是一个控制访问多个共享资源的计数器。当计数器值大于0,代表还有可用资源,线程可以继续访问和使用资源;当计数器的值等于0,代表暂无可用资源,线程必须等待资源的释放。

一个典型的例子就是,有多台打印机,当新的打印任务来时,将检测是否还有可用的打印机,若有则使用,并将可用打印机数量减1;若无则等待;当使用完毕后,释放打印机,将可用打印机数量加1。

使用示例

  • 同Lock一样,Semaphore也可开启公平机制,Semaphore(int permits, boolean fair)
  • acquireUninterruptibly(),与acquire()的区别是:线程中断不会抛出异常
  • tryAcquire(),尝试获取semaphore。如果成功,返回true。如果不成功,返回false值,并不会被阻塞和等待semaphore的释放。

阅读全文>>

标签:,

Java并发编程学习笔记(2)——线程同步基础

0条评论1,142次浏览

synchronized

synchronized关键字用来控制并发访问。每个方法声明为synchronized关键字是一个临界区,Java只允许一个对象执行其中的一个临界区。当synchronized加在静态方法时,代表只有一个执行线程能访问被synchronized关键字声明的静态方法。

synchronized关键字不利于应用程序的性能,所以必须仅在修改共享数据的并发环境下的方法上使用它。应当尽量使用synchronized来保护访问共享数据的代码块,以使得临界区尽可能短。

  • 对于同步方法,锁是当前实例对象
  • 对于静态同步方法,锁是当前对象的Class对象
  • 对于同步方法块,锁是synchronized括号里配置的对象,通常来说会用this;当使用其它对象引用时,代表可以并行的访问。

wait()、notify()、notifyAll()

wait()必须出现在synchronized内,否则会抛出IllegalMonitorStateException异常。当调用wait()后,该线程会睡眠,直到相同对象保护的synchronized代码块中调用notify()或notifyAll()方法才会醒来。在此期间其它线程可以访问synchronized代码块。通常wait()需要配合while循环检查边界条件,否则,当线程唤醒后就会继续执行,而此时可能并不满足线程执行的条件。

阅读全文>>

标签:,

Java并发编程学习笔记(1)——线程基础

0条评论1,158次浏览

写在前面

发现现在学Java的,要是对IO、多线程、并发不熟悉都不好意思出去找工作。现在的新技术日新月异,一味的追求新技术不但沉淀不下多少东西,还得迟早累死。当然不是说不用学新技术,能快速掌握新技术毫无疑问可以增加自己的竞争力,但我觉得打好基础才能以不变应万变,也能更加快速的掌握新技术。其实很多新技术,如Hadoop、HBase等都是前人结合自己的经验写出的框架,真正底层的还是那些基础的东西。

IO、多线程、并发毫无疑问是Java基础中的基础。回想自己做过的项目和产品,要么用的SSH架构,要么是Hadoop这样产品,做开发也快3年了,却一直对IO、多线程、并发不了解,现在开始学习并发编程,并写下学习笔记。

线程基础

创建线程

继承Thread父类

阅读全文>>

标签:,
11
profile
  • 文章总数:81篇
  • 评论总数:241条
  • 分类总数:32个
  • 标签总数:45个
  • 运行时间:1253天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • Anonymous: :?: :razz: :sad:
  • Anonymous: 牛
  • Anonymous: 楼主你好,我偶尔也会 遇到Reconnect due to socket error: java.nio.channels.ClosedCha...
  • Anonymous: sdfs
  • Anonymous: :arrow: :neutral: :cry:
  • Anonymous: java.io.NotSerializableExcepti on: DStream checkpointing has been enabled but the DStreams with their...
  • wick: HI,请问一下,U,S,V得到 ,怎么得到近似矩阵 (用spark java),谢谢。
  • Michael Whitaker: Thank you for this blog, it was very helpful in troubleshooting my own issues. It seems that no...
  • Anonymous: :mad:
  • Anonymous: :???:
  • Anonymous: :mad: :mad: :mad:
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • Anonymous: :razz: :evil: :grin:
  • 张瑞昌: 有很多,比较常见的是 Jacob迭代法,一次迭代O (n^3),迭代次数不清楚 ...
  • Anonymous: :mrgreen:
  • lc277: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...
  • Anonymous: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...
  • Anonymous: :smile: :grin: :eek:
  • 李雪璇: 想要完整代码,可以帮 忙发给我吗