• BLOG
  • ARCHIVE
  • X
  • GITHUB
  • ABOUT
  • RSS
  • 6.824 Lab 1: MapReduce(2016)

    Apr 16, 2016

    本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

    MapReduce框架简介

    1. 应用提供大量输入文件, 一个Map函数, 一个Reduce函数, nReduce个reduce tasks.
    2. RPC服务器启动, 等该worker注册(Register)RPC中. 任务状态为可执行时, 调度器(Schedule)决定如何把task分配给worker和如何容错.
    3. Master把每个输入文件作为一个Map任务, 每个任务至少调用一次doMap. 这些任务或者直接执行或者由DoTask RPC发射, 每个对doMap()的调用读取合适的文件, 对每个文件调用map, 对每个map文件最后产生nReduce个文件.
    4. Master对每个reduce人物至少调用一次doReduce(). doReduce()收集由map产生的nReduce文件(f-*-), 然后对这些文件运行reduce函数. 最终产生nReduce个结果文件.
    5. Master调用mr.merge(), 合并所有的结果文件为一个输出文件.
    6. Master发送Shutdown RPC关闭workers, 然后关闭RPC服务器.
    ...more
  • Go goroutine同步

    Apr 8, 2016

    本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

    出现问题场景: 一个函数run()中包含多个goroutine函数并发, 这些goroutine函数会生成中间文件, 被run()函数运行结束后的check()函数检查. 当goroutine并发时, 并不会阻塞run()的上下文, 可能导致的情况为run()函数执行完毕(但其中的goroutine并发函数没有执行完毕), 导致check()函数执行失败.

    所以我们需要一种操作, 直到当前所有goroutine没有执行完毕, 才进行下一步操作

    所以需要goroutine同步, go提供了sync包和channel机制来解决goroutine之间的同步问题

    ...more
  • Google MapReduce

    Apr 2, 2016

    简介

    • 开始喜欢看基于工程实践总结出来的paper, 而不是功利性的paper, 没有冗长难懂的数据公式和概率统计的paper.
    • 并行计算,分布式数据,处理故障的问题与与大量复杂的业务代码掩盖了原来的简单的大数据处理计算。
    • MapReduce通过函数式风格代码, 自动和并行的运行在集群中. 系统的运行考虑输入数据的划分, 机器间的程序调度, 处理其中出现的错误(容错), 管理机器间通信.
    • MapReduce抽象模型灵感来自于Lisp和其他函数式编程语言
    • MapReduce的主要贡献: 通过简单又不失强大的接口, 在大规模商用集群中自动并行和分布式的处理大规模计算. MapReduce简单易用, 隐藏了底层的并行, 容错, 局部优化和负载均衡. 很多大数据处理逻辑都可以通过MapReduce来表达.
    ...more
  • 快学Go

    Mar 27, 2016

    简介

    • Go是Google开发的一种静态强类型、编译型,并发型,并具有垃圾回收功能的编程语言
    • 面向对象三大特性(封装/继承/多态), Go语言仅仅支持封装
    1
    2
    3
    4
    5
    6
    7
    // 使用go run test.go, 运行下面源码
    package main
    import "fmt"

    func main() {
    fmt.Println("Hello, World")
    }
    ...more
  • 快学Clojure

    Mar 19, 2016

    Why? 为了更好的了解并发和函数式语言.

    简介

    • Clojure是一套现代的Lisp语言的动态语言版(Lisp方言)
    • 函数式语言, 编译型语言
    • 最开始Clojure运行在JVM上, 所有有很好的扩平台特性.
    • 函数式语言的不变性使它们很好的支持并发
    ...more
  • Zhihu实习总结

    Mar 5, 2016

    Zhihu, 一家真正的互联网基因的公司, 一家搭建传播知识平台的社区, 一个充满朝气和青春的创建公司, 一个最初梦想开始的地方.

    2015年10月下旬, 拿着Zhihu的实习offer, 来了一场说走就走的实习, 想想自己当时还是挺冲动的. 可能是被这家正能量的公司所吸引吧. 第一次踏入国内权利的核心, 以为会遇到各种名人, 看到各种好车, 路过各种高楼大厦. 结果, 北京也没有什么出奇的地方, 顶多雾霾比别的城市更严重一些.

    11月2日, 我走入知乎迎接自己实习的第一天, 印象中是一个呆呆的前台小哥接待的我. 如今转眼间五个月就要结束了, 饱含着浓浓的不舍, 不过学校还有些事情需要去处理一下的.

    ...more
  • Supervisor使用教程

    Feb 19, 2016

    本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

    Supervisor: 一个进程控制系统, 用来监控类UNIX系统中的进程, 能够方便的启动, 重启, 关闭进程(已经尝试过Python和Scala项目)

    安装

    Supervisor使用Python开发, 必然是可以使用pip进行安装

    1
    $ (sudo) pip install supervisor
    ...more
  • Scala模式匹配和Try

    Feb 7, 2016

    本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

    2015年最后一天来一发.

    从面向对象语言转来学习函数式语言, 疑惑还是非常多的..

    • 没有return关键字, 默认的最后执行结果返回
    • 迷一般的模式匹配
    • map(映射)语法(虽然之前在Python中用过类似的)
    • 表达式和关键字区别是非常大的.
    • 还有至今不懂的monad
    ...more
  • 聊聊Redis的订阅发布

    Jan 30, 2016

    本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

    为什么做订阅分布?

    随着业务复杂, 业务的项目依赖关系增强, 使用消息队列帮助系统降低耦合度.

    • 订阅分布本身也是一种生产者消费者模式, 订阅者是消费者, 发布者是生产者.

    • 订阅发布模式, 发布者发布消息后, 只要有订阅方, 则多个订阅方会收到同样的消息

    • 生产者消费者模式, 生产者往队列里放入消息, 由多个消费者对一条消息进行抢占.

    • 订阅分布模式可以将一些不着急完成的工作放到其他进程或者线程中进行离线处理.

    ...more
  • 快学Scala

    Jan 16, 2016

    本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

    Scala简介

    Scala 是一门多范式的编程语言, 由Martin Odersky 于2001年基于Funnel的工作开始设计Scala并于2004年正式发布

    • Scala是一种纯面向对象的语言,每个值都是对象
    • Scala是一门多范式编程语言, 支持命令交互式, 函数式, 面向对象
    • 编译型高性能语言(静态)
    • 与Java无缝兼容, 可以使用任何Java库
    ...more
PREVNEXT

© 2014 - 2026 Andrew Liu, powered by Hexo and hexo-theme-apollo.