潘少   >   标签墙   >   Java 标签

Java I/O模型从BIO到NIO和Reactor模式解析

2019-08-16

01308200580ZNcr.gif

Java I/O 模型

同步 vs. 异步

同步 I/O 每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行。

异步 I/O 多个请求可以并发地执行,一个请求或者任务的执行不会导致整个流程的暂时等待。用户线程发起 I/O 请求后仍然继续执行,当内核 I/O 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。

阻塞 vs. 非阻塞

阻塞 某个请求发出后,由于该请求操作需要的条件不满足,请求操作一直阻塞,不会返回,直到条件满足。

非阻塞 请求发出后,若该请求需要的条件不满足,则立即返回一个标志信息告知条件不满足,而不会一直等待。一般需要通过循环判断请求条件是否满足来获取请求结果。

需要注意的是,阻塞并不等价于同步,而非阻塞并非等价于异步。事实上这两组概念描述的是 I

64位Ubuntu14.04下安装hadoop2.6单机配置和伪分布配置详解

2019-07-21

环境

系统: Ubuntu 14.04 64bit

Hadoop 版本: Hadoop 2.6.0 (stable)

JDK 版本: oracle jdk7

操作

在 Ubuntu 下创建 hadoop 用户组和用户

  1. 创建 hadoop 用户组
sudo addgroup hadoop
  1. 创建 hadoop 用户
sudo adduser -ingroup hadoop hadoop

3 . 给 hadoop 用户添加权限,打开/etc/sudoers 文件

sudo gedit /etc/sudoers

在 root ALL=(ALL:ALL) ALL 下添加 hadoop ALL=(ALL:ALL) ALL.

安装 SSH server、配置 SSH 无密码登陆

SSH 是一个很著名的安全外壳协议 Secure Shell Protocol。 rsync 是文件同步命令行工具

sudo apt-get install ssh rsync

mapreduce之数据去重和数据排序实例

2019-07-21

数据去重:
数据去重,只是让出现的数据仅一次,所以在 reduce 阶段 key 作为输入,而对于 values-in 没有要求,即输入的 key 直接作为输出的 key,并将 value 置空。具体步骤类似于 wordcount:

Tip:输入输出路径配置。

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.m

MapReduce实现自定义二次排序

2019-07-21

摘要: MapReduce 框架对处理结果的输出会根据 key 值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的。在我们实际的需求当中,往往有要对 reduce 输出结果进行二次排序的需求。对于二次排序的实现,网络上已经有很多人分享过了,但是对二次排序的实现的原理以及整个 MapReduce 框架的处理流程的分析还是有非常大的出入,而且部分分析是没有经过验证的。本文将通过一个实际的 MapReduce 二次排序例子,讲述二次排序的实现和其 MapReduce 的整个处理流程,并且通过结果和 map、reduce 端的日志来验证所描述的处理流程的正确性。

概述

MapReduce 框架对处理结果的输出会根据 key 值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的。在我们实际的需求当中,往往有要对 reduce 输出结果进行二次排序的需求。对于二次排序的实现,网络上已经有很多人分享过了,但是对二次排序的实现的原理以及整个 MapReduce 框架的处理流程的分析还是有非常大的出入,而且部分分析是没有经过验证的。本文将通过一个实际的 MapReduce 二次排序例子,讲述二次排序

java之hashtable和hashmap

2019-07-21

hashtable 和 hashmap 是 Java 里面常见的容器类,是 Java.uitl 包下面的类,那么 Hashtable 和 Hashmap 是怎么实现 hash 键值对配对的呢,我们看看 jdk 里面的源码,分析下 Hashtable 的构造方法,put(K, V)加入方法和 get(Object)方法就大概明白了。

一、Hashtable 的构造方法:Hashtable(int initialCapacity, float loadFactor)

public Hashtable(int initialCapacity, float loadFactor) {
 if (initialCapacity < 0)
     throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        if (loadFactor <= 0 || Float.isNaN(loadFactor))