08 2016 档案
摘要:一、为什么需要Executor?为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制。他们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类:Executors,他扮演着线程工厂的角色,我们通过Executors可
阅读全文
摘要:三个生产者向一个内存容器中产生数据,另外三个消费者从容器中消费数据。
阅读全文
摘要:让和hadoop的设计思想是一样的,Master负责分配任务和获取任务的结果,worker是真正处理业务逻辑的。 使用ConcurrentLikedQueue去承载所有的任务,因为会有多个worker会并发修改这个队列。
阅读全文
摘要:Future模式有点类似于商品订单。比如在网购时,当看中某一件商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。 或者说更形象的我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需一直等待请求的结果,可以继续浏览或者操作其他内容。 代码实现:
阅读全文
摘要:在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 一、ConcurrentLinkedQueue 是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状
阅读全文
摘要:Copy-On-write简称COW,是一种用于程序设计中的优化策略。 JDK里的COW容器有两种:CopyOnWriteArrayList和CopyOnWriteArraySet,COW容器非常有用,可以在非常多的并发场景中使用到。 CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往
阅读全文
摘要:ConcurrentMap接口下有两个重要的实现: ConcurrentHashMap ConcurrentSkipListMap(支持并发排序功能,弥补ConcurrentHashMap) ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的H
阅读全文
摘要:scala语言中没有static成员存在,但是scala允许以某种方式去使用static成员这个就是伴生机制,所谓伴生,就是在语言层面上,把static成员和非static成员用不同的表达方式,class和object,但双方具有相同的package和name,但是最终编译器会把他们编译到一起,这是
阅读全文
摘要:list的下标访问 map函数 添加元素 foreach 去重 累加 reduce 元组: map:
阅读全文
摘要:默认值: 可变参数: 下划线的使用: 递归函数:需要显式的给予函数的返回类型 函数柯里化: 把这个参数一个个独立开来写,这就是柯里化 柯里化就是把参数可以分开来,把部分函数参数可以用下划线来代替 匿名函数声明方式 :后面是数据类型,c代表传进来的参数 匿名函数 匿名函数作为参数,其实就是参数名,后面
阅读全文
摘要:一、条件表达式 在scala中if/else表达式有值,这个值就是跟在if或者else之后的表达式的值。 在scala中每个表达式都有一个类型。举例来说,表达式if(x>0) 1 else -1的类型是Int,因为两个分支的类型都是Int. 混合表达式的类型是两个分支的类型的公共超类型。例如if(x
阅读全文
摘要:一、cume_dist 这两个序列分析函数不是很常用,这里也介绍一下。注意: 序列函数不支持WINDOW子句。 数据准备: 创建表并加载数据 验证数据: CUME_DIST–CUME_DIST 小于等于当前值的行数/分组内总行数–比如,统计小于等于当前薪水的人数,所占总人数的比例 rn1: 没有pa
阅读全文
摘要:一、ntile 序列函数不支持window子句 数据准备: 把数据load到表中 NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值NTILE不支持ROWS BETWEEN,比如 NTILE(2) OVER(PARTITION BY cookieid ORDER BY createt
阅读全文
摘要:Hive中提供了越来越多的分析函数,用于完成负责的统计分析。抽时间将所有的分析窗口函数理一遍,将陆续发布。今天先看几个基础的,SUM、AVG、MIN、MAX。用于实现分组内所有和连续累积的统计。 1.数据准备 本地文件上的文件 吧本地文件系统上的文件上传到hdfs上,并为此数据建立外部表 验证表中是
阅读全文
摘要:一、r的防止字符转义 运行结果: 二、获取变量类型 运行结果: 三、判断类型 运行结果: 四、对list、tuple、dict、set进行迭代 4.1常用的方式 但是这种迭代方式会把list装到内存中进行迭代 4.2使用迭代器来迭代 这种方式的迭代比较省内存 4.3迭代值的同时迭代下标 五、列表生成
阅读全文
摘要:首先要做的是将kettle在linux下搭建好。 一、搭建linux的kettle环境 1.1解压 1.2配置kettle_home 1.3需要把文件资源库的配置拷贝到linux环境下 1.4拷贝资源库到linux下 1.5修改.kettle目录下的资源库的映射 1.6吧mysql的驱动包放到ket
阅读全文
摘要:一、 输入组件 1.1表输入 从指定的数据库中,通过sql语句来查询数据加载到内存。 允许简易转换:勾选后可以避免不必要的字段的数据类型转换,从而提高性能。 替换sql语句里的变量:勾选后可以通过${queryDate}来使用queryDate变量。 从步骤中插入数据:以上次的步骤中的数据作为数据的
阅读全文
摘要:一、kettle的inner join 需求: 目前本地文件系统上有一个person.csv文件: 数据库中有一个person表: 现在需要将这两张表做inner join的操作。 1.1首先我们写一个转换,这个转换有两个输入,一个输入是表输入,一个是csv类型文件的输入 首先是表输入的配置: 为什
阅读全文
摘要:在kettle中的转换或者作业等资源的存储的仓库称为资源库:分为文件资源库、数据库资源库。 一个转换或者作业可以属于某个资源库或者一个单独的文件形态存在。 一、数据库资源库 1.1在mysql中创建一个数据库作为数据库资源库 1.2创建数据库资源库工具--》资源库--》连接资源库--》点击加号--》
阅读全文
摘要:1.首先创建一个job 2.拖拽组件形成下面的图 这里需要注意,在作业中的连线分为三类: 黄色锁的线:这个步骤执行之后,无论失败与否都会执行下一个步骤 绿色对号线:步骤执行成功了,才会执行下一个步骤。 红色叉号线:步骤执行失败了,才会执行下一个步骤。 3.配置转换文件 转换文件的存储位置最好和作业文
阅读全文
摘要:本篇介绍使用kettle的一个最简单的例子,可以初步了解下转换。 需求是这样的: 存在一个本地csv文件,文件的内容如下 现在需要将csv中的数据保存到本地的文本文件中 1.创建一个转换,并且重命名 2.增加一个输入组件,可以读取csv文件 3.重命名该组件并且使得该组件读取本地文件系统上的stud
阅读全文
摘要:1.首先去官网下载安装包,这个安装包在所有平台上是通用的。 2.kettle是java语言开发的,所以需要配置JAVA_HOME 3.解压kettle的安装包 4.配置环境变量,KETTLE_HOME,这个目录是保存kettle配置文件的目录 5.配置完成后,运行data-integration目录
阅读全文
摘要:一、同步类容器 同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素,遍历完容器中的所有元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最经典的便是Concurrent
阅读全文
摘要:要保证在多线程环境下的单例模式,有下面两种建议的方式: 一、静态内部类 二、double check的方式
阅读全文
摘要:一、先谈哈希 1.1原理 Hash (哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。 其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。 1.2一个典型的hash函数示意图 1.3特点 如果两个散列值是不相同的(根据同一函数),那
阅读全文
摘要:一、ps 1.1ps命令简介 Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进
阅读全文