Spark分区器HashPartitioner详解和扩展

在Spark中,存在两类分区函数:HashPartitioner和RangePartitioner,它们都是继承自Partitioner,主要提供了每个RDD有几个分区(numPartitions)以及对于给定的值返回一个分区ID(0~numPartitions-1),也就是决定这个值是属于那个分区的。

1 HashPartitioner分区

HashPartitioner分区的原理很简单,对于给定的key,计算其hashCode,并除于分区的个数取余,如果余数小于0,则用余数+分区的个数,最后返回的值就是这个key所属的分区ID。实现如下:

class HashPartitione[......]

Read more

分布式系统的Raft算法(转)

过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑。

来自Stanford的新的分布式协议研究称为Raft,它是一个为真实世界应用建立的协议,主要注重协议的落地性和可理解性。

在了解Raft之前,我们先了解Consensus一致性这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议,一致性协议是为了确保容错性,也就是即使系统中有一两个服务器当机,也不[……]

Read more

【转载】从Hadoop到Spark的架构实践

当下,Spark已经在国内得到了广泛的认可和支持:2014年,Spark Summit China在北京召开,场面火爆;同年,Spark Meetup在北京、上海、深圳和杭州四个城市举办,其中仅北京就成功举办了5次,内容更涵盖Spark Core、Spark Streaming、Spark MLlib、Spark SQL等众多领域。而作为较早关注和引入Spark的移动互联网大数据综合服务公司,TalkingData也积极地参与到国内Spark社区的各种活动,并多次在Meetup中分享公司的Spark使用经验。本文则主要介绍TalkingData在大数据平台建设过程中,逐渐引入Spark,并且以[……]

Read more

ubuntu中编译安装protobuf记录

1.下载protobuf
下载地址:https://github.com/google/protobuf/releases

2.编译protobuf
解压下载的tar.gz包,cd到protobuf的目录下,执行以下指令:
./configure
make
make check
make install

3.检查安装是否成功
protoc –version
如果成功,则会输出版本号信息,例如:libprotoc 2.6.1
如果有问题,则会输出错误内容。

4.错误及解决方法
protoc: error while loading shared libra[……]

Read more

Java通过swig调用C++接口

记录一下过程
c++代码: swigshape.h
#ifndef TEST_CODE_SWIG_TEST_SHAPE_H
#define TEST_CODE_SWIG_TEST_SHAPE_H
#pragma once

class Shape {
public:
Shape() {
nshapes++;
}
virtual ~Shape() {
nshapes–;
};
double x, y;
void move(double dx, double dy);
virtual double area() = 0;
virtual double perim[……]

Read more

spark1.3.1单机安装测试备忘

1.下载,安装spark和scala:
下载1.3.1的hadoop2.6版本. spark-1.3.1-bin-hadoop2.6.tgz
下载到本地之后直接解压即可:
helight@helight-xu:/data/spark$ tar zxf spark-1.3.1-bin-hadoop2.6.tgz
下载scala,2.11.6,也是直接解压即可:
helight@helight-xu:/data/spark$ tar zxf scala-2.11.6.tgz

[……]

Read more

thrift maven编译运行

dependencies编译,pom.xml中加入build配置:
   <build >
               < sourceDirectory> src/main/java </ sourceDirectory>
               < plugins>
                      <!– Bind the maven-assembly-plugin to the package phase this will create
                           a j[……]

Read more

zookeeper原理2(转)

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在 某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。本文简单分析 zookeeper的工作原理,对于如何使用zookeeper不是本文讨论的重点。本文主要是对Zookeeper的是想原理进行分析说明。只有在熟悉实现原理之后才[……]

Read more

zookeeper原理

ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。
分布式环境中大多数服务是允许部分失败,也允许数据不一致,但有些最基础的服务是需要高可靠性,高一致性的,这些服务是其他分布式服务运转的基础,比如naming service、分布式lock等,这些分布式的基础服务有以下要求:
高可用性
高一致性
高性能
对于这种有些挑战CAP原则 的服务该如何设计,是一个挑战,也是一个不错的研究课题,Apache的ZooKeeper也许给了我们一个不错的答案。Z[……]

Read more

docker初体验和使用笔记

在ubuntu13.10上体验docker
首先要检测以下你的内核版本
sudo uname -a
Linux helight-Xu 3.11.0-26-generic #45-Ubuntu SMP Tue Jul 15 04:02:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

第一次添加Docker的repository到你的本地秘钥库

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8B[......]

Read more

用户画像数据建模方法(zz)

  原文:http://blog.baifendian.com/?p=8015

从1991年Tim Berners-Lee发明了万维网(World Wide Web)开始,到20年后2011年,互联网真正走向了一个新的里程碑,进入了“大数据时代”。经历了12、13两年热炒之后,人们逐渐冷静下来,更加聚 焦于如何利用大数据挖掘潜在的商业价值,如何在企业中实实在在的应用大数据技术。伴随着大数据应用的讨论、创新,个性化技术成为了一个重要落地点。相比传 统的线下会员管理、问卷调查、购物篮分析,大数据第一次使得企业能够通过互联网便利地获取用户更为广泛的反馈信息,为进一步精准、快速地分析[……]

Read more

一种简单的分布式存储系统

三层架构(MetaNodeMonitor+MetaNode+DataNode),核心是下面两层(MetaNode+DataNode),下面两层是可以脱离Monitor独立运行。

Monitor的存在主要是作为一个MetaNode的监控和MetaNode出错时进行切换角色,并且通知DataNode进行切换。

DataNode在获取主MetaNode的Ip后进行本地缓存,不需要主动询问Monitor,而且DataNode还可以主动从任意MetaNode获取主MetaNode的IP信息。

MetaNode作为整个系统的大脑,存储所有的文件元信息,这一点和HDFS的NameNode是[……]

Read more