Category Archives: 分布式系统

1.多播(Multicast)
组播是将某些节点划分为一个组,然后信息发送者将信息发给组内的每一个节点

2.容错与扩展性(Fault-Tolerance And ScalaBility)
一般而言,进行通讯时要考虑如下因素:

节点可能会出现意外;数据包有可能丢失;1000个节点

3.集中统一(Centralized)
想要实现多播的话,最简单的形式是一种集中的方法。消息发送者有一个收件人列表,然后发送者对列表中的每一个接收者都发送一份消息。它的容缺缺点是,如果在循环发送途中,发送者出错了,那么剩下的一半接收者就不可能收到消息了。此外,该方法的延时很高,因为只有一个发送者在不停发送,所以会导致接收者存在延时,这在接收者名单很长的时候表现尤为明显。

前言
这系列笔记是记录Coursera上伊利诺伊大学厄巴纳香槟分校 Prof. Indranil Gupta 所开设课程“Cloud Computing Concepts”课程内容的。该课程主要涉及的是“云”本身的框架,并不涉及到基于云计算的应用编写,如果需要学习应用编写,可以查看UIUC推出的云计算专项课程。由于水平有限,文中难免会有不准确的地方,在此诚挚欢迎大家指出,共同交流完善。

在之前的学习中我们知道,如果在算法的训练样本量m不足的时候得到的模型具有高方差(High Variance),那么此时我们需要更多的训练样本。但是如果算法具有高偏差,提高样本数量并不会显著改善模型的性能。

在今天,数据集很容易就可以达到m=100,000,000这样的数量级(比如人口调查、通讯消息等)。在这样的背景下,梯度下降算法每一步都需要汇总上亿个训练样本来完成一次迭代。那么我们能不能通过一些方法来分流如此大量的计算呢?

Kafka是什么
在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

Apache Kafka是一个开源消息队列,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
Kafka对消息保存时根据Topic进行归类,发送消息者被称为Producer,消息接收者被称为Consumer,此外Kafka集群由多个Kafka实例构成,每一个实例(server)称为broker。
无论是Kafka集群,还是producer和consumer,都依赖于Zookeeper集群保存一些meta信息,来保证系统的可用性。

在这篇文章中,我想要更进一步地探讨数据处理模式,抓住更多的细节,并且结合它们的实际使用案例进行分析。这篇文章的脉络主要依照如下两个部分展开:
 流处理 101 终极版:简要地回顾一下Streaming 101中所介绍的概念,然后补充一些使用案例来突出重点。
 流处理 102:Streaming 101的配套内容,引入了处理无界数据时,在一些细节上的重要概念,并且使用一些使用案例来帮助理解。

原文:The world beyond batch: Streaming 101

参看“流处理系统与实时程序会话”,the Strata Data Conference in London。

编辑批注:这是关于数据处理演变的两部曲文章中的第一篇,聚焦于流式系统,无穷数据集,以及大数据的未来。

我们有足够的理由可以说,流数据处理对于现今的大数据来说,是一个不容小觑的内容。这些理由包括但不限于:

商业活动愈发渴望实时性更强的数据,而把数据转化为流数据进行处理,正好是一个实现更低延迟的好方法。
在海量、无穷的数据集越来越常见的今天,使用这种专门用来处理无穷无尽的数据的系统,能够使我们处理数据更加得心应手。
因为流处理在数据到达时就开始处理,所以,随着时间推移,它能够使得后续任务负载的传播更加平稳,进而使得资源的消耗更具有一致性和可预测性。

离线计算的特点
离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示

代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据、Kettle任务调度

3.流式计算的特点
流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示

代表技术:Flume实时获取数据、Kafka实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存

一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果

4.流式计算与实时计算的区别
最大区别:实时收集、实时计算、实时展示

1、控制台:
进行Hadoop集群任务管理的时候,我们可以通过访问任意一台机器的8088端口

hadoop01:8088/cluster
进入图形界面。

2、驱动分析
我们以WordCount这个jar为例,进行分析,其中的main方法称为驱动:

public class WordCount
{
public static void main(String[] args) throws Exception // 整个main方法是驱动
{
Job job = new Job(conf,”word count”); // 提交job
job.setJarByClass(WordCount.class); // 定义要运行的jar地址
job.setMapperClass(TokenizerMapper.class); // 定义Mapper
job.setCombinerClass(IntSumReducer.class); // 定义Combiner
job.setReducerClass(IntSumReducer.class); // 定义Reducer
job.setOutputKeyClass(Text.class); // 定义输出的key的类,这里是Text
job.setOutputValueClass(IntWritable.class); // 定义输出的Value的类,这里是可序列化的

一、HDFS Java API的使用
操作HDFS的常用api有下面几种:

创建目录、上传文件、下传文件
移动文件、重命名文件、删除文件
查看HDFS存储的文件列表
查看HDFS存储的所有文件信息

一、前言
这个系列的笔记是根据网上的大数据教程记录的。笔记内容以课堂内容为主,方便复习。这个课程主要涉及了Hadoop离线处理框架、Storm实时处理工具、Kafka消息队列等方面的知识,内容不是特别深入,仅供入门学习。限于我仍是初学者,对于课程的笔记难免有不准确的地方,欢迎大家指正。

二、数据部
1、数据部的一般组织架构
对于目前流行的“大数据”一词,其实我个人会倾向于尽量避开,因为它涉及到的内容实在是太宽泛了。

在这里,将企业与数据相关的部门泛称为数据部。首先来看看,这个部门中有哪些岗位/职责。

对于离线平台组:

Hadoop集群运维工程师:Linux运维、Hadoop集群运维调优、服务器运维
Hive工程师:类似于用sql来写分析
ETL工程师:Flume数据收集、数据加载Hadoop、数据标准化
对于实时平台组:

相当于JAVA EE继续往后深入,其中流式计算框架有Storm/JStorm,消息队列有Kafka/Metaq

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert