收藏 分享(赏)

Hadoop 初步学习文档.doc

上传人:精品资料 文档编号:11220564 上传时间:2020-02-20 格式:DOC 页数:8 大小:321.67KB
下载 相关 举报
Hadoop 初步学习文档.doc_第1页
第1页 / 共8页
Hadoop 初步学习文档.doc_第2页
第2页 / 共8页
Hadoop 初步学习文档.doc_第3页
第3页 / 共8页
Hadoop 初步学习文档.doc_第4页
第4页 / 共8页
Hadoop 初步学习文档.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、Hadoop 初步学习文档1 Hadoop 简介Apache Hadoop 是一款支持数据密集型分布式应用并以 Apache 2.0 许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。Hadoop 是根据Google 公司发表的 MapReduce 和 Google 文件系统的论文自行实现而成。1.1Hadoop 基本构成Hadoop 是一个能够对大量数据进行分布式处理的软件框架 , Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System) ,简称 HDFS。hadoop 的集群是基于master/slave 模式Hado

2、op 基本运行结构图如下:其中 master 和 slave1、slave2、slave3、slave4 分别为五台主机,NameNode、DataNode 等为运行在主机上的进程。进程的作用如下:(一)NameNode 是 HDFS 的守护程序,负责记录文件是如何分割成数据块的,以及这些数据块分别被存到那些数据节点上,主要功能是对内存及 I/O 进行集中管理(是个单点,发生故障将使集群崩溃)(二)DataNode 这个后台程序负责把 HDFS 数据块读写到本地的文件系统,当客户端要读写某个数据时候,先由 NameNode 告诉客户端去哪个 DataNode 进行具体的读/ 写操作,然后客户端

3、直接与这个 DataNode 服务器上的后台程序进行通讯,并且对相关的数据块进行读/写操作。(三)SecondaryNameNode:是一个用来监控 HDFS 状态的辅助后台程序,就像 NameNode一样,每个集群都有一个 Secondary NameNode,不接收或记录任何实时的数据变化,但是,他会与 NameNode 进行通信,以便定期的保存 HDFS 元数据的快照,如果 Name 发生问题,SecondaryNameNode 可以及时的作为备用 NameNode。(四)JobTracker:用来连接应用程序与 Hadoop,用户代码提交到集群以后,由 JobTracker决定那个文件

4、将被处理,并且为不同的 task 分配节点,同时,他还监控所有运行的 task 一旦某个 task 失败了 JobTacker 就会自动重新开启 task。每个集群只有唯一一个 JobTracker,位于 Master 节点(五)TaskTracker:与负责存储的 DataNode 结合,JobTracker 负责分配 Tasker,管理各自节点上的 task。每个节点只有一个 TaskTracker,但一个 TaskTracker 可以启动多个 JVM,用于并行执行 map 或 reduce 任务1.2 Hadoop 版本演进 Hadoop 经历了从 Hadoop 1.x 到 Hadoop

5、 2.x 的演变,其中 Hadoop1.X 中的 NameNodes只可能有一个,虽然可以通过 SecondaryNameNode 与 NameNode 进行数据同步备份,但是总会存在一定的时延,如果 NameNode 挂掉,但是如果有部分数据还没有同步到SecondaryNameNode 上,还是可能会存在着数据丢失的问题。其架构图如下:Hadoop2 相比较于 Hadoop1.x 来说,HDFS 的架构与 MapReduce 的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2 中有两个重要的变更:(1)HDFS NameNodes 可以以集群的方式布署,增强了 NameN

6、odes 的水平扩展能力和可用性;(2)MapReduce 将 JobTracker 中的资源管理及任务生命周期管理(包括定时触发及监控) ,拆分成两个独立的组件,并更名为 YARN(Yet Another Resource Negotiator) 。Hadoop2.x 架构图如下:2 Hadoop 开发环境搭建Hadoop 是一个开放源代码的大数据处理平台,既可以在 windows 系统下运行,也可以在 linux 系统下运行,但是由于其开源特性及系统性能等方面的原因,目前主要应用是在linux 系统下,因此学习使用 Hadoop 开发,一定要熟悉 linux 系统的一些必要知识。2.1 应

7、用系统之 linux 系统Linux 是一种自由和开放源代码的类 UNIX 操作系统。Linux 本身只是一个内核。在加上用户空间的应用程序之后,成为 Linux 操作系统。Linux 也是自由软件和开放源代码软件发展中最著名的例子。只要遵循 GNU 通用公共许可证,任何个人和机构都可以自由地使用Linux 的所有底层源代码,也可以自由地修改和再发布。大多数 Linux 系统还包括像提供GUI 的 X Window 之类的程序。除了一部分专家之外,大多数人都是直接使用 Linux 发行版,而不是自己选择每一样组件或自行设置。目前常用的 Linux 发行版本比较多,常用的有:一、Red Hat

8、又称为小红帽,在国内,乃至是全世界的 Linux 用户所最熟悉、最耳闻能详的发行版。目前 Red Hat 分为两个系列:由 RedHat 公司提供收费技术支持和更新的 Red Hat Enterprise Linux,以及由社区开发的免费的 Fedora Core。FedoraCore 的定位是桌面用户。它的版本更新周期也非常短,仅六个月。因此服务器上大多数不用 FedoraCore。适用于服务器的版本是 Red Hat Enterprise Linux,而由于这是个收费的操作系统。于是,国内外许多企业或空间商选择 CentOS。 CentOS 可以算是 Red Hat Enterprise

9、Linux 的克隆版,但它最大的好处是免费!因此目前的服务器便采用的 CentOS 系统。 由于 CentOS 是开源的,可以到官网去下载安装 CentOS 系统。目前我们使用的 Linux 系统也正是 CentOS6.5 系统。二、Ubuntu 系统,这是比较常用的桌面发行版系统,Ubuntu 的安装非常的人性化,只要按照提示一步一步进行,安装和 Windows 同样简便!并且, Ubuntu 被誉为对硬件支持最好最全面的 Linux 发行版之一,许多在其他发行版上无法使用,或者默认配置时无法使用的硬件,在 Ubuntu 上轻松搞定。并且,Ubuntu 采用自行加强的内核(kernel) ,

10、安全性方面更上一层楼。并且,Ubuntu 默认不能直接 root 登陆,必须从第一个创建的用户通过 su 或 sudo 来获取 root 权限(这也许不太方便,但无疑增加了安全性,避免用户由于粗心而损坏系统) 。Ubuntu 的版本周期为六个月,弥补了 Debian 更新缓慢的不足。 优点:人气颇高的论坛提供优秀的资源和技术支持,固定的版本更新周期和技术支持,可从Debian Woody 直接升级 缺点:还未建立成熟的商业模式。Ubuntu 系统安装简单,使用界面友好,适合入门使用。三、SUSE 是德国最著名的 Linux 发行版,在全世界范围中也享有较高的声誉。SUSE 自主开发的软件包管理

11、系统 YaST 也大受好评。SUSE 于 2003 年年末被 Novell 收购。 SUSE 之后的发布显得比较混乱,比如 9.0 版本是收费的,而 10.0 版本(也许由于各种压力)又免费发布。这使得一部分用户感到困惑,也转而使用其它发行版本。但是,瑕不掩瑜,SUSE仍然是一个非常专业、优秀的发行版。 优点:专业,易用的 YaST 软件包管理系统 缺点:FTP 发布通常要比零售版晚 13 个月。四、Debian GNU/Linux ,Debian 最早由 IanMurdock 于 1993 年创建。可以算是迄今为止,最遵循 GNU 规范的 Linux 系统。Debian 系统分为三个版本分支

12、(branch ):stable, testing 和 unstable。截至 2005 年 5 月,这三个版本分支分别对应的具体版本为:Woody, Sarge 和 Sid。其中,unstable 为最新的测试版本,其中包括最新的软件包,但是也有相对较多的 bug,适合桌面用户。testing 的版本都经过 unstable 中的测试,相对较为稳定,也支持了不少新技术(比如 SMP 等) 。而 Woody 一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。dpkg 是 Debian 系列特有的软件包管理工具,它被誉为所有 Linux 软件包管理工具(比如 RPM)最

13、强大的!配合 apt-get,在 Debian 上安装、升级、删除和管理软件变得异常容易。优点:遵循 GNU 规范,100% 免费,优秀的网络和社区资源,强大的 apt-get 缺点:安装相对不易,stable 分支的软件极度过时在对 linux 的学习时,初步应该学习 linux 系统常用的命令。如 cd 命令、ls 命令等,参考网址(http:/ )对于命令的学习比较有效的方法是自已安装一个 linux 系统,然后我使用这些命令进行操作。2.2 开发 IDE 之 eclipseEclipse 是著名的跨平台开源集成开发环境(IDE ) 。最初主要用来 Java 语言开发,目前亦有人通过插件

14、使其作为 C+、Python 、PHP 等其他语言的开发工具。Eclipse 的本身只是一个框架平台,但是众多插件的支持,使得 Eclipse 拥有较佳的灵活性,所以许多软件开发商以 Eclipse 为框架开发自己的 IDE。目前我们是在 eclipse 集成开发环境下,安装 hadoop 插件进行对 hadoop 程序的开发。插件下载时注意下载 linux 版本的。同时应该熟悉 linux 的安装命令等。2.3 开源 hadoop 源代码下载由于 hadoop 是开源平台代码和源程序可以自由下载,官网提供两种源码,一种是源代码主要是未编译的源代码,可以进行源码学习,自行编译等, 如 hado

15、op2.6 的源代码下载地址:( http:/www-eu.apache.org/dist/hadoop/common/hadoop-2.6.5/hadoop-2.6.5-src.tar.gz)。另一种是编译好的二进制程序,二进制程序可以直接放在系统上使用。如hadoop2.6 的二进制程序下载地(http:/www-eu.apache.org/dist/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz)。2.4 安装 hadoop 平台环境在 centos 下安装 hadoop 平台参考(http:/ hadoop 用户,创建 hadoop 用户的

16、命令为 useradd,此命令需要有 root 用户权限(要知道 root 用户的密码,或者使用 su 命令进行权限切换) 。(二)安装 SSH、配置 SSH 无密码登陆,由于 hadoop 是分布式平台,所以需要各主机无密码登陆。 (三)安装 Java 环境,这个参考 Java 安装教程即可,注意配置环境变量。 (四)安装 Hadoop 2.6,目前使用的版本为 Hadoop2.6,下载地址如 2.3 节所示。 (五)Hadoop 配置文件配置,配置文件的配置参考这个(http:/ 。2.5 安装 eclipse 开发环境目前用的开发环境是在 eclipse 下安装 hadoop 插件,Ha

17、doop 插件的安装参考如下网址(https:/ ,插件安装后需要对主机和端口进行配置,具体看教程。3 Hadoop 基本模块学习Hadoop2.6 项目有四大基本模块,分别是 Hadoop Common、HDFS(Hadoop Distributed File System) 、Hadoop Yarn 云的操作系统、Hadoop Mapreduce。Hadoop Common:为了支持其他模块的一些公共类,和框架;HDFS(Hadoop Distributed File System)Hdfs 提供高吞吐量的访问能力 , 用来存储数据。具有高容错性,高伸缩性的优点,允许用户将 hadoop

18、部署在廉价的硬件上,构建分布式系统;Hadoop Yarn 云的操作系统:给部署在 yarn 上的应用,分配资源,管理资源。 (任务调度) job / application 调度;Hadoop Mapreduce:Mapreduce 担当并行的计算分析任务。允许用户在不了解分布式系统底层细节的情况下开发并行,分布式的应用程序。Map 和 reduce,map 是映射,reduce 是规约。我用自己的理解方式说,Map 就是一种映射计算,让我们知道数据块的位置属性等,Reduce 就是一种各种数据块分别求和的方式。4 Hadoop 之 Hello World通过一个简单的统计输入文本的例子来学

19、习 hadoop 编程。这个源码实现的功能是统计输入文件中每个单词出现的次数,并且将单词以及这个单词出现的次数写入文件作为输出。 源码如下,其中最主要是重新实现了一下标红的两个函数 map/reduce 函数。同时要学习hadoop 特有的类,比如字符串类 StringTokenizer,整数类型 IntWritable 等。这些基础知识的学习的网址(http:/hadoop.apache.org/docs/stable/api/ ) ,对源码中重要语句功能添加了注释。注释写在了每行语句的下面。/*/package wordcount;import java.io.IOException;im

20、port java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Red

21、ucer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;/以上为导入程序需要用的包和相关类public class CWordCount public static class TokenizerMapper extendsMapper private final static IntWrita

22、ble one = new IntWritable(1);/one 初始值为 1 表示单词出现的次数初始为 1private Text word = new Text();public void map(Object key, Text value, Context context)/重写了 map 函数,注意前两个参数和上面 Mapper中前两个类型对应throws IOException, InterruptedException StringTokenizer itr = new StringTokenizer(value.toString();/value 变量存储的是输入文件的内容,

23、要了解 StringTokenizer 类及成员函数while (itr.hasMoreTokens() word.set(itr.nextToken();context.write(word, one);/将单词及出现的次数(默认值 1)写入上下文System.out.println(“map message:“+word+“/“+one);public static class IntSumReducer extendsReducer private IntWritable result = new IntWritable();public void reduce(Text key, It

24、erable values,Context context)/参数含义 key-单词, values 是一个整型的数组,里存放了此单词每行出现的次数throws IOException, InterruptedException int sum = 0;for (IntWritable val : values) sum += val.get();/遍历数组,将这个单词出现的次数求和,最后 sum 变量存放就是这个单词出现总数result.set(sum);context.write(key, result);/将这个单词及出现的次数写入上下文(最后会输出到文件)System.out.prin

25、tln(“reduce message:“+key+“/“+result);public static void main(String args) throws Exception /main 函数中的以下用法一般相对固定,具体含义参考 hadoop 使用手册Configuration conf = new Configuration();String otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();if (otherArgs.length != 2) System.err.println(“Usage:

26、 wordcount “);System.exit(2);Job job = new Job(conf, “word count“);job.setJarByClass(CWordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);job.setReducerClass(IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.cl

27、ass);FileInputFormat.addInputPath(job, new Path(otherArgs0);FileOutputFormat.setOutputPath(job, new Path(otherArgs1);System.exit(job.waitForCompletion(true) ? 0 : 1);/*/5 hadoop 提升练习题目一:简述 hadoop 中文件输入、输出有哪些,说明下 map/reduce 基本原理。题目二:现有一个 DNS 日志文件,已知其日志格式,编写一个 hadoop 程序,输入文件为DNS 日志,输出文件为 DNS 日志中请求域名长度超过 30 个字节的记录。其中日志格式说明和原始日志文件如下日 志 格 式 说 明 .txtdnsfile_part.log参考学习网址:Linux 命令大全(http:/ hadoop 到上手工作线路指导( http:/ 之快速通俗解释(http:/ MapReduce 的精髓(http:/ 官网(https:/hadoop.apache.org/)hadoop 中文使用手册(1.0.4 版本) (https:/hadoop.apache.org/docs/r1.0.4/cn/)hadoop2.6 使用手册(https:/hadoop.apache.org/docs/r2.6.0/)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报