加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 教程文章 > NOSQL数据库

基于单机的Hadoop伪分布式运行模拟实现【推荐】

时间:2012-04-25 17:19:12  来源:  作者:

在单机来模拟Hadoop基于分布式运行,最终通过在本机创建多个线程来模拟。主要就是实现运行Hadoop自带的WordCount这个例子,具体实现过程将在下面详细叙述。

(PS:因为我是一个新手,刚接触Hadoop不久,在学习Hadoop过程中遇到很多问题,特别将自己的实践过程写得非常详细,为更多对Hadoop感兴趣的朋友提供尽可能多的信息,仅此而已。)

模拟Linux环境配置

使用cygwin来模拟Linux运行环境,安装好cygwin后,配置好OpenSSH以后才能进行下面的操作。

Hadoop配置

首先进行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 ../../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

如图所示:

以上就是全部的过程了。


 

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
在CentOS下搭建Android 开发环境
在CentOS下搭建Androi
轻松搭建属于自己的Ubuntu发行版
轻松搭建属于自己的Ub
利用SUSE Studio 打造自己的个性化Linux发行版
利用SUSE Studio 打造
那些采用PHP技术的IT大企业
那些采用PHP技术的IT大
相关文章
    无相关信息
栏目更新
栏目热门