——Computing 2.0 By Barry.Cswords

Slides:



Advertisements
Similar presentations
大数据基础技术和应用. 大纲 大数据概述 大数据基础技术 工程技术 策略技术 典型应用 我们处于数据爆炸的时代 数据库 文字记录 照片 线下数据信息化 网页数据 用户行为记录 数字图像 互联网 - 移动互联网 设备监控 智能家居 摄像头 传感器 地球上至今总共的数据量: 在 2006 年,个人用户才刚刚迈.
Advertisements

软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
1 Java 语言程序设计 计算机系 鲍金玲. 2 引子 甲骨文 甲骨文是全球最大的信息管理软件及服务供应商,成立于 1977 年,公司总部 设在美国加利福尼亚州的红木城( Redwood Shores ),全球员工达 名, 包括 名开发人员、 7500 多名技术支持人员和.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
Java 程序设计(第二版) 普通高等教育 “ 十一五 ” 国家级规划教材 辛运帷等 编著 徐小平 主讲.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第一單元 建立java 程式.
Java程序设计教程 第一讲 Java概述.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
基于Hadoop的Map/Reduce框架研究报告
Ch.8. 基于MapReduce的图算法 MapReduce海量数据并行处理
Tool Command Language --11级ACM班 金天行.
南京大学计算机科学与技术系 主讲人:黄宜华 2011年春季学期
Hadoop与数据分析 淘宝数据平台及产品部基础研发组 周敏 日期:
Map-Reduce Programming
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
Introduction to MapReduce
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
Java语言程序设计 清华大学出版社 第9章 网络通信.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
Hadoop I/O By ShiChaojie.
例外處理(Exception Handling)
Hadoop MapReduce Hadoop Map-Reduce is a software framework for easily writing applications.
基于Hadoop的数据仓库Hive.
《大数据技术原理与应用》 第七章 MapReduce (2016春季学期) 林子雨 厦门大学计算机科学系 主页:
Java基础 JavaSE异常.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
Cloud Computing 数据处理平台-Pig.
第九讲 Hadoop架构再探讨 (2016春季学期)
CHAPTER 6 認識MapReduce.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
厦门大学数据库实验室 MapReduce 连接
程式設計實作.
CH09 套件 物件導向程式設計(II).
Cloud Computing MapReduce进阶.
Java语言程序设计 第五部分 Java异常处理.
Map Reduce Programming
Skew Join相关论文 报告人:蔡珉星 厦大数据库实验室
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
Homework 1(上交时间:10月14号) 倒排索引.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
异常及处理.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
Hadoop与数据分析 淘宝数据平台及产品部基础研发组 周敏 日期:
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第二章 Java语法基础.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
Summary
Presentation transcript:

——Computing 2.0 By Barry.Cswords Parallel Programming ——Computing 2.0 By Barry.Cswords

并行计算的技术现状 集群和 分布式技术 虚拟化 Map-Reduce 分布式 散列存储 演员模型 和函数编程 解决方案 网格计算 绿色计算 云计算 ?? 设计模式 (关联底层设计) 虚拟资源池 面向数据结构 ER模型 FP 典型方案 负载均衡集群 Hadoop Core HBase,HDFS Erlang虚拟机 面向资源 事务、存储 计算、存储 计算 存储 资源利用率 √ 系统可扩展性 高并发 高吞吐 海量存储 复杂计算 缺陷 •设计模式顶层化 •业务关联性强 •人工干预程度高 •设计模式底层化 •代码复杂 •PIG等还不成熟 •代码晦涩

LISP对列表的处理 先熟悉一下LISP语法 MAP方法 FOLD方法 Scheme(LISP的一种方言)用递归实现,但实际上都可以并行。 (define factorial (lambda (n) (if (= n 1) 1 (* n (factorial (- n 1))))) (factorial 6)  720 (map (lambda (x) (* x x)) '(1 2 3 4 5))  '(1 4 9 16 25) (fold + 0 '(1 2 3 4 5))  15 (fold * 1 '(1 2 3 4 5))  120

Map-Reduce (Hadoop) C++代码略简练 使用管道上下文实现Map和Reduce关联 使用工厂实现IO和调用 package org.myorg; import java.io.IOException; import java.util.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.conf.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.util.*; public class WordCount { public static void main(String[] args) throws Exception { //以这个类建立任务并起名 JobConf conf = new JobConf(WordCount.class); conf.setJobName("wordcount"); //输出列表类型规约 conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); //Map-Reduce算法类规约 conf.setMapperClass(Map.class); conf.setCombinerClass(Reduce.class); conf.setReducerClass(Reduce.class); //输入输出类型规约 conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); //设置输入、输出路径 FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); } (统计计算一篇文章中不同词的个数) C++代码略简练 使用管道上下文实现Map和Reduce关联 使用工厂实现IO和调用

Map-Reduce (Hadoop)续 public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1);//封装个数 private Text word = new Text();//暂存每个词用 public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line);//将文章的每个词进行标记 while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one);//一个词算一个,以词为分配依据Key,值value为1 ,置入输出 } public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum += values.next().get();//多分到一个词(key)就加一(迭代器values中的value值) output.collect(key, new IntWritable(sum));//返回词,词的个数

PIG Latin (Hadoop) 熟悉一下PIG的风格(查找最感兴趣页面) PIG实现Map-Reduce(无实际含义) 实际上只负责调度,但实现了一定的松耦合 Visits = load ‘/data/visits’ as (user, url, time); Visits = foreach Visits generate user, Canonicalize(url), time; Pages = load ‘/data/pages’ as (url, pagerank); VP = join Visits by url, Pages by url; UserVisits = group VP by user; Sessions = foreach UserVisits generate flatten(FindSessions(*)); HappyEndings = filter Sessions by BestIsLast(*); store HappyEndings into '/data/happy_endings'; a = FOREACH input GENERATE flatten(Map(*)); b = GROUP a BY $0; c = FOREACH b GENERATE Reduce(*);

Actor Architecture 内部定位固定、可移动的Actor 这是一种值得学习的整体通信架构。 package app.quickstart.hello; import aa.core.Actor; import aa.core.ActorName; import aa.core.CreateActorException; public class Hello extends Actor { public Hello() System.out.print(" Hello"); try { ActorName anWorld = create("app.quickstart.hello.World"); send(anWorld, “world”); } catch (CreateActorException e) System.out.println( "> Hello.Hello: " + e); } package app.quickstart.hello; import aa.core.Actor; public class World extends Actor { public World(){} public void world() System.out.println(" World!"); } (调用一个函数world) 内部定位固定、可移动的Actor UAN: Universal Actor Name uan://128.174.245.49:37 LAN: Location-based Actor Name lan://128.174.244.147//128.174.245.49:37 这是一种值得学习的整体通信架构。

Thread实现的MapReduce 对简单运算效率低,但对复杂运算效果明显 计算40个斐波那契数的效率对比(有波动): //by qinxiaoyu@ceclipse.org package org.ceclipse.cswords.mapreduce; import java.util.Iterator; import java.util.List; public abstract class MapReducer<I,O> extends Thread{ protected List<O> output=null; protected Iterator<I> input=null; protected int received=0; public MapReducer(Iterator<I> in,List<O> out){ this.input=in; this.output=out; } public void run(){ int i=0;I v=null; while(this.input.hasNext()){ v=input.next(); Reducer r=this.map(v); r.index=i; r.start(); i++; public abstract Reducer map(I in); public abstract void finished(); public abstract class Reducer extends Thread{ protected I input=null; protected int index=0; public Reducer(I in){ this.input=in; } public void run(){ output.set(this.index, this.reduce(this.input)); received++; if(received==output.size())finished(); public abstract O reduce(I in); 对简单运算效率低,但对复杂运算效果明显 计算40个斐波那契数的效率对比(有波动): 该算法:3656MS For each:5562MS

演员模型的Map-Reduce (Erlang) -module(pmap).   -export([pmap/2]).      pmap(F, L) ->      S = self(),     Pids = lists:map(fun(I) ->        spawn(fun() -> do_fun(S, F, I) end)     end, L),     gather(Pids).   gather([FirstPID|OtherPIDs]) ->     receive       {FirstPID, Result} ->  [Result|gather(OtherPIDs)]     end;   gather([]) ->     [].   do_fun(Parent, F, I) ->                             Parent ! {self(), (catch F(I))}.   -module(fib).   -export([fib/1]).      fib(0) -> 0;   fib(1) -> 1;   fib(N) when N > 1 -> fib(N-1) + fib(N-2).  Eshell > L = lists:seq(0,35).   Eshell > lists:map(fun(X) -> fib:fib(X) end, L).   Eshell > pmap:pmap(fun(X) -> fib:fib(X) end, L).   (计算斐波那契数列) 注:左侧代码可以复用 pmap负责分发进程并建立map存储pid; 每个进程中do_fun向父进程发出自己的进程号和目标函数计算结果(Reduce); gather负责通过递归将每个进程号替换为子进程发出的函数计算结果。

实验和观摩总结 技术横向比较结果重点 易行整体方案 Hadoop相关技术目前是最成熟的,使用PIG很方便实现大数据处理;但有框架过重之嫌,代码移植、嵌入现有解决方案都很麻烦;在并非针对数据的并发中语义不明确; FP演员模型:Erlang表现优秀,处理并行、通信的语法简洁、明确,但整体语法晦涩;没有第二个类似的虚拟机,其它宿主语言还不成熟; Java原生方案 演员模型 Kilim:调度器没有真正实现多核并行,仅仅实现了消息机制和纤程(fiber),无助于多核计算;易于实现代码、逻辑的移植,但并没有打破线程的思想,无助于设计; AA方案:架构清晰,Java风格明显,可以媲美Erlang,效率未知,但还没有其上的开发模式,演员模型带来的差异性明显,需尝试进一步封装; 线程Map-Reduce方案:效率差,高并发的重量级应用可行。 易行整体方案 超多核虚拟机+单机并行方案(演员模型?) Hadoop全套方案 从海量存储、海量数据处理(搜索引擎?)开始 需封装足够的算法(提供商?)

眼下存在的问题 如何封装并行调度算法 新的设计模式会是怎样的 小问题 其他问题? 面向对象的语义问题 函数语言的语法问题(以Erlang为例) 去除spawn、receive关键词 去除模式匹配等方面的晦涩语法 领域脚本语言的局限性 PIG LATIN和云数据库上的SQL局限于面向存储的调度 新的设计模式会是怎样的 面向对象的子集——消息机制 面向对象的特例——面向演员 面向对象的补充 小问题 自然界是否真的存在无穷且无序的集合? Round Robin如何最优实现“贪心”的目标? 其他问题?

在不久的将来所需要的 一种高级语言 一种设计模式 一种架构 支持并行处理,封装并行调度算法 仅支持函数式编程——没有代词、变量 Java/C风格 与流行高级语言无缝接合——相同编译、运行环境 一种设计模式 横向与面向对象无缝接合 不支持面向过程的算法实现 可以通过简单的面向过程因素更好地取代仅面向过程的算法实现 一种架构 与云计算基础架构的松耦合 通过采用REST风格的服务协议(HTTP)实现大云

参考资料 The Actor Architecture by Myeong-Wuk Jang Actor-based Programming for Scalable Concurrent Systems by Gul Agha Reflections on Middleware, Meta-Architectures, and Adaptive Distributed Monitoring by Gul Agha Cloud Computing Lecture by Jimmy Lin PIG: web-scale processing by Christopher Olston and many others Kilim: Isolation-typed actors for Java by Sriram Srinivasan MapReduce: Simplified Data Processing on Large Clusters by Jeffrey Dean Sanjay Ghemawat 等…

3Q! Contact me: qinxiaoyu@ceclipse.org