|
|
51CTO旗下网站
|
|
移动端

Hadoop入门经典

Hadoop你是否了解,还有它是如何运行的呢,本文向大家介绍Hadoop入门的内容,希望通过本文的介绍大家能够轻松掌握Hadoop的一些基础知识。

作者:chakey来源:csdn.net|2010-06-03 10:35

本节接着上节继续向大家介绍一下Hadoop入门方面的知识,主要内容有如何运行Hadoop程序和它的效率问题,欢迎大家一起来学习Hadoop入门,首先我们先看一下Hadoop的概念。

Hadoop简介

Hadoop一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。
简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。
Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。HDFS有着高容错性(fault-tolerent)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streamingaccess)文件系统中的数据。

一、运行Hadoop程序
Hadoop入门首先看一下如何运行Hadoop程序。Hadoop这方面的文档写得不全面,综合参考GettingStartedWithHadoop与NutchHadoopTutorial两篇后,再碰了很多钉子才终于完整的跑起来了,记录如下:

1.1local运行模式

完全不进行任何分布式计算,不动用任何namenode,datanode的做法,适合一开始做调试代码。
解压hadoop,其中conf目录是配置目录,hadoop的配置文件在hadoop-default.xml,如果要修改配置,不是直接修改该文件,而是修改hadoop-site.xml,将该属性在hadoop-site.xml里重新赋值。
hadoop-default.xml的默认配置已经是local运行,不用任何修改,配置目录里唯一必须修改的是hadoop-env.sh里JAVA_HOME的位置。
将编译好的HadoopGrep与RegMapper.class放入hadoop/build/classes/demo/hadoop/目录找一个比较大的log文件放入一个目录,然后运行hadoop/bin/hadoopdemo.hadoop.HadoopGreplog文件所在目录任意的输出目录grep的字符串。查看输出目录的结果,查看hadoop/logs/里的运行日志。在重新运行前,先删掉输出目录。我们看一下Hadoop入门中运行Hadoop程序的第二种模式。


1.2单机集群运行模式

现在来搞一下只有单机的集群.假设以完成3.1中的设置,本机名为hadoopserver

第1步.然后修改hadoop-site.xml,加入如下内容:

  1. <property> 
  2. <name>fs.default.name</name> 
  3. <value>hadoopserver:9000</value> 
  4. </property> 
  5. <property> 
  6. <name>mapred.job.tracker</name> 
  7. <value>hadoopserver:9001</value> 
  8. </property> 
  9. <property> 
  10. <name>dfs.replication</name> 
  11. <value>1</value> 
  12. </property> 

从此就将运行从local文件系统转向了hadoop的hdfs系统,mapreduce的jobtracker也从local的进程内操作变成了分布式的任务系统,9000,9001两个端口号是随便选择的两个空余端口号。
另外,如果你的/tmp目录不够大,可能还要修改hadoop.tmp.dir属性。

第2步.增加ssh不输入密码即可登陆。
因为Hadoop需要不用输入密码的ssh来进行调度,在不su的状态下,在自己的home目录运行ssh-keygen-trsa,然后一路回车生成密钥,再进入.ssh目录,cpid_rsa.pubauthorized_keys
详细可以man一下ssh,此时执行sshhadoopserver,不需要输入任何密码就能进入了。

3.格式化namenode,执行
bin/hadoopnamenode-format

4.启动Hadoop
执行hadoop/bin/start-all.sh,在本机启动namenode,datanode,jobtracker,tasktracker

5.现在将待查找的log文件放入hdfs,。
执行hadoop/bin/hadoopdfs可以看到它所支持的文件操作指令。
执行hadoop/bin/hadoopdfsputlog文件所在目录in,则log文件目录已放入hdfs的/user/user-name/in目录中

6.现在来执行Grep操作
hadoop/bin/hadoopdemo.hadoop.HadoopGrepinout
查看hadoop/logs/里的运行日志,重新执行前。运行hadoop/bin/hadoopdfsrmrout删除out目录。

7.运行hadoop/bin/stop-all.sh结束。单机集群运行模式介绍完毕,我们看一下Hadoop入门中运行Hadoop程序的第三种集群运行模式。

1.3集群运行模式
假设已执行完3.2的配置,假设第2台机器名是hadoopserver2

1.创建与hadoopserver同样的执行用户,将hadoop解压到相同的目录。

2.同样的修改haoop-env.sh中的JAVA_HOME及修改与3.2同样的hadoop-site.xml

3.将hadoopserver中的/home/username/.ssh/authorized_keys复制到hadoopserver2,保证hadoopserver可以无需密码登陆hadoopserver2
scp/home/username/.ssh/authorized_keysusername@hadoopserver2:/home/username/.ssh/authorized_keys

4.修改hadoop-server的hadoop/conf/slaves文件,增加集群的节点,将localhost改为
hadoop-server
hadoop-server2

5.在hadoop-server执行hadoop/bin/start-all.sh
将会在hadoop-server启动namenode,datanode,jobtracker,tasktracker
在hadoop-server2启动datanode和tasktracker

6.现在来执行Grep操作
hadoop/bin/hadoopdemo.hadoop.HadoopGrepinout
重新执行前,运行hadoop/bin/hadoopdfsrmrout删除out目录

7.运行hadoop/bin/stop-all.sh结束。


二、效率
经测试,Hadoop并不是万用灵丹,很取决于文件的大小和数量,处理的复杂度以及群集机器的数量,相连的带宽,当以上四者并不大时,hadoop优势并不明显。
比如,不用hadoop用java写的简单grep函数处理100M的log文件只要4秒,用了hadooplocal的方式运行是14秒,用了hadoop单机集群的方式是30秒,用双机集群10M网口的话更慢,慢到不好意思说出来的地步。本节关于Hadoop入门方面的内容就介绍到这里。

【编辑推荐】

  1. Hadoop起源及其四大特性详解
  2. Hadoop开源已经实现
  3. Hadoop集群与Hadoop性能优化
  4. Hadoop 从Yahoo向Google的技术转折
  5. Yahoo公布Hadoop的源代码
【责任编辑:程华权 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

C#2005编程进阶与参考手册

本书非常详细而全面地介绍了C#程序设计语言。本书不是“5分钟学习C#”式的手册,也不是那种教您“照猫画虎”地创建一些与您的实际工作需要...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊