2023年7月13日发(作者:)
Windows下使用Hadoop0.20.2实例
1.1 Windows 下使用Hadoop 的环境配置
(1)安装Hadoop 前,首先需要安装Cygwin
首先下载Cygwin(/),当 下载成功后,直接运行,在弹出的“Cygwin Net Release Setup Program”的对话框中直接点击“下一步”,选择“download source”如下:
选择“Install from Internet”,进入下图所示对话框:
设置Cygwin 的安装目录,Install For 选择“All Users”,Default Text File Type
选择“Unix/binary”。“下一步”之后,设置Cygwin 安装包存放目录:
1 设置“Internet Connection”的方式,选择“Direct Connection”:
之后选择“Download site”:
选择最好选.cn结尾的,若无可以随意选择,若安装失败可多尝试几个。
2 “下一步”之后,可能会弹出下图的“Setup Alert”对话框,直接“确定”即可。
在上图所示的对话框过程中,可能会弹出如下图所示的“Setup Alert”对话框,直接点击“确定”即可。
进入“Select Packages”对话框,必须保证“Net Category”下的“OpenSSL”被安装:
安装中需要选中Net category 中的openssh,如下图所示:
如果还打算在eclipse上编译Hadoop,则还必须安装“Base Category”下的“sed”,如下图所示:
3 另外,安装“Editors Category”下的vim,以方便在Cygwin上直接修改配置文件;“Devel Category”下的subversion 建议安装,如下图所示:
安装完成后进行环境变量的配置。
(2)安装JDK
(3)配置Windows 系统变量
新建系统变量CYGWIN,变量值为ntsec
编辑系统变量里的Path 变量,将JDK的bin目录、Cygwin的bin目录以及Cygwin
4 的usrsbin目录加入到Path变量中。
(e:cygwin64,e:cygwin64usrsbin)
新建系统变量JAVA_HOME,变量指向JRE安装目录。
(4)安装配置ssh
启动cygwin,执行命令:$ ssh-host-config。
当询问"Should privilege separation be used"时,输入no;当询问"Do you want to
install sshd as a service? "选yes;当提示"Enterthe value of CYGWIN for the
daemon:[]"时,选择ntsec。(好像没出现ntsec)
当看到“Have fun”时,一般表示sshd 服务安装成功了。
输入命令$ net start sshd,启动SSH,或者在Windows 服务项里启动CYGWIN
sshd。
注意:
SSH无法启动的解决方法:
解决方案:
按上图配置命令的提示说明,需要执行mkpasswd 和 mkgroup重新生成权限信息
依次执行下面命令
5 $ mkpasswd -l > /etc/passwd
$ mkgroup -l > /etc/group
$ cygrunsrv -R sshd 删除ssd服务
$ ssh-host-config -y 重新配置
$ cygrunsrv -S sshd 启动服务。
sshd服务启动成功。
(注意:sshd在cyg_server帐户下运行)
然后执行$ ssh-keygen来生成密钥对,然后一直回车键确定。这样会把生产的密钥对保存在.ssh 目录下。使用命令将RSA 公钥加入到公钥授权文件authorized_keys 中:
$ cd /home/Administrator/.ssh
$ cat id_ >> authorized_keys
最后执行$ ssh localhost,就可以实现无需密码的SSH 连接。
6 完成上述操作后,执行exit命令先退出Cygwin窗口。
执行ssh localhost时,会有如下图所示的提示,输入yes,然后回车即可:
如果不是第一次执行则会出现如下对话框:
成功启动ssh服务。
1.2 安装Hadoop
将Hadoop安装包(在此使用的是hadoop-0.20.2,相关apache软件下载地址:/dist/)解压到你自己选择的目录(e:hadoop),然后需要修改hadoop 的配置文件,它们位于conf 子目录下,分别是、、 和 共四个文件。
1.2.1修改
只需要将JAVA_HOME 修改成JDK 的安装目录即可,需要注意两点:
7 (1) JDK 必须是1.6 或以上版本;
(2) 设置JDK 的安装目录时,路径不能是Windows 风格的目录例如:C:jdk1.7,而是LINUX 风格: /cygdrive/c/jdk1.7。
因此在 中设定JDK 的安装目录:
export JAVA_HOME=/cygdrive/c/jdk1.7(注意删除-sun和export前面的注释“#”)
1.2.2 修改
为简化 配置,将srccore 目录下的文件复制到conf 目录下,并将文件名改成。
修改:
1.2.3 修改
为简化 配置,将srchdfs 目录下的文件复制到conf 目录下,并将 文件名改成。
修改:
1.2.4 修改
为简化 配置,将srcmapred 目录下的 文件复制到conf 目录下,并将 文件名改成。
8 修改:
到此修改完成,然后启动hadoop。
1.3 启动hadoop
在Cygwin 中,进入hadoop 的bin 目录,运行./hadoop namenode -format做格式化处理(仅第一次需要),再运行./ 启动hadoop,在启动成功之后,可以执行./hadoop fs -ls /命令,查看hadoop 的根目录,如下图所示:
首先我们要先启动sshd服务,然后登录:
然后启动hadoop:
9
我们可以验证是否启动成功:(./hadoop dfsadmin -report)
也可以这样查看:
127.0.0.1:50030/
127.0.0.1:50070/
最后,使用 /bin/hadoop dfsadmin -safemode leave 命令使Hadoop退出安全模式。
有时在启动的时候会遇到一些问题,可能会出现
10 这时需要关闭系统./ ,然后删除hadoop/tmp下所有文件与目录,重新格式化并启动系统。至此,我们的Hadoop安装成功。
1.4 Hadoop运行wordcount实例
运行WordCount 实例。在本地文件系统上建立e:/hadoop/run/input目录,放入若干文件,文件为由多个单词组成(单词由空格分隔)的文本。
将文件复制到HDFS 的目录下,命名为input,并运行:
$ bin/hadoop dfs -put run/input input
11 没有内容输出就说明上传至文件系统成功。
运行:$ bin/hadoop jar wordcount input output
$ bin/hadoop jar input output2
( 为自定义类,参见后面插件部分)
另需注:
:(内容)
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 10.0-b23 (Sun Microsystems Inc.)
Main-Class: com/cyberware/WordCount
12 output 为数据处理完成后输出目录, 默认在Hadoop 根目录下。任务执行完,用以下命令查看分布式文件系统上数据处理的结果:
$ bin/hadoop dfs -cat output /* 或
$ bin/hadoop fs -cat hdfs://localhost:9000/user/2zh/administrator
/input/
至此,完成wordcount实例的运行。
1.5使用eclipse编写Hadoop应用程序
在此,用eclipse编写了一个简单的程序。
1)在eclipse下创建一个java工程DFSOperator,并创建相应的类。
2)配置编译参数
配置“Build Path”,选中“DFSOperator”,单击右键,点击下图所示菜单“Build
Path -> Configure Build Path”,进入“Java Build Path”配置界面。选择“Libraries”标签页,点击右侧的“Add External JAR”按钮,将安装好的“”添加进来。
13
3)编辑源代码
4)编译生成jar包
右键“DFSOperator”项目,选择“Build Project”,编译项目工程,编译“”后,生成下图所示的 文件:
14 右键项目,选择“Export”,导出“JAR file”,也就是jar包。然后将导出的jar 文件上传到Hadoop Master 节点。
5)运行
导出的jar文件放到hadoop的bin文件下,进入Hadoop 的bin 目录,用以下命令进行测试运行:
(1) ls:查看当前目录,检查dfs_是否存在;
(2) ./hadoop fs -ls /:查看Hadoop根目录下是否存在dfs_文件;
(3) ./hadoop jar ./dfs_ DFSOperator:运行dfs_,以生成dfs_ 文件;
(4) ./hadoop fs -ls /:再查看Hadoop根目录下是否存在dfs_文件;
(5) ./hadoop fs -cat /dfs_:检查dfs_文件的内容。
该程序完成的功能简单,但从中可以学到如何在Windows下利用eclipse进行Hadoop编程。
15 1.6 使用IBM MapReduce Tools for Eclipse进行Hadoop编程(完成wordcount)
使用 IBM MapReduce Tools for Eclipse,使用这个Eclipse plugin可以简化开发和部署 Hadoop 并行程序的过程。基于这个plugin,可以在 Eclipse 中创建一个 Hadoop MapReduce 应用程序,并且提供了一些基于 MapReduce 框架的类开发的向导,可以打包成 JAR 文件,部署一个 Hadoop MapReduce 应用程序到一个 Hadoop 服务器(本地和远程均可),可以通过一个专门的视图 ( perspective )
查看 Hadoop 服务器、Hadoop 分布式文件系统( DFS )和当前运行的任务的状态。
1)安装插件IBM MapReduce Tools for Eclipse
安装插件,然后点击 Eclipse 主菜单上 Windows->Preferences,然后在左侧选择 Hadoop Home Directory,设定Hadoop 主目录:
2)创建MapReduce Project
点击Eclipse主菜单上File->New->Project,在弹出的对话框中选择MapReduce
Project。然后就可以一个普通的Eclipse Java project那样,添加入Java类。
16 编码后导出jar包,与创建java Project相同。导出jar包后,在hadoop下运行。
17
至此完成wordcount。
IBM MapReduce tools 还提供了几个实用的向导 ( wizard ) 工具,帮助创建单独的Mapper类,Reducer类,MapReduce Driver类,在编写比较复杂的
MapReduce程序时,将这些类独立出来是非常有必要的,也有利于在不同的计算任务中重用自己编写的各种Mapper类和Reducer类。
18 附录:
用IBM的MapReduce Tools for Eclipse插件简化Hadoop开发和部署
使用Cygwin模拟Linux环境,配置ssh以及认证就非常麻烦了,不过真要是走一遍那个流程,会学会不少东西的啊。
IBM的MapReduce Tools for Eclipse插件,极大地简化了这些配置,你可以想运行一个Java类一样轻松进行开发、调试和部署。
下载IBM的MapReduce Tools for Eclipse插件,地址是/tech/mapreducetools,下载完成后,解压缩,将plugins目录下的文件夹拷贝到Eclipse目录下的plugins目录下,启动Eclipse,进行一番简单地配置就能进行Hadoop的开发、调试和部署了。
hadoop-0.20.2下自带的eclise插件已过时。
解决方案:
1、下载正确的插件:/jira/secure/attachment/12460491/
2、重命名:将下载的插件重命名为""
3、替换原来的插件(D:Myeclipse10MyEclipse 10dropins下)。
4、重启eclipse
配置过程:
启动Eclipse,选择Window—>Preferences,弹出如图所示的对话框:
19 设置Hadoop Main Directory为自己下载的Hadoop发行包的解压包所在目录。设置完成后单击“OK”完成。
新建一个 Project ,选择MapReduce Project,如图所示:
继续进行创建,选择填写工程名后,完成一个MapReduce Project工程的创建,可以进行Hadoop程序的开发了。
比如,我直接把Hadoop自带的WordCount类程序一点不动地拷贝过来,修改包名。
然后进行运行时配置,选择Run As—>Open Debug Dialog选项,在Arguments选项卡中设置:
20 在其中填写两个目录,分别为数据输入目录和输出目录,中间用空格分隔:
e:hadoopruninput e:hadooprunoutput (注意output需要先删除)
然后,就可以像运行一个Java程序一样运行了,控制台上打印出执行任务的信息,如下所示:
08/09/21 22:35:47 INFO rics: Initializing JVM Metrics with
processName=JobTracker, sessionId=
08/09/21 22:35:47 WARN ent: No job jar file set. User classes
may not be found. See JobConf(Class) or JobConf#setJar(String).
08/09/21 22:35:47 INFO putFormat: Total input paths to
process : 7
08/09/21 22:35:48 INFO ent: Running job: job_local_1
08/09/21 22:35:48 INFO k: numReduceTasks: 1
21 08/09/21 22:35:49 INFO ent: map 0% reduce 0%
08/09/21 22:35:50 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+1957
08/09/21 22:35:50 INFO nner: Task 'job_local_1_map_0000'
done.
08/09/21 22:35:50 INFO nner: Saved output of task
'job_local_1_map_0000' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:50 INFO k: numReduceTasks: 1
08/09/21 22:35:50 INFO ent: map 100% reduce 0%
08/09/21 22:35:51 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+10109
08/09/21 22:35:51 INFO nner: Task 'job_local_1_map_0001'
done.
08/09/21 22:35:51 INFO nner: Saved output of task
'job_local_1_map_0001' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:51 INFO k: numReduceTasks: 1
08/09/21 22:35:51 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+1957
08/09/21 22:35:51 INFO nner: Task 'job_local_1_map_0002'
done.
08/09/21 22:35:51 INFO nner: Saved output of task
'job_local_1_map_0002' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:51 INFO k: numReduceTasks: 1
08/09/21 22:35:51 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+1987
08/09/21 22:35:51 INFO nner: Task 'job_local_1_map_0003'
done.
08/09/21 22:35:51 INFO nner: Saved output of task
'job_local_1_map_0003' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:52 INFO k: numReduceTasks: 1
08/09/21 22:35:52 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+1957
08/09/21 22:35:52 INFO nner: Task 'job_local_1_map_0004'
done.
08/09/21 22:35:52 INFO nner: Saved output of task
'job_local_1_map_0004' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:52 INFO k: numReduceTasks: 1
08/09/21 22:35:52 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+1985
08/09/21 22:35:52 INFO nner: Task 'job_local_1_map_0005'
done.
08/09/21 22:35:52 INFO nner: Saved output of task
'job_local_1_map_0005' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:52 INFO k: numReduceTasks: 1
22 08/09/21 22:35:53 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+1957
08/09/21 22:35:53 INFO nner: Task 'job_local_1_map_0006'
done.
08/09/21 22:35:53 INFO nner: Saved output of task
'job_local_1_map_0006' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:53 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+10109
08/09/21 22:35:54 INFO ent: map 28% reduce 0%
08/09/21 22:35:54 INFO obRunner:
file:/G:/hadoop-0.16.4/in/:0+1957
08/09/21 22:35:54 INFO obRunner: reduce > reduce
08/09/21 22:35:54 INFO nner: Task 'reduce_xk6d4v' done.
08/09/21 22:35:54 INFO nner: Saved output of task
'reduce_xk6d4v' to file:/G:/hadoop-0.16.4/myout
08/09/21 22:35:55 INFO ent: Job complete: job_local_1
08/09/21 22:35:55 INFO ent: Counters: 9
08/09/21 22:35:55 INFO ent: Map-Reduce Framework
08/09/21 22:35:55 INFO ent: Map input records=7
08/09/21 22:35:55 INFO ent: Map output
records=3649
08/09/21 22:35:55 INFO ent: Map input bytes=21909
08/09/21 22:35:55 INFO ent: Map output bytes=36511
08/09/21 22:35:55 INFO ent: Combine input
records=3649
08/09/21 22:35:55 INFO ent: Combine output
records=21
08/09/21 22:35:55 INFO ent: Reduce input groups=7
08/09/21 22:35:55 INFO ent: Reduce input
records=21
08/09/21 22:35:55 INFO ent: Reduce output
records=7
和使用Cygwin模拟时的运行过程信息是一致的。
有了这个MapReduce Tools 插件,可真是太方便了。
中文格式支持:
1,UTF-8无BOM格式;
2,UTF-8格式,
其他将乱码!
23
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689203146a220425.html
评论列表(0条)