Hadoop入门实验

一、实验目的

了解Hadoop的MapeReduce工作原理

二、实验内容

实现基于单机的伪分布式运行模拟

三、实验需要准备的软件和源

1、Jdk1.6以上 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、Cygwin       下载地址:http://www.cygwin.com/

3、稳定版hadoop  下载地址:http://hadoop.apache.org/common/releases.html#Download

四、实验步骤

1、了解Hadoop工作机制

a、Hadoop整体框架运行机制介绍

请参见http://hi.baidu.com/wongxuelei/blog/item/c1642050cfb56d481138c2fd.html

b、Hadoop中MapReduce部分执行流程

请参见http://www.blogjava.net/shenh062326/archive/2011/01/14/342959.html

c、Hadoop在线中文技术文档

请参见http://hadoop.apache.org/common/docs/r0.18.2/cn/

个人意见:

a和b说的非常详细,刚入门可以大体了解Hadoop的HDFS和MapeReduce工作框架,等做完实验后再回过头来看这个会更清楚;c上有实例的说明和代码。

2、安装JDK到本地机器

安装目录最好不要有空格(如果有在配置Hadoop的JAVA_HOME时有点麻烦,下面会具体介绍)

3、安装Cygwin

请参见《Hadoop开发者入门》第11页 ——>在Windows上安装Hadoop教程

个人意见:

a、注意选择上面说的需在Cygwin中安装的包;

b、上面说到的http://www.cygwin.cn好像链接不上了,目前内陆最快的是源有

http://mirrors.163.com/cygwin/  http://mirrors.sohu.com/cygwin/ 会到30 k/s左右,其他的速度一般只有3~5 k/s;

c、如果没装成功,最好运行regedit.exe进入注册表,删除Cygwin文件,目录所在位置如图1;

d、环境变量配置仅需把平时我们陪JDK的方法配好,Cygwin仅需把bin所在目录加入,usr下的不用配;

e、安装好sshd后,该服务可以在装好的Cygwin中输入net start sshd命令启动。

图1 、Cygwin所在注册表位置

4、安装Hadoop

a、下载Hadoop的稳定版本,我选择的是hadoop-0.18.3.tar.gz(最新版本不太好用),然后解压到任意盘下;

b、配置Hadoop用于在单机环境上运行的配置文件在最后,来源http://hi.baidu.com/shirdrn/blog/item/33c762fecf9811375c600892.html

注意事项:

a、在配置完JAVA_HOME后,如果路径有空格,运行$ bin/hadoop namenode -format命令也可能会出错,最好的办法是将Windows下的JDK映射到Cygwin中,命令如下:

LN  -s  /cygdrive/c/Program\ Files/Java/<jre name>  /usr/local/<jre name>

其中

/cygdrive/c/Program\ Files/Java/<jre name>表示在Windows中的JDK路径,

/usr/local/<jre name>表示你想映射到的Cygwin路径。

然后在把JAVA_HOME配置成 export  JAVA_HOME="/usr/local/<jre name>"

b、运行“ $ bin/hadoop dfs -put ./input input”命令时可能会出现让你把hadoop-site.xml中的“localhost:9000”改成“ hdfs:\\localhost:9000”的问题。未解决,据网上了解说是因为单机运行的问题。

来源http://hi.baidu.com/shirdrn/blog/item/33c762fecf9811375c600892.html


首先进行Hadoop配置:

1、conf/hadoop-env.sh文件中最基本需要指定JAVA_HOME,例如我的如下:


export JAVA_HOME="D:\Program Files\Java\jdk1.6.0_07"

如果路径中存在空格,需要使用双引号。

2、只需要修改conf/hadoop-site.xml文件即可,默认情况下,hadoop-site.xml并没有被配置,如果是基于单机运行,就会按照hadoop-default.xml中的基本配置选项执行任务。

将hadoop-site.xml文件修改为如下所示:


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
    <name>fs.default.name</name>
    <value>localhost:9000</value>
</property>
<property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
</property>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
</configuration>

实现过程

1、认证配置

启动cygwin,同时使用下面的命令启动ssh:


$ net start sshd

如图所示:

接着,需要对身份加密认证这一部分进行配置,这也是非常关键的,因为基于分布式的多个Datanode结点需要向Namenode提供任务执行报告信息,如果每次访问Namenode结点都需要密码验证的话就麻烦了,当然我要说的就是基于无密码认证的方式的配置,可以参考我的其他文章。

生成RSA公钥的命令如下:


$ ssh-keygen

生成过程如图所示:

上面执行到如下步骤时需要进行设置:


Enter file in which to save the key (/home/SHIYANJUN/.ssh/id_rsa):

直接按回车键即可,按照默认的选项将生成的RSA公钥保存在/home/SHIYANJUN/.ssh/id_rsa文件中,以便结点之间进行通讯认证。

继续执行,又会提示进行输入选择密码短语passphrase,在如下这里:


Enter passphrase (empty for no passphrase):

直接按回车键,而且一定要这么做,因为空密码短语就会在后面执行过程中免去结点之间通讯进行的认证,直接通过RSA公钥(事实上,我们使用的是DSA认证,当然RSA也可以进行认证,继续看后面)认证。

RSA公钥主要是对结点之间的通讯信息加密的。如果RSA公钥生成过程如上图,说明正确生成了RSA公钥。

接着生成DSA公钥,使用如下命令:


$ ssh-keygen -t dsa

生成过程与前面的RSA类似,如图所示:

然后,需要将DSA公钥加入到公钥授权文件authorized_keys中,使用如下命令:


$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

如图所示,没有任何信息输出:

到此,就可以进行Hadoop的运行工作了。

2、Hadoop处理的数据文件准备

我使用的是hadoop-0.16.4版本,直接拷贝到G:\根目录下面,同时,我的cygwin直接安装在G:\Cygwin里面。

在目录G:\hadoop-0.16.4中创建一个input目录,里面准备几个TXT文件,我准备了7个,文件中内容就是使用空格分隔的多个英文单词,因为是运行WordCount这个例子,后面可以看到我存入了多少内容。

3、运行过程

下面,切换到G:\hadoop-0.16.4目录下面


$ cd http://www.cnblogs.com/cygdrive/g/hadoop-0.16.4

其中通过cygdrive(位于Cygwin根目录中)可以直接映射到Windows下的各个逻辑磁盘分区中。

在执行任务中,使用HDFS,即Hadoop的分布式文件系统,因此这时要做的就是格式化这个文件系统,使用下面命令可以完成:


$ bin/hadoop namenode -format

格式化过程如图所示:

此时,应该启动Namenode、Datanode、SecondaryNamenode、JobTracer,使用这个命令启动:


$ bin/start-all.sh

启动过程如图所示:

如果你没有配置前面ssh的无密码认证,或者配置了但是输入了密码短语,那么到这里就会每启动一个进程就提示输入密码,试想,如果有N多进程的话,那岂不是要命了。

然后,需要把上面我们在本地的input目录中准备的文件复制到HDFS中的input目录中,以便在分布式文件系统管理这些待处理的数据文件,使用下面命令:


$ bin/hadoop dfs -put ./input input

执行上述命令如果没有信息输出就复制成功。

现在,才可以执行Hadoop自带的WordCount列子了,使用下面命令开始提交任务,进入运行:


$ bin/hadoop jar hadoop-0.16.4-examples.jar wordcount input output

最后面两个参数分别为数据输入目录和数据处理完成后的输出目录,这里,不能在你的G:\hadoop-0.16.4目录中存在output这个目录,否则会报错的。

运行过程如图所示:

通过上图,可以看出在运行一个Job的过程中,WordCount工具执行任务的进度情况,非常详细。

最后查看执行任务后,处理数据的结果,使用的命令行如下所示:


$ bin/hadoop dfs -cat output/part-00000

输出结果如图所示:

最后,停止Hadoop进程,使用如下命令:


$ bin/stop-all.sh

如图所示:

以上就是全部的过程了。

5、hadoop自带example的代码和分析

请参见Hadoop MapReduce教程

http://www.cnblogs.com/panderen/archive/2011/05/17/2048651.html

时间: 2024-10-08 17:41:55

Hadoop入门实验的相关文章

Hadoop入门一:Hadoop简介

  从数据爆炸开始...  1.1 第三次工业革命 第一次:18世纪60年代,手工工厂向机器大生产过渡,以蒸汽机的发明和使用为标志. 第二次:19世纪70年代,各种新技术新发明不断被应用于工业生产,以电力的发明使用为标志. 第三次:20世界四五十年代末,以高新技术为代表的新科学技术革命,以原子能.航天技术和电子计算机 为标志. 1.2 信息技术发展带来的数据爆炸 纽约证券所交易    每天 1TB FaceBook一千亿照片  1PB 腾讯 每天 300TB 淘宝 每天 pv20亿 数据量 50

Hadoop入门学习笔记---part4

紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操作,前提是按照<Hadoop入门学习笔记---part2>中的已经在虚拟机中搭建好了Hadoop伪分布环境:并且确定现在linux操作系统中hadoop的几个进程已经完全启动了. 好了,废话不多说!实际的例子走起. 在myeclipse中新建一个java工程: 在项目工程中新建一个lib包用于存放

Hadoop入门学习笔记---part1

随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力,好好做.正是因为选题和hadoop有关,现在正式开始学习hadoop.将笔记整理于此,希望与志同道合的朋友共同交流. 作者:itRed 邮箱:[email protected] 个人博客链接:http://www.cnblogs.com/itred 好了,废话不多说.进入正题!开始hadoop的学习

Hadoop入门进阶步步高(六)-Hadoop1.x与Hadoop2的区别

六.Hadoop1.x与Hadoop2的区别 1.变更介绍 Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更: l HDFS的NameNodes可以以集群的方式布署,增强了NameNodes的水平扩展能力和可用性: l MapReduce将JobTracker中的资源管理及任务生命周期管理(包括定时触发及监控),拆分成两个独立的组件,并更名为YARN(Yet Another Re

Hadoop入门学习笔记---part3

2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hadoop有了一个基础的了解.但是还是有一些理论性的东西需要重复理解,这样才能彻底的记住它们.个人认为重复是记忆之母.精简一下: NameNode:管理集群,并且记录DataNode文件信息: SecondaryNameNode:可以做冷备份,对一定范围内的数据作快照性备份: DataNode:存储数据:

第五十九课 Hadoop入门介绍

Hadoop入门 Hadoop入门 Hadoop 2.0介绍

Hadoop入门进阶步步高(一)-环境准备

前言 Hadoop从存储上来说,是类似于冗余磁盘阵列(RAID)的存储方式,将数据分散存储并提供以提供吞吐量,它的存储系统就是HDFS(Hadoop Distuibute Fils System):从计算上来说,它通过MapReduce模型,将大数据的计算分发到多台计算机上完成,再将结果合并,减少计算的时间. Hadoop适合于: 1.超大数据的计算: 2.一次写入.多次读取的模式: 3.可以跑在普通的硬件上. Hadoop不适合: 1.低延迟的数据访问,它是为高数据吞吐量应用优化的: 2.大量

Hadoop入门进阶步步高(二)-目录介绍

二.Hadoop目录结构 这里重点介绍几个目录bin.conf及lib目录. 1.$HADOOP_HOME/bin目录 文件名称 说明 hadoop 用于执行hadoop脚本命令,被hadoop-daemon.sh调用执行,也可以单独执行,一切命令的核心 hadoop-config.sh Hadoop的配置文件 hadoop-daemon.sh 通过执行hadoop命令来启动/停止一个守护进程(daemon). 该命令会被bin目录下面所有以"start"或"stop&quo

Hadoop入门进阶步步高(三)-配置Hadoop

三.配置Hadoop 1.设置$HADOOP_HOME/conf/hadoop-env.sh 这个文件中设置的是Hadoop运行时需要的环境变量,在1.2.1版中共有19个环境变量,如下: 变量名称 默认值 说明 JAVA_HOME 设置JDK的路径,这个必须设置,否则Hadoop无法启动,值如: /usr/local/jdk1.6.0_33 HADOOP_CLASSPATH 空 这个用以设置用户的类路径,也可以在执行计算之前设置 HADOOP_HEAPSIZE 1000m 设置Hadoop堆的