文档库 最新最全的文档下载
当前位置:文档库 › 分布式计算开源框架Hadoop介绍

分布式计算开源框架Hadoop介绍

分布式计算开源框架Hadoop介绍
分布式计算开源框架Hadoop介绍

分布式计算开源框架Hadoop介绍

── 分布式计算开源框架Hadoop入门实践(一)

在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作。然而未来,对于海量日志分析的工作,还是需要有所准备。现在最火的技术词汇莫过于“云计算”,在Open API日益盛行的今天,互联网应用的数据将会越来越有价值,如何去分析这些数据,挖掘其内在价值,就需要分布式计算来支撑海量数据的分析工作。

回过头来看,早先那种多线程,多任务分解的日志分析设计,其实是分布式计算的一个单机版缩略,如何将这种单机的工作进行分拆,变成协同工作的集群,其实就是分布式计算框架设计所涉及的。在去年参加BEA大会的时候,BEA和VMWare合作采用虚拟机来构建集群,无非就是希望使得计算机硬件能够类似于应用程序中资源池的资源,使用者无需关心资源的分配情况,从而最大化了硬件资源的使用价值。分布式计算也是如此,具体的计算任务交由哪一台机器执行,执行后由谁来汇总,这都由分布式框架的Master来抉择,而使用者只需简单地将待分析内容提供给分布式计算系统作为输入,就可以得到分布式计算后的结果。

Hadoop是Apache开源组织的一个分布式计算开源框架,在很多大型网站上都已经得到了应用,如亚马逊、Facebook和Yahoo等等。对于我来说,最近的一个使用点就是服务集成平台的日志分析。服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和索引建立就是两大应用场景)。

当前没有正式确定使用,所以也是自己业余摸索,后续所写的相关内容,都是一个新手的学习过程,难免会有一些错误,只是希望记录下来可以分享给更多志同道合的朋友。

什么是Hadoop?

搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做)。但很多开发的朋友在做了多年项目以后,都习惯是先How,然后What,最后才是Why,这样只会让自己变得浮躁,同时往往会将技术误用于不适合的场景。

Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google

的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。

MapReduce从它名字上来看就大致可以看出个缘由,两个动词Map和Reduce,“Map(展开)”就是将一个任务分解成为多个任务,“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。这不是什么新思想,其实在前面提到的多线程,多任务的设计就可以找到这种思想的影子。不论是现实社会,还是在程序设计中,一项工作往往可以被拆分成为多个任务,任务之间的关系可以分为两种:一种是不相关的任务,可以并行执行;另一种是任务之间有相互的依赖,先后顺序不能够颠倒,这类任务是无法并行处理的。回到大学时期,教授上课时让大家去分析关键路径,无非就是找最省时的任务分解执行方式。在分布式系统中,机器集群就可以看作硬件资源池,将并行的任务拆分,然后交由每一个空闲机器资源去处理,能够极大地提高计算效率,同时这种资源无关性,对于计算集群的扩展无疑提供了最好的设计保证。(其实我一直认为Hadoop的卡通图标不应该是一个小象,应该是蚂蚁,分布式计算就好比蚂蚁吃大象,廉价的机器群可以匹敌任何高性能的计算机,纵向扩展的曲线始终敌不过横向扩展的斜线)。任务分解处理以后,那就需要将处理以后的结果再汇总起来,这就是Reduce要做的工作。

图1:MapReduce结构示意图

上图就是MapReduce大致的结构图,在Map前还可能会对输入的数据有Split(分割)的过程,保证任务并行效率,在Map之后还会有Shuffle(混合)的过程,对于提高Reduce的效率以及减小数据传输的压力有很大的帮助。后面会具体提及这些部分的细节。

HDFS是分布式计算的存储基石,Hadoop的分布式文件系统和其他分布式文件系统有很多类似的特质。分布式文件系统基本的几个特点:

1对于整个集群有单一的命名空间。

2数据一致性。适合一次写入多次读取的模型,客户端在文件没有被成功创建之前无法看到文件存在。

3文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且根据配置会由复制文件块来保证数据的安全性。

图2:HDFS结构示意图

即Hadoop Distributed File System (Hadoop分布式文件系统)

上图中展现了整个HDFS三个重要角色:NameNode、DataNode和Client。NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。Client就是需要获取分布式文件系统文件的应用程序。这里通过三个操作来说明他们之间的交互关系。

文件写入:

4Client向NameNode发起文件写入的请求。

5NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode 的信息。

6Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

文件读取:

7Client向NameNode发起文件读取的请求。

8NameNode返回文件存储的DataNode的信息。

9Client读取文件信息。

文件Block复制:

10NameNode发现部分文件的Block不符合最小复制数或者部分DataNode失效。

11通知DataNode相互复制Block。

12DataNode开始直接相互复制。

最后再说一下HDFS的几个设计特点(对于框架设计值得借鉴):

13Block的放置:默认不配置。一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定DataNode同一Rack上的DataNode上。备份无非就是为了数据安全,考虑同一Rack 的失败情况以及不同Rack之间数据拷贝性能问题就采用这种配置方式。

14心跳检测DataNode的健康状况,如果发现问题就采取数据备份的方式来保证数据的安全性。

15数据复制(场景为DataNode失败、需要平衡DataNode的存储利用率和需要平衡DataNode数据交互压力等情况):这里先说一下,使用HDFS的balancer命令,可以配置一个Threshold来平衡每一个DataNode磁盘利用率。例如设置了Threshold为10%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值Threshold以上,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。

16数据交验:采用CRC32作数据交验。在文件Block写入的时候除了写入数据还会写入交验信息,在读取的时候需要交验后再读入。

17NameNode是单点:如果失败的话,任务处理信息将会纪录在本地文件系统和远端的文件系统中。

18数据管道性的写入:当客户端要写入文件到DataNode上,首先客户端读取一个Block 然后写到第一个DataNode上,然后由第一个DataNode传递到备份的DataNode上,一直到所有需要写入这个Block的NataNode都成功写入,客户端才会继续开始写下一个Block。

19安全模式:在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系

统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。

安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。

下面综合MapReduce和HDFS来看Hadoop的结构:

图3:Hadoop结构示意图

在Hadoop的系统中,会有一台Master,主要负责NameNode的工作以及JobTracker的工作。JobTracker的主要职责就是启动、跟踪和调度各个Slave的任务执行。还会有多台Slave,每一台Slave通常具有DataNode的功能并负责TaskTracker的工作。TaskTracker根据应用要求来结合本地数据执行Map任务以及Reduce任务。

说到这里,就要提到分布式计算最重要的一个设计点:Moving Computation is Cheaper than Moving Data。就是在分布式处理中,移动数据的代价总是高于转移计算的代价。简单来说就是分而治之的工作,需要将数据也分而存储,本地任务处理本地数据然后归总,这样才会保证分布式计算的高效性。

为什么要选择Hadoop?

说完了What,简单地说一下Why。官方网站已经给了很多的说明,这里就大致说一下其优点及使用的场景(没有不好的工具,只用不适用的工具,因此选择好场景才能够真正发挥分布式计算

的作用):

20可扩展:不论是存储的可扩展还是计算的可扩展都是Hadoop的设计根本。

21经济:框架可以运行在任何普通的PC上。

22可靠:分布式文件系统的备份恢复机制以及MapReduce的任务监控保证了分布式处理的可靠性。

23高效:分布式文件系统的高效数据交互实现以及MapReduce结合Local Data处理的模式,为高效处理海量的信息作了基础准备。

使用场景:个人觉得最适合的就是海量数据的分析,其实Google最早提出MapReduce也就是为了海量数据分析。同时HDFS最早是为了搜索引擎实现而开发的,后来才被用于分布式计算框架中。海量数据被分割于多个节点,然后由每一个节点并行计算,将得出的结果归并到输出。同时第一阶段的输出又可以作为下一阶段计算的输入,因此可以想象到一个树状结构的分布式计算图,在不同阶段都有不同产出,同时并行和串行结合的计算也可以很好地在分布式集群的资源下得以高效的处理。

Hadoop中的集群配置和使用技巧

──分布式计算开源框架Hadoop入门实践(二)

其实参看Hadoop官方文档已经能够很容易配置分布式框架运行环境了,不过这里既然写了就再多写一点,同时有一些细节需要注意的也说明一下,其实也就是这些细节会让人摸索半天。Hadoop可以单机跑,也可以配置集群跑,单机跑就不需要多说了,只需要按照Demo 的运行说明直接执行命令即可。这里主要重点说一下集群配置运行的过程。

环境

7台普通的机器,操作系统都是Linux。内存和CPU就不说了,反正Hadoop一大特点就是机器在多不在精。JDK必须是1.5以上的,这个切记。7台机器的机器名务必不同,后续会谈到机器名对于MapReduce有很大的影响。

部署考虑

正如上面我描述的,对于Hadoop的集群来说,可以分成两大类角色:Master和Slave,前者主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行,后者配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。本来我打算看看一台机器是否可以配置成Master,同时也作为Slave使用,不过发现在NameNode初始化的过程中以及TaskTracker执行过程中机器名配置好像有冲突(NameNode和TaskTracker对

于Hosts的配置有些冲突,究竟是把机器名对应IP放在配置前面还是把Localhost对应IP 放在前面有点问题,不过可能也是我自己的问题吧,这个大家可以根据实施情况给我反馈)。最后反正决定一台Master,六台Slave,后续复杂的应用开发和测试结果的比对会增加机器配置。

实施步骤

1在所有的机器上都建立相同的目录,也可以就建立相同的用户,以该用户的home 路径来做hadoop的安装路径。例如我在所有的机器上都建立了/home/wenchu。

2下载Hadoop,先解压到Master上。这里我是下载的0.17.1的版本。此时Hadoop的安装路径就是/home/wenchu/hadoop-0.17.1。

3解压后进入conf目录,主要需要修改以下文件:hadoop-env.sh,hadoop-site.xml、masters、slaves。

Hadoop的基础配置文件是hadoop-default.xml,看Hadoop的代码可以知道,默认建立一个Job的时候会建立Job的Config,Config首先读入hadoop-default.xml的配置,然后再读入hadoop-site.xml的配置(这个文件初始的时候配置为空),hadoop-site.xml中主要配置你需要覆盖的hadoop-default.xml的系统级配置,以及你需要在你的MapReduce过程中使用的自定义配置(具体的一些使用例如final等参考文档)。

以下是一个简单的hadoop-site.xml的配置:

https://www.wendangku.net/doc/22209037.html,//你的namenode的配置,机器名加端口

hdfs://10.2.224.46:54310/

mapred.job.tracker//你的JobTracker的配置,机器名加端口

hdfs://10.2.224.46:54311/

dfs.replication//数据需要备份的数量,默认是三

1

hadoop.tmp.dir//Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。

/home/wenchu/hadoop/tmp/

mapred.child.java.opts//java虚拟机的一些参数可以参照配置

-Xmx512m

dfs.block.size//block的大小,单位字节,后面会提到用处,必须是512的倍数,因为采用crc作文件完整性校验,默认配置512是checksum的最小单元。

5120000

The default block size for new files.

hadoop-env.sh文件只需要修改一个参数:

# The java implementation to use. Required.

export JA V A_HOME=/usr/ali/jdk1.5.0_10

配置你的Java路径,记住一定要1.5版本以上,免得莫名其妙出现问题。

Masters中配置Masters的IP或者机器名,如果是机器名那么需要在/etc/hosts中有所设置。Slaves中配置的是Slaves的IP或者机器名,同样如果是机器名需要在/etc/hosts中有所设置。范例如下,我这里配置的都是IP:

Masters:

10.2.224.46

Slaves:

10.2.226.40

10.2.226.39

10.2.226.38

10.2.226.37

10.2.226.41

10.2.224.36

建立Master到每一台Slave的SSH受信证书。由于Master将会通过SSH启动所有Slave的Hadoop,所以需要建立单向或者双向证书保证命令执行时不需要再输入密码。

在Master和所有的Slave机器上执行:ssh-keygen -t rsa。执行此命令的时候,看到提示只需要回车。然后就会在/root/.ssh/下面产生id_rsa.pub的证书文件,通过scp将Master 机器上的这个文件拷贝到Slave上(记得修改名称),例如:scp root@masterIP:/root/.ssh/id_rsa.pub /root/.ssh/46_rsa.pub,然后执行cat /root/.ssh/46_rsa.pub >>/root/.ssh/authorized_keys,建立authorized_keys文件即可,可以打开这个文件看看,也就是rsa的公钥作为key,user@IP作为value。此时可以试验一下,从master ssh到slave已经不需要密码了。由slave反向建立也是同样。为什么要反向呢?其实如果一直都是Master启动和关闭的话那么没有必要建立反向,只是如果想在Slave也可以关闭Hadoop就需要建立反向。

5将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,根据每一个Slave 的Java_HOME的不同修改其hadoop-env.sh。

修改Master上/etc/profile:

新增以下内容:(具体的内容根据你的安装路径修改,这步只是为了方便使用)

export HADOOP_HOME=/home/wenchu/hadoop-0.17.1

export PATH=$PATH:$HADOOP_HOME/bin

6修改完毕后,执行source /etc/profile来使其生效。

7在Master上执行Hadoop namenode –format,这是第一需要做的初始化,可以看作格式化吧,以后除了在上面我提到过删除了Master上的hadoop.tmp.dir目录,否则是不需要再次执行的。

8然后执行Master上的start-all.sh,这个命令可以直接执行,因为在6中已经添加到了path路径,这个命令是启动hdfs和mapreduce两部分,当然你也可以分开单独启动hdfs 和mapreduce,分别是bin目录下的start-dfs.sh和start-mapred.sh。

9检查Master的logs目录,看看Namenode日志以及JobTracker日志是否正常启动。

10检查Slave的logs目录看看Datanode日志以及TaskTracker日志是否正常。

11如果需要关闭,那么就直接执行stop-all.sh即可。

以上步骤就可以启动Hadoop的分布式环境,然后在Master的机器进入Master的安装目录,执行hadoop jar hadoop-0.17.1-examples.jar wordcount输入路径和输出路径,就可以看到字数统计的效果了。此处的输入路径和输出路径都指的是HDFS中的路径,因此你可以首先通过拷贝本地文件系统中的目录到HDFS中的方式来建立HDFS中的输入路径:

hadoop dfs -copyFromLocal /home/wenchu/test-in test-in。其中/home/wenchu/test-in是本地路径,test-in是将会建立在HDFS中的路径,执行完毕以后可以通过hadoop dfs –ls看到test-in 目录已经存在,同时可以通过hadoop dfs –ls test-in查看里面的内容。输出路径要求是在HDFS 中不存在的,当执行完那个demo以后,就可以通过hadoop dfs –ls输出路径看到其中的内容,具体文件的内容可以通过hadoop dfs –cat文件名称来查看。

经验总结和注意事项(这部分是我在使用过程中花了一些时间走的弯路):

12Master和Slave上的几个conf配置文件不需要全部同步,如果确定都是通过Master 去启动和关闭,那么Slave机器上的配置不需要去维护。但如果希望在任意一台机器都可以启动和关闭Hadoop,那么就需要全部保持一致了。

13Master和Slave机器上的/etc/hosts中必须把集群中机器都配置上去,就算在各个配置文件中使用的是IP。这个吃过不少苦头,原来以为如果配成IP就不需要去配置Host,结果发现在执行Reduce的时候总是卡住,在拷贝的时候就无法继续下去,不断重试。

另外如果集群中如果有两台机器的机器名如果重复也会出现问题。

14如果在新增了节点或者删除节点的时候出现了问题,首先就去删除Slave的hadoop.tmp.dir,然后重新启动试试看,如果还是不行那就干脆把Master的hadoop.tmp.dir 删除(意味着dfs上的数据也会丢失),如果删除了Master的hadoop.tmp.dir,那么就需要重新namenode –format。

15Map任务个数以及Reduce任务个数配置。前面分布式文件系统设计提到一个文件被放入到分布式文件系统中,会被分割成多个block放置到每一个的DataNode上,默认

dfs.block.size应该是64M,也就是说如果你放置到HDFS上的数据小于64,那么将只有一个Block,此时会被放置到某一个DataNode中,这个可以通过使用命令:hadoop dfsadmin –report就可以看到各个节点存储的情况。也可以直接去某一个DataNode查看目录:hadoop.tmp.dir/dfs/data/current就可以看到那些block了。Block的数量将会直接影响到Map的个数。当然可以通过配置来设定Map和Reduce的任务个数。Map的个数通常默认和HDFS需要处理的blocks相同。也可以通过配置Map的数量或者配置minimum split size来设定,实际的个数为:max(min(block_size,data/#maps),min_split_size)。Reduce 可以通过这个公式计算:0.95*num_nodes*mapred.tasktracker.tasks.maximum。

总的来说出了问题或者启动的时候最好去看看日志,这样心里有底。

Hadoop中的命令(Command)总结

这部分内容其实可以通过命令的Help以及介绍了解,我主要侧重于介绍一下我用的比较多的几个命令。Hadoop dfs 这个命令后面加参数就是对于HDFS的操作,和Linux操作系统的命令很类似,例如:

?Hadoop dfs –ls就是查看/usr/root目录下的内容,默认如果不填路径这就是当前用户路径;

?Hadoop dfs –rmr xxx就是删除目录,还有很多命令看看就很容易上手;

?Hadoop dfsadmin –report这个命令可以全局的查看DataNode的情况;

?Hadoop job后面增加参数是对于当前运行的Job的操作,例如list,kill等;

?Hadoop balancer就是前面提到的均衡磁盘负载的命令。

其他就不详细介绍了。

Hadoop基本流程与应用开发

── 分布式计算开源框架Hadoop入门实践(三)Hadoop基本流程

一个图片太大了,只好分割成为两部分。根据流程图来说一下具体一个任务执行的情况。

1在分布式环境中客户端创建任务并提交。

1InputFormat做Map前的预处理,主要负责以下工作:

验证输入的格式是否符合JobConfig的输入定义,这个在实现Map和构建Conf

的时候就会知道,不定义可以是Writable的任意子类。

1将input的文件切分为逻辑上的输入InputSplit,其实这就是在上面提到的

在分布式文件系统中blocksize是有大小限制的,因此大文件会被划分为多个

block。

1通过RecordReader来再次处理inputsplit为一组records,输出给Map。

(inputsplit只是逻辑切分的第一步,但是如何根据文件中的信息来切分还需要

RecordReader来实现,例如最简单的默认方式就是回车换行的切分)2RecordReader处理后的结果作为Map的输入,Map执行定义的Map逻辑,输出处理后的key和value对应到临时中间文件。

3Combiner可选择配置,主要作用是在每一个Map执行完分析以后,在本地优先作Reduce的工作,减少在Reduce过程中的数据传输量。

4Partitioner可选择配置,主要作用是在多个Reduce的情况下,指定Map的结果由某一个Reduce处理,每一个Reduce都会有单独的输出文件。(后面的代码实例中有介绍使用场景)

5Reduce执行具体的业务逻辑,并且将处理结果输出给OutputFormat。

6OutputFormat的职责是,验证输出目录是否已经存在,同时验证输出结果类型是否如Config中配置,最后输出Reduce汇总后的结果。

业务场景和代码范例

业务场景描述:可设定输入和输出路径(操作系统的路径非HDFS路径),根据访问日志分析某一个应用访问某一个API的总次数和总流量,统计后分别输出到两个文件中。这里仅仅为了测试,没有去细分很多类,将所有的类都归并于一个类便于说明问题。

测试代码类图

LogAnalysiser就是主类,主要负责创建、提交任务,并且输出部分信息。内部的几个子类用途可以参看流程中提到的角色职责。具体地看看几个类和方法的代码片断:

LogAnalysiser::MapClass

public static class MapClass extends MapReduceBase

implements Mapper

{

public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter)

throws IOException

{

String line = value.toString();//没有配置RecordReader,所以默认采用line的实现,key就是行号,value就是行内容

if (line == null || line.equals(""))

return;

String[] words = line.split(",");

if (words == null || words.length < 8)

return;

String appid = words[1];

String apiName = words[2];

LongWritable recbytes = new LongWritable(Long.parseLong(words[7]));

Text record = new Text();

record.set(new StringBuffer("flow::").append(appid)

.append("::").append(apiName).toString()); reporter.progress();

output.collect(record, recbytes);//输出流量的统计结果,通过flow::作为前缀来标示。

record.clear();

record.set(new

StringBuffer("count::").append(appid).append("::").append(apiName ).toString());

output.collect(record, new LongWritable(1));//输出次数的统计结果,通过count::作为前缀来标示

}

}

LogAnalysiser:: PartitionerClass

public static class PartitionerClass implements Partitioner

{

public int getPartition(Text key, LongWritable value, int numPartitions)

{

if (numPartitions >= 2)//Reduce 个数,判断流量还是次数的统计分配到不同的Reduce

if (key.toString().startsWith("flow::"))

return 0;

else

return 1;

else

return 0;

}

public void configure(JobConf job){}

}

LogAnalysiser:: CombinerClass

参看ReduceClass,通常两者可以使用一个,不过这里有些不同的处理就分成了两个。在ReduceClass中蓝色的行表示在CombinerClass中不存在。

LogAnalysiser:: ReduceClass

public static class ReduceClass extends MapReduceBase

implements Reducer

{

public void reduce(Text key, Iterator values, OutputCollector output, Reporter reporter)throws IOException

{

Text newkey = new Text();

newkey.set(key.toString().substring(key.toString().indexOf("::")+ 2));

LongWritable result = new LongWritable();

long tmp = 0;

int counter = 0;

while(values.hasNext())//累加同一个key的统计结果

{

tmp = tmp + values.next().get();

counter = counter +1;//担心处理太久,JobTracker长时间没有收到报告会认为TaskTracker已经失效,因此定时报告一下

if (counter == 1000)

{

counter = 0;

reporter.progress();

}

}

result.set(tmp);

output.collect(newkey, result);//输出最后的汇总结果

}

}

LogAnalysiser

public static void main(String[] args)

{

try

{

run(args);

} catch (Exception e)

{

e.printStackTrace();

}

}

public static void run(String[] args) throws Exception

{

if (args == null || args.length <2)

{

System.out.println("need inputpath and outputpath");

return;

}

String inputpath = args[0];

String outputpath = args[1];

String shortin = args[0];

String shortout = args[1];

if (shortin.indexOf(File.separator) >= 0)

shortin = shortin.substring(https://www.wendangku.net/doc/22209037.html,stIndexOf(File.separator));

if (shortout.indexOf(File.separator) >= 0)

shortout = shortout.substring(https://www.wendangku.net/doc/22209037.html,stIndexOf(File.separator));

SimpleDateFormat formater = new SimpleDateFormat("yyyy.MM.dd");

shortout = new StringBuffer(shortout).append("-")

.append(formater.format(new Date())).toString();

if (!shortin.startsWith("/"))

shortin = "/" + shortin;

if (!shortout.startsWith("/"))

shortout = "/" + shortout;

shortin = "/user/root" + shortin;

shortout = "/user/root" + shortout;

File inputdir = new File(inputpath);

File outputdir = new File(outputpath);

if (!inputdir.exists() || !inputdir.isDirectory())

{

System.out.println("inputpath not exist or isn't dir!"); return;

}

if (!outputdir.exists())

{

new File(outputpath).mkdirs();

}

JobConf conf = new JobConf(new Configuration(),LogAnalysiser.class);//构建Config

FileSystem fileSys = FileSystem.get(conf);

fileSys.copyFromLocalFile(new Path(inputpath), new Path(shortin));//将本地文件系统的文件拷贝到HDFS中

conf.setJobName("analysisjob");

conf.setOutputKeyClass(Text.class);//输出的key类型,在OutputFormat会检查

conf.setOutputValueClass(LongWritable.class); //输出的value类型,在OutputFormat会检查

conf.setMapperClass(MapClass.class);

conf.setCombinerClass(CombinerClass.class);

conf.setReducerClass(ReduceClass.class);

conf.setPartitionerClass(PartitionerClass.class);

conf.set("mapred.reduce.tasks", "2");//强制需要有两个Reduce来分别处理流量和次数的统计

FileInputFormat.setInputPaths(conf, shortin);//hdfs中的输入路径

FileOutputFormat.setOutputPath(conf, new Path(shortout));//hdfs中输出路径

Date startTime = new Date();

System.out.println("Job started: " + startTime);

JobClient.runJob(conf);

Date end_time = new Date();

System.out.println("Job ended: " + end_time);

System.out.println("The job took " + (end_time.getTime() - startTime.getTime()) /1000 + " seconds.");

//删除输入和输出的临时文件

fileSys.copyToLocalFile(new Path(shortout),new Path(outputpath));

fileSys.delete(new Path(shortin),true);

fileSys.delete(new Path(shortout),true);

}

以上的代码就完成了所有的逻辑性代码,然后还需要一个注册驱动类来注册业务Class为一个可标示的命令,让hadoop jar可以执行。

public class ExampleDriver {

public static void main(String argv[]){

ProgramDriver pgd = new ProgramDriver();

try {

pgd.addClass("analysislog", LogAnalysiser.class, "A map/reduce program that analysis log .");

pgd.driver(argv);

}

catch(Throwable e){

e.printStackTrace();

}

}

}

将代码打成jar,并且设置jar的mainClass为ExampleDriver这个类。在分布式环境启动以后执行如下语句:

hadoop jar analysiser.jar analysislog /home/wenchu/test-in /home/wenchu/test-out

在/home/wenchu/test-in中是需要分析的日志文件,执行后就会看见整个执行过程,包括了Map和Reduce的进度。执行完毕会在/home/wenchu/test-out下看到输出的内容。有两个文件:part-00000和part-00001分别记录了统计后的结果。如果需要看执行的具体情况,可以看在输出目录下的_logs/history/xxxx_analysisjob,里面罗列了所有的Map,Reduce的创建情况以及执行情况。在运行期也可以通过浏览器来查看Map,Reduce的情况:http://MasterIP:50030/jobtracker.jsp

Hadoop集群测试

首先这里使用上面的范例作为测试,也没有做太多的优化配置,这个测试结果只是为了看看集群的效果,以及一些参数配置的影响。

文件复制数为1,blocksize 5M

Slave数处理记录数(万条) 执行时间(秒)

2 95 38

2 950 337

4 9

5 24

4 950 178

6 95 21

6 950 114

Blocksize 5M

Slave数处理记录数(万条) 执行时间(秒)2(文件复制数为1)950 337

2(文件复制数为3)950 339

6(文件复制数为1)950 114

6(文件复制数为3)950 117

文件复制数为1

Slave数处理记录数(万条) 执行时间(秒)6(blocksize 5M) 95 21

6(blocksize 77M) 95 26

4(blocksize 5M) 950 178

4(blocksize 50M) 950 54

6(blocksize 5M) 950 114

6(blocksize 50M) 950 44

6(blocksize 77M) 950 74

测试的数据结果很稳定,基本测几次同样条件下都是一样。通过测试结果可以看出以下几点:

7机器数对于性能还是有帮助的(等于没说^_^)。

8文件复制数的增加只对安全性有帮助,但是对于性能没有太多帮助。而且现在采取的是将操作系统文件拷贝到HDFS中,所以备份多了,准备的时间很长。

9blocksize对于性能影响很大,首先如果将block划分的太小,那么将会增加job 的数量,同时也增加了协作的代价,降低了性能,但是配置的太大也会让job不能最大化并行处理。所以这个值的配置需要根据数据处理的量来考虑。

10最后就是除了这个表里面列出来的结果,应该去仔细看输出目录中的_logs/history 中的xxx_analysisjob这个文件,里面记录了全部的执行过程以及读写情况。这个可以更加清楚地了解哪里可能会更加耗时。

随想

“云计算”热的烫手,就和SAAS、Web2及SNS等一样,往往都是在搞概念,只有真正踏踏实实的大型互联网公司,才会投入人力物力去研究符合自己的分布式计算。其实当你的数据量没有那么大的时候,这种分布式计算也就仅仅只是一个玩具而已,只有在真正解决问题的过程中,它深层次的问题才会被挖掘出来。

这三篇文章(分布式计算开源框架Hadoop介绍,Hadoop中的集群配置和使用技巧)仅仅是为了给对分布式计算有兴趣的朋友抛个砖,要想真的掘到金子,那么就踏踏实实的去用、去想、去分析。或者自己也会更进一步地去研究框架中的实现机制,在解决自己问题的同时,也能够贡献一些什么。

前几日看到有人跪求成为架构师的方式,看了有些可悲,有些可笑,其实有多少架构师知道什么叫做架构?架构师的职责是什么?与其追求这么一个名号,还不如踏踏实实地做块石头沉到水

Hadoop云计算实验报告

Hadoop云计算实验报告

Hadoop云计算实验报告 1实验目的 在虚拟机Ubuntu上安装Hadoop单机模式和集群; 编写一个用Hadoop处理数据的程序,在单机和集群上运行程序。 2实验环境 虚拟机:VMware 9 操作系统:ubuntu-12.04-server-x64(服务器版),ubuntu-14.10-desktop-amd64(桌面版)Hadoop版本:hadoop 1.2.1 Jdk版本:jdk-7u80-linux-x64 Eclipse版本:eclipse-jee-luna-SR2-linux-gtk-x86_64 Hadoop集群:一台namenode主机master,一台datanode主机salve, master主机IP为10.5.110.223,slave主机IP为10.5.110.207。 3实验设计说明 3.1主要设计思路 在ubuntu操作系统下,安装必要软件和环境搭建,使用eclipse编写程序代码。实现大数据的统计。本次实验是统计软件代理系统操作人员处理的信息量,即每个操作人员出现的次数。程序设计完成后,在集成环境下运行该程序并查看结果。 3.2算法设计 该算法首先将输入文件都包含进来,然后交由map程序处理,map程序将输入读入后切出其中的用户名,并标记它的数目为1,形成的形式,然后交由reduce处理,reduce 将相同key值(也就是word)的value值收集起来,形成的形式,之后再将这些1值加起来,即为用户名出现的个数,最后将这个对以TextOutputFormat 的形式输出到HDFS中。 3.3程序说明 1) UserNameCountMap类继承了org.apache.hadoop.mapreduce.Mapper,4个泛型类 型分别是map函数输入key的类型,输入value的类型,输出key的类型,输出value 的类型。 2) UserNameCountReduce类继承了org.apache.hadoop.mapreduce.Reducer,4个泛 型类型含义与map类相同。 3) main函数通过addInputPath将数据文件引入该类,在通过setOutputPath将生成 结果转为一个文件,实现生成结果,即统计结果的查看。 FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); 程序具体代码如附件中源程序。

Hadoop大数据平台架构与实践--基础篇

Hadoop大数据平台架构与实践--基础篇 大数据时代已经到来,越来越多的行业面临着大量数据需要存储以及分析的挑战。Hadoop,作为一个开源的分布式并行处理平台,以其高扩展、高效率、高可靠等优点,得到越来越广泛的应用。 本课旨在培养理解Hadoop的架构设计以及掌握Hadoop的运用能力。 导师简介 Kit_Ren,博士,某高校副教授,实战经验丰富,曾担任过大型互联网公司的技术顾问,目前与几位志同道合的好友共同创业,开发大数据平台。 课程须知 本课程需要童鞋们提前掌握Linux的操作以及Java开发的相关知识。对相关内容不熟悉的童鞋,可以先去《Linux达人养成计划Ⅰ》以及《Java入门第一季》进行修炼~~ 你能学到什么? 1、Google的大数据技术 2、Hadoop的架构设计 3、Hadoop的使用 4、Hadoop的配置与管理 大纲一览 第1章初识Hadoop 本章讲述课程大纲,授课内容,授课目标、预备知识等等,介绍Hadoop的前世今生,功能与优势 第2章 Hadoop安装 本章通过案例的方式,介绍Hadoop的安装过程,以及如何管理和配置Hadoop 第3章 Hadoop的核心-HDFS简介 本章重点讲解Hadoop的组成部分HDFS的体系结构、读写流程,系统特点和HDFS

的使用。 第4章 Hadoop的核心-MapReduce原理与实现 本章介绍MapReduce的原理,MapReduce的运行流程,最后介绍一个经典的示例WordCount 第5章开发Hadoop应用程序 本章介绍在Hadoop下开发应用程序,涉及多个典型应用,包括数据去重,数据排序和字符串查找。 课程地址:https://www.wendangku.net/doc/22209037.html,/view/391

Hadoop云计算平台实验报告V1.1

Hadoop云计算平台实验报告V1.1

目录 1实验目标 (3) 2实验原理 (4) 2.1H ADOOP工作原理 (4) 2.2实验设计 (6) 2.2.1可扩展性 (6) 2.2.2稳定性 (7) 2.2.3可靠性 (7) 3实验过程 (9) 3.1实验环境 (9) 3.1.1安装Linux操作系统 (10) 3.1.2安装Java开发环境 (14) 3.1.3安装SSH (15) 3.1.4配置网络 (15) 3.1.5创建SSH密钥安全联机 (19) 3.1.6配置Hadoop云计算系统 (19) 3.1.7配置Slaves节点 (23) 3.1.8格式化Hadoop系统 (23) 3.1.9启动Hadoop集群 (23) 3.22.实验过程 (25) 3.2.1可扩展性 (25) 3.2.1.1动态扩展 (25) 3.2.1.2动态缩减 (27) 3.2.2稳定性 (28) 3.2.3可靠性 (31) 3.2.4MapReduce词频统计测试 (32) 4实验总结 (35)

1. 掌握Hadoop安装过程 2. 理解Hadoop工作原理 3. 测试Hadoop系统的可扩展性 4. 测试Hadoop系统的稳定性 5. 测试Hadoop系统的可靠性

2.1Hadoop工作原理 Hadoop是Apache开源组织的一个分布式计算框架,可以在大量廉价的硬件设备组成集群上运行应用程序,为应用程序提供一组稳定可靠的接口,旨在构建一个具有高可靠性和良好扩展性的分布式系统。Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce 的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算、存储提供了底层支持。 HDFS采用C/S架构,对外部客户机而言,HDFS就像一个传统的分级文件系统。可以对文件执行创建、删除、重命名或者移动等操作。HDFS中有三种角色:客户端、NameNode和DataNode。HDFS的结构示意图见图1。 NameNode是一个中心服务器,存放着文件的元数据信息,它负责管理文件系统的名字空间以及客户端对文件的访问。DataNode节点负责管理它所在节点上的存储。NameNode对外暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,文件被分成一个或多个数据块,这些块存储在一组DataNode上,HDFS通过块的划分降低了文件存储的粒度,通过多副本技术和数据校验技术提高了数据的高可靠性。NameNode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体DataNode节点的映射。DataNode负责存放数据块和处理文件系统客户端的读写请求。在NameNode的统一调度下进行数据块的创建、删除和复制。

Hadoop大数据平台介绍

Hadoop是什么 Apache Hadoop is an open source software framework for storage and large scale processing of data-sets on clusters of commodity hardware

Hadoop名字的由来 Hadoop was created by Doug Cutting and Mike Cafarella in 2005 Named the project after son's toy elephant

从移动数据到移动算法

Hadoop的核心设计理念?可扩展性 ?可靠性

相对于传统的BI 架构转变 数据仓库电子表格 视觉化工 具 数据挖掘集成开发工具 数据集市 企业应用工具 传统文件日志社交& 网络遗留系 统结构化 非结构化 音视频数据应用非关系型数据库内存数据库NO SQL 应用 Nod e Nod e Nod e Hadoop * Web Apps MashUps 导出/导入INSIGHTS 消费Create Map 存储/计算实时数据处理通道(Spark,Storm)数据交换平台数据存储计算平台数据访问 层Kafka Flume Goldengat e Shareplex ..传感器传感器

hadoop 的适用场景 小数据+ 小计算量OLTP 业务系统:ERP/CRM/EDA 大数据+ 小计算量如全文检索,传统的ETL 小数据+大计算量D a t a Compute 数据 计算 实时性

Hadoop大数据平台-测试报告及成功案例

Hadoop大数据平台测试报告及成功案例

目录 1技术规范书应答书 ................................. 错误!未定义书签。2技术方案建议 ......................................... 错误!未定义书签。3测试及验收 ............................................. 错误!未定义书签。4项目实施与管理 ..................................... 错误!未定义书签。5人员资质与管理 ..................................... 错误!未定义书签。6技术支持及保修 ..................................... 错误!未定义书签。7附录 ......................................................... 错误!未定义书签。

1.1 大数据平台测试报告 1.1.1某银行Cloudera CDH 性能测试测试 某银行现有HODS在支撑行内业务方面已经遇到瓶颈。希望通过搭建基于Hadoop 的历史数据平台(新HODS),以提升平台运行效率及数据覆盖面,支撑未来大数据应用,满足未来业务发展需求。本次POC测试的主要目的是验证Hadoop商业发行版(EDH) 是否可以满足某银行HODS应用特点,主要考察点包括: ?验证产品本身的易用性、可扩展性,主要涉及集群的部署、运维、监控、升级等; ?验证产品对安全性的支持,包括认证、授权、审计三大方面; ?验证产品对资源分配的控制与调度; ?验证Hadoop基本功能,包括可靠性、稳定性、故障恢复等; ?验证Hadoop子系统(包括HDFS、HBase、Hive、Impala等) 的性能、使用模式、设计思想、迁移代价等。 1.1.1.1基础设施描述 1.1.1.1.1硬件配置 硬件配置分为两类:管理节点(master node) 与计算节点(worker node)。 管理节点配置(2) CPU Intel? Xeon? E5-2650 v3 2.3GHz,25M Cache,9.60GT/s QPI,Turbo,HT,10C/20T (105W) Max Mem 2133MHz (40 vcore) 内存16GB RDIMM, 2133MT/s, Dual Rank, x4 Data Width (128GB) 网络Intel X520 DP 10Gb DA/SFP+ Server Adapter, with SR Optics

Hadoop云计算平台搭建最详细过程(共22页)

Hadoop云计算平台及相关组件搭建安装过程详细教程 ——Hbase+Pig+Hive+Zookeeper+Ganglia+Chukwa+Eclipse等 一.安装环境简介 根据官网,Hadoop已在linux主机组成的集群系统上得到验证,而windows平台是作为开发平台支持的,由于分布式操作尚未在windows平台上充分测试,所以还不作为一个生产平台。Windows下还需要安装Cygwin,Cygwin是在windows平台上运行的UNIX模拟环境,提供上述软件之外的shell支持。 实际条件下在windows系统下进行Hadoop伪分布式安装时,出现了许多未知问题。在linux系统下安装,以伪分布式进行测试,然后再进行完全分布式的实验环境部署。Hadoop完全分布模式的网络拓补图如图六所示: (1)网络拓补图如六所示: 图六完全分布式网络拓补图 (2)硬件要求:搭建完全分布式环境需要若干计算机集群,Master和Slaves 处理器、内存、硬盘等参数要求根据情况而定。 (3)软件要求 操作系统64位版本:

并且所有机器均需配置SSH免密码登录。 二. Hadoop集群安装部署 目前,这里只搭建了一个由三台机器组成的小集群,在一个hadoop集群中有以下角色:Master和Slave、JobTracker和TaskTracker、NameNode和DataNode。下面为这三台机器分配IP地址以及相应的角色: ——master,namenode,jobtracker——master(主机名) ——slave,datanode,tasktracker——slave1(主机名) ——slave,datanode,tasktracker——slave2(主机名) 实验环境搭建平台如图七所示:

Hadoop云计算实验报告

云计算实验报告Hadoop 云计算实验报告Hadoop 实验目的1在虚拟机上安装单机模式和集群;Ubuntu Hadoop编写一个用处理数据的程序,在单机和集群上运行程序。Hadoop 实验环境2虚拟机:9VMware(桌面(服务器版),操作系统: -desktop--server-x64amd64ubuntu-14.10ubuntu-12.04 版)版本: 1.2.1hadoop Hadoop版本: x647u80-linuxJdk -jdk-版本:x86_64-gtk-jee-luna-SR2-linuxEclipse eclipse-,主机集群:一台主机,一台mastersalve datanodeHadoop namenode 。,主机为主机为master IP IP 10.5.110.22310.5.110.207slave 实验设计说明3 主要设计思路 3.1 eclipse编写程序代码。实现在ubuntu操作系统下,安装必要软件和环境搭建,使用大数据的统计。本次实验是统计软件代理系统操作人员处理的信息量,即每个操作人员出现的次数。程序设计完成后,在集成环境下运行该程序并查看结果。算法设计 3.2 程序将输入读入后该算法首先将输入文件都包含进来,然后交由map程序处理,map处理,切出其中的用户名,并标记它的数目为1,形成的形式,然后交由reduce值收集起来,形成的形式,(reduce将相同key值也就是word)的value1值加起来,即为用户名出现的个数,最后将这个对以之后再将这些中。的形式输出到HDFSTextOutputFormat 程序说明 3.3 4个泛型类类继承了1)UserNameCountMap org.apache.hadoop.mapreduce.Mapper,的类型,输出的类型,输入value的类型,输出key函数输入型分别是map key value的类型。个泛,4org.apache.hadoop.mapreduce.ReducerUserNameCountReduce2)类继承了 类相同。map型类型含义与

基于Hadoop的大数据平台实施——整体架构设计

基于Hadoop的大数据平台实施——整体架构设计大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星。我们暂不去讨论大数据到底是否适用于您的公司或组织,至少在互联网上已经被吹嘘成无所不能的超级战舰。好像一夜之间我们就从互联网时代跳跃进了大数据时代!关于到底什么是大数据,说真的,到目前为止就和云计算一样,让我总觉得像是在看电影《云图》——云里雾里的感觉。或许那些正在向你推销大数据产品的公司会对您描绘一幅乌托邦似的美丽画面,但是您至少要保持清醒的头脑,认真仔细的慎问一下自己,我们公司真的需要大数据吗? 做为一家第三方支付公司,数据的确是公司最最重要的核心资产。由于公司成立不久,随着业务的迅速发展,交易数据呈几何级增加,随之而来的是系统的不堪重负。业务部门、领导、甚至是集团老总整天嚷嚷的要报表、要分析、要提升竞争力。而研发部门能做的唯一事情就是执行一条一条复杂到自己都难以想象的SQL语句,紧接着系统开始罢工,内存溢出,宕机........简直就是噩梦。OMG!please release me!!! 其实数据部门的压力可以说是常人难以想象的,为了把所有离散的数据汇总成有价值的报告,可能会需要几个星期的时间或是更长。这显然和业务部门要求的快速响应理念是格格不入的。俗话说,工欲善其事,必先利其器。我们也该鸟枪换炮了......。 网上有一大堆文章描述着大数据的种种好处,也有一大群人不厌其烦的说着自己对大数据的种种体验,不过我想问一句,到底有多少人多少组织真的在做大数据?实际的效果又如何?真的给公司带来价值了?是否可以将价值量化?关于这些问题,好像没看到有多少评论会涉及,可能是大数据太新了(其实底层的概念并非新事物,老酒装新瓶罢了),以至于人们还沉浸在各种美妙的YY中。 做为一名严谨的技术人员,在经过短暂盲目的崇拜之后,应该快速的进入落地应用的研究中,这也是踩着“云彩”的架构师和骑着自行车的架构师的本质区别。说了一些牢骚话,

大数据处理与云计算教学大纲

大数据处理与云计算教学大纲 (总4页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

《大数据处理与云计算》教学大纲 课程类别:专业教育课课程名称:大数据处理与云计算 开课单位:信息与通信工程学院课程编号:N03050703 总学时:40 学分: 适用专业:信息工程专业 先修课程:无 一、课程在教学计划中的地位、作用 大数据处理与云计算是信息工程专业高年级学生开设的一门专业教育课。本课程主要学习大数据处理和云计算的相关原理和技术,根据实际需求,构建相应的大数据处理和云计算平台框架。 通过本课程学习,使学生掌握大数据的采集、传输、处理和应用的技术,了解Hadoop分布式系统基础架构,掌握HDFS和MapReduce技术。了解HBase、Hive、Zookeeper、Avro、Pig等相关大数据技术,与实际工程应用相结合,构建相应的云计算平台。教学应当结合实际实验条件,培养学生实践动手能力,了解大数据技术发展现状,促进大数据相关教学改革。 二、课程教学内容、要求及学时分配 第一章大数据与云计算概况 1、了解大数据概念 2、了解大数据的产生、应用和作用 3、了解云计算技术的概述 4、了解云计算的特点及技术分类 5、了解大数据与云计算、物联网之间的关系 第二章大数据处理与云计算的关键技术 1、理解大数据处理的基本流程 2、掌握大数据的关键技术 3、理解大数据的处理工具

4、了解大数据面临的挑战 5、理解云计算及关系型数据库 第三章 Hadoop 1、了解Hadoop概述 2、了解 Hadoop发展简史 3、理解Hadoop的功能与作用 4、了解 Hadoop的优缺点 5、了解Hadoop的应用现状和发展趋势 6、掌握Hadoop项目及其结构 7、掌握Hadoop的体系结构 8、掌握HDFS的体系结构 第四章 MaReduce 1、理解分布式并行编程 2、理解MapReduce模型概述 3、掌握Map和Reduce函数 4、掌握MapReduce工作流程 5、掌握并行计算的实现 6、掌握新的MapReduce框架:Yarn 7、理解新旧Hadoop MapReduce框架的对比第五章 HDFS 1、理解HDFS的假设与目标 2、理解HDFS的相关概念 3、掌握HDFS体系结构 4、掌握HDFS命名空间 5、掌握HDFS存储原理 6、掌握通讯协议 7、理解数据错误和异常 8、理解从HDFS看分布式文件系统的设计需求第六章 Zookeeper 1、了解Zookeeper简介

Hadoop大数据开发基础教学进度表

学院 课程教学进度计划表(20 ~20 学年第二学期) 课程名称Hadoop大数据开发基础授课学时48 主讲(责任)教师 参与教学教师 授课班级/人数 专业(教研室) 填表时间 专业(教研室)主任 教务处编印 年月

一、课程教学目的 通过本课程的学习,使学生了解Hadoop集群的基本框架,Hadoop的基本理论,以及Hadoop的核心组件HDFS和MapReduce的原理和使用。为学生今后使用大数据技术挖掘、学习其他大数据技术奠定基础。同时,本课程将紧密结合实际,不仅通过大量的实践操作和练习提高学生的动手实践能力;而且会提供实际的案例,讲解实际项目的开发流程,通过案例讲解启发学生思维,并通过学生的实际操作来增强学生对于实际案例的思考以及实现,为学生毕业后能更快地适应工作环境创造条件。 二、教学方法及手段 本课程将采用理论与实践相结合的教学方法。在理论上,通过任务引入概念、原理和方法。在实践上,对于安装配置的内容,先有教师讲解与演练,再将安装教程发给学生,由学生自主完成;教学过程中的任务、实践操作、练习,可由教师提供简单思路,学生自主完成。 要求学生自己动手搭建Hadoop集群、分析实例,学习基本理论和方法,结合已有的知识,适当布置练习、实践题,组织一些讨论,充分调动学生的主观能动性,提高学生的动手实践能力,以达到本课程的教学目的。 三、课程考核方法 突出学生解决实际问题的能力,加强过程性考核。课程考核的成绩构成= 平时作业(20%)+ 课堂参与(10%)+ 期末考核(70%),期末考试建议采用开卷形式,试题应包括基本概念、基本理论、程序设计、综合应用等部分,题型可采用判断题、选择、简答、应用题等方式。

Hadoop大数据平台-建设要求及应答方案

Hadoop大数据平台建设要求及应答方案

目录 2技术规范书应答书 (2) 2.1业务功能需求 (4) 2.1.1系统管理架构 (4) 2.1.2数据管理 (12) 2.1.3数据管控 (26) 2.1.4数据分析与挖掘 (27) 2.2技术要求 (30) 2.2.1总体要求 (30) 2.2.2总体架构 (31) 2.2.3运行环境要求 (32) 2.2.4客户端要求 (35) 2.2.5数据要求 (36) 2.2.6集成要求 (36) 2.2.7运维要求 (37) 2.2.8性能要求 (49) 2.2.9扩展性要求 (50) 2.2.10可靠性和可用性要求 (52) 2.2.11开放性和兼容性要求 (57) 2.2.12安全性要求 (59)

1大数据平台技术规范要求 高度集成的Hadoop平台:一个整体的数据存储和计算平台,无缝集成了基于Hadoop 的大量生态工具,不同业务可以集中在一个平台内完成,而不需要在处理系统间移动数据;用廉价的PC服务器架构统一的存储平台,能存储PB级海量数据。并且数据种类可以是结构化,半结构化及非结构化数据。存储的技术有SQL及NoSQL,并且NoSQL能提供企业级的安全方案。CDH提供统一的资源调度平台,能够利用最新的资源调度平台YARN分配集群中CPU,内存等资源的调度,充分利用集群资源; 多样的数据分析平台–能够针对不用的业务类型提供不同的计算框架,比如针对批处理的MapReduce计算框架;针对交互式查询的Impala MPP查询引擎;针对内存及流计算的Spark框架;针对机器学习,数据挖掘等业务的训练测试模型;针对全文检索的Solr搜索引擎 项目中所涉及的软件包括: ?Hadoop软件(包括而不限于Hadoop核心) ?数据采集层:Apache Flume, Apache Sqoop ?平台管理:Zookeeper, YARN ?安全管理:Apache Sentry ?数据存储:HDFS, HBase, Parquet ?数据处理:MapReduce, Impala, Spark ?开发套件:Apache Hue, Kite SDK ?关系型数据库系统:SAP HANA企业版 ?ETL工具:SAP Data Services 数据管控系统的二次开发量如下: ?主数据管理功能 通过二次开发的方式实现主数据管理功能,并集成甲方已有的主数据管理系统。

Hadoop大数据开发实战-教学大纲

《Hadoop大数据开发基础》教学大纲课程名称:Hadoop大数据开发基础 课程类别:必修 适用专业:大数据技术类相关专业 总学时:48学时 总学分:3.0学分 一、课程的性质 本课程是为大数据技术类相关专业学生开设的课程。随着时代的发展,大数据已经成为一个耳熟能详的词汇。与此同时,针对大数据处理的新技术也在不断的开发和运用中,逐渐成为数据处理挖掘行业广泛使用的主流技术之一。Hadoop作为处理大数据的分布式存储和计算框架,得到了国内外大小型企业广泛的应用。Hadoop是一个可以搭建在廉价服务器上的分布式集群系统架构,它具有可用性高、容错性高和可扩展性高等优点。由于它提供了一个开放式的平台,用户可以在完全不了解底层实现细节的情形下,开发适合自身应用的分布式程序。经过十多年的发展,目前Hadoop已经成长为一个全栈式的大数据技术生态圈,并在事实上成为应用最广泛最具有代表性的大数据技术。因此,学习Hadoop技术是从事大数据行业工作所必不可少的一步。 二、课程的任务 通过本课程的学习,使学生学会搭建Hadoop完全分布式集群,掌握HDFS的原理和基础操作,掌握MapReduce原理架构、MapReduce程序的编写。为将来从事大数据挖掘研究工作以及后续课程的学习奠定基础。 三、教学内容及学时安排

四、考核方式 突出学生解决实际问题的能力,加强过程性考核。课程考核的成绩构成= 平时作业(20%)+ 课堂参与(10%)+ 期末考核(70%),期末考试建议采用开卷形式,试题应包括基本概念、基本理论、程序设计、综合应用等部分,题型可采用判断题、选择、简答、应用题等方式。

hadoop云计算实验指导书

计算机科学与技术学院 网络计算设计与实现 实验指导书

实验一SOCKET编程 【试验环境】 计算机、TCP/IP协议、VS2005 【实验目的】 1.理解基本TCP/IP协议编程原理; 2.掌握如何利用SOCKET编写网络程序; 3.掌握VS2005编程环境,多线程程序设计等。 【实验要求】 1.编写一个服务端的程序,接收来自客户端的访问请求,并返回相关信息; 2.编写一个客户端程序,向服务端发送连接请求,并显示返回的结果; 3.完善服务端程序,使它能够同时支持多个客户端的请求。 【预备知识】 p ublic Socket Accept ():为新建连接创建新的 Socket。 public void Bind (EndPoint localEP):使 Socket 与一个本地终结点 相关联。 public void Close ():关闭 Socket 连接并释放所有关联的资源。 public void Connect (EndPoint remoteEP):建立与远程主机的连接。 注意这个方法有重载方法。 public void Disconnect (bool reuseSocket):关闭套接字连接并是否 允许重用套接字。 public void Listen (int backlog):将 Socket 置于侦听状态。

public int Receive (byte[] buffer):接收来自绑定的 Socket 的数据。 注意这个方法有重载方法。 public int ReceiveFrom (byte[] buffer,ref EndPoint remoteEP):接 收数据报并存储源终结点。注意这个方法有重载方法。 public int Send (byte[] buffer):将数据发送到连接的 Socket。注意 这个方法有重载方法。 public void SendFile (string fileName):将文件和可选数据异步发送 到连接的 Socket。注意这个方法有重载方法。 public int SendTo (byte[] buffer,EndPoint remoteEP):将数据发送 到特定终结点。注意这个方法有重载方法。 public void Shutdown (SocketShutdown how):禁用某 Socket 上的发 送和接收。 因为在网络传输时传输的数据都是二进制形式的(表现为字节数组),所以如果要传输类似于中文这样的双字节字符就需要在传输之前用合适的编码转换成字节数组,然后接收方按照发送方的编码将接收到字节数组转换成字符串。 另外,注意接收数据的时候是先声明了一个字节数组,然后将接收到的数据保存到字节数组中,这个方法有个返回值表示实际接收了多少字节数据。【实验内容】 实现一个服务器端的面向连接的Socket用于接收客户端的请求的话,有如下步骤: 1.首先根据IP地址和端口号实例化一个Socket,注意端口要要大于1024并 且不要使用特殊端口号,要大于1024的原因是1024以下的端口号已经被

云计算-Hadoop基础知识

https://www.wendangku.net/doc/22209037.html, 云计算-Hadoop基础知识 hadoop是什么? (1)Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理),Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元。用函数式变成Mapreduce代替SQL,SQL是查询语句,而Mapreduce则是使用脚本和代码,而对于适用于关系型数据库,习惯SQL的Hadoop有开源工具hive代替。 (2)Hadoop就是一个分布式计算的解决方案. hadoop能做什么? hadoop擅长日志分析,facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析;淘宝搜索中的自定义筛选也使用的Hive;利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn 上用于发现您可能认识的人,可以实现类似https://www.wendangku.net/doc/22209037.html,的协同过滤的推荐效果。淘宝的商品推荐也是!在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。(2012年8月25新更新,天猫的推荐系统是hive,少量尝试mahout!) 下面举例说明: 设想一下这样的应用场景. 我有一个100M 的数据库备份的sql 文件.我现在想在不导入到数据库的情况下直接用grep操作通过正则过滤出我想要的内容。例如:某个表中含有相同关键字的记录那么有几种方式,一种是直接用linux的命令 grep 还有一种就是通过编程来读取文件,然后对每行数据进行正则匹配得到结果好了现在是100M 的数据库备份.上述两种方法都可以轻松应对. 那么如果是1G , 1T 甚至 1PB 的数据呢 ,上面2种方法还能行得通吗?答案是不能.毕竟单台服务器的性能总有其上限.那么对于这种超大数据文件怎么得到我们想要的结果呢?有种方法就是分布式计算, 分布式计算的核心就在于利用分布式算法把运行在单台机器上的程序扩展到多台机器上并行运行.从而使数据处理能力成倍增加.但是这种分布式计算一般对编程人员要求很高,而且对服务器也有要求.导致了成本变得非常高. Haddop 就是为了解决这个问题诞生的.Haddop 可以很轻易的把很多linux的廉价pc 组成分布式结点,然后编程人员也不需要知道分布式算法之类,只需要根据mapreduce的规则定义好接口方法,剩下的就交给Haddop. 它会自动把相关的计算分布到各个结点上去,然后得出结果. 例如上述的例子: Hadoop 要做的事首先把 1PB的数据文件导入到 HDFS中, 然后编程人员定义好 map和reduce, 也就是把文件的行定义为key,每行的内容定义为value , 然后进行正则匹配,匹配成功则把结果通过reduce聚合起来返回.Hadoop 就会把这个程序分布到N 个结点去并行的操作.

部署Hadoop大数据平台部署Hadoop平台

课题:项目3 部署Hadoop大数据平台第2部分部署Hadoop平台课次:第7次教学目标及要求: (1)任务1 JDK的安装配置(熟练掌握) (2)任务2部署Hadoop(熟练掌握) (3)任务3 理解启动Hadoop(熟练掌握) 教学重点: (1)任务1 JDK的安装配置 (2)任务2 部署Hadoop (3)任务3 启动Hadoop 教学难点: (1)任务2 部署Hadoop (2)任务3 启动Hadoop 思政主题: 旁批栏: 教学步骤及内容: 1.课程引入 2.本次课学习内容、重难点及学习要求介绍 (1)任务1 JDK的安装配置 (2)任务2 部署Hadoop (3)任务3 启动Hadoop 3.本次课的教学内容 (1)任务1 JDK的安装配置(熟练掌握) Hadoop的不同版本与JDK的版本存在兼容性问题,所有必须选择对应 版本的JDK进行安装,表中列出了Hadoop和JDK兼容表。我们通过测试 使用Hadoop3.0.0 和JDK1.8。 安装JDK我们使用JDK包安装的方式。首先我们新建JDK的安装目录 /opt/bigddata。操作步骤为://定位opt目录【操作新建目录/opt/bigdata】

[root@master /]# cd /opt/ //在opt目录下新建bigdata文件夹 [root@master /]# mkdir bigdata //查看opt目录下文件夹是否存在 [root@master /]# ls bigdata [root@master /]# Jdk解压安装,步骤为:【操作解压步骤】 [root@master opt]# cd / [root@master /]# cd /opt/ [root@master opt]# ls bigdata jdk-8u161-linux-x64.tar.gz //解压jdk压缩包 [root@master opt]# tar -zxvf jdk-8u161-linux-x64.tar.gz [root@master opt]# ls bigdata jdk1.8.0_161 jdk-8u161-linux-x64.tar.gz //把Jdk目录移动至bigdata目录 [root@master opt]# mv jdk1.8.0_161/ bigdata [root@master opt]# cd bigdata/ //查看是否移动成功 [root@master bigdata]# ls jdk1.8.0_161 [root@master bigdata]# JDK配置环境变量,此步骤为添加JA V A_HOME变量,并配置JDK。具体步骤为:【操作JDK的配置】 //进入环境变量配置文件 [root@master /]# vi /etc/profile //添加如下信息 export JA V A_HOME="/opt/bigdata/jdk1.8.0_161" export PATH=$JA V A_HOME/bin:$PATH //激活环境变量配置文件 [root@master /]# source /etc/profile //验证JDK是否配置完成 [root@master /]# java -version java version "1.8.0_161" Java(TM) SE Runtime Environment (build 1.8.0_161-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

Hadoop云计算平台搭建规划方案.docx

Hadoop 云计算平台搭建方案 一、平台搭建概述 总体思路 针对于电网企业在营销服务领域展开的大数据分析处理,搭建Hadoop 云计算平台进行海量数据存储,并作深层次加工、处理,挖掘出无法简单直观便可得到的新的模式,为电力企业 的决策提供指导。平台采用作为海量数据存储和分析工具,将其部署在 4 个物理计算机节点上,搭建 Hadoop 集群,其中 1 个节点作为master 节点,其余 3 个作为 slave 节点。为了获取更好的稳定性,平台搭建在Linux 系统()环境下。 软件列表 软件描述版本 VMware Workstation 虚拟化软件 VMware Workstation 操作系统 JDK Java 的软件开发工具包 开源的云计算基础框架 分布式数据存储系统 可靠协调系统 数据迁移工具 平台搭建总流程和节点信息一览表 在平台搭建前,给出实现的总流程图和节点信息一览表,从而对平台搭建过程和各节点信息有一个全局的认识,平台搭建总流程如下图所示。 创建虚拟机master ,完成 JDK、 Hadoop等应用的安装和配置 对虚拟机master 进行克隆,得到的 虚拟机分别作为slave1 、 slave2 和 完成 Zookeeper 、 HBase等其它分布 式服务的部署,搭建Hadoop 集群 运行并测试Hadoop 集群系统

各节点信息如下表所示: 机器名master slave1 slave2 slave3IP地址用户名充当角色 、 Namenode 、 Datanode 、 Datanode 、 Datanode 二、基础平台的搭建步骤 此次大数据存储和处理平台的搭建,需要虚拟机软件 VMware Workstation 创建虚拟机的配置大部分是相同的,所以利用 4 台物理节点来部署Hadoop平台环境。我们使用4 台虚拟机,承载平台搭建工作。另外,由于对 4 台 VMware Workstation的克隆功能,可以减少部署 的工作量。 安装虚拟机软件VMware Workstation 首先在 4 台 PC机器上均安装虚拟化软件VMware Workstation,并输入相应的序列号。 在master 节点上安装 Linux 系统 Ubuntu 在设定为 master PC节点上首先安装 Linux 系统(版本为),在安装过程中为提高后期安装 软件的兼容性和稳定性,在系统语言上选择英语。创建用户名为“hadoop ”的普通用户,设 置统一的密码。安装完成后将系统的terminal命令窗口调出来,以便使用。 同时,为实现虚拟机的Ubuntu 系统与本机的Windows 系统之间方便快捷的文字复制粘贴以 及物理主机系统与虚拟机系统相互拖放文件进行共享,需要安装VMare Tools 工具,具体操作如下: 启动虚拟机,进入 Ubuntu 系统,在 VM菜单栏“虚拟机 (M) ”的下拉菜单点击“安装VMare Tools(T) ”后,会弹出一个“ VMare Tools ”文件夹,里面包含VMare Tools的安装包,将该安装包拷贝到 /home/hadoop目录下,输入命令进行解压安装: tar xzvf此时在/home/hadoop/目录下产生 vmware-tools-distrib文件夹,进入该目录,通过在terminal 终端输入相应命令,运行脚本: cd/home/hadoop/vmware-tools-distrib $JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH ocal/share/',but failed:No such file or directory (gedit:2949):Gtk-WARNING**:Attempting to store changes into `/root/.local/share/',but failed:Failed to create file'/root/.local/share/':No such file or directory (gedit:2949):Gtk-WARNING**:Attempting to set the permissionsof `/root/.local/share/', but failed: No such file or directory 解决方法:只需直接在终端中输入命令:sudo mkdir-p/root/.local/share/,创建警告信息中所提示的目录即可。 若无视警告重启ubuntu 后将会出现以下情况:输入密码无法进入系统,一直处于输入密码 后又跳转回输入密码的界面。此时的解决方法是:在输入密码界面同时按下alt+ctrl+F2 进入 ubuntu 命令模式,并使用root用户及对应密码登陆系统,然后键入:/usr/bin/vi /etc/profile打开 etc/profile文件,找到最近在末尾加上的hadoop 配置文件,按 delete

大数据离线分析项目(Hadoop)

大数据离线分析项目(Hadoop)

1、总体需求:捕获用户每天的行为数据,生成业务 日志文件,根据日志文件清洗、分析、提取出需 要的价值信息(pv :页面浏览量UV :独立访客数独立IP会话时长等),对网站的良好运营提供 有价值的指标。 2、具体设计 2.1捕获(JsSDK)用户行为数据(launch 事 件、pageView 事件、eve nt 事件、 chargerequet 事件) 2.2将捕获的数据发送给web服务器,生成日 志文件(Nginx ) 2.3将日志文件上传至文件存储系统中 (Shell 脚本、Flume)

2.4在文件存储系统中对日志文件进行清 洗,过滤掉脏数据和不需要的字段(MapReuce job 任务) 2.5将过滤后的日志文件导入到数据库中(HBase) 2.6通过MapReduce 程序或Hive进行统 计分析(Hive) 2.7将统计分析后的结果导入到本地数据库中进行永久储存(Mysql ) 2.8 在前端进行展示 (Spri ngMVC+Highcharts ) 项目架构(画图)

具体分为三个部分(如下图所示): 数据收集层 hadoop 、hive、flume 、kafka、shell fflumcl flume3 数据分析层 hive、MapReduce 、spark HDFS 后台栏展J 程再后刍長盘到吋小

的事件(按照收集数据的不同分为不同的事件)时调用相关方法。

2. Java sdk后台服务日志生成与发送工具 JavaSDK代码很简单,可以打成jar包或者 直接拷贝类到具体的项目中,正常逻辑处理 到JavaSDK所关注的事件后,调用JavaSDK 提供的api即可。 3.Nginx web 服务器,产生日志文件 特点:Nginx 是一个小巧而高效的 Linux下的web服务器软件,相比较 Apache它不仅有稳定性、丰富的功 能集、示例配置文件,更重要的是 Nginx是基于事件的,它的内存使用 很低,系统资源消耗小很多。 3. shell脚本上传日志文件(数据量一般比较小 的场景,不会立即进行分析) 分割日志,每天定时分割成昨天的日志文

相关文档
相关文档 最新文档