一、简述
在centos7 Linux下进行伪分布式搭建。Hadoop 伪分布式模式是在单机上模拟 Hadoop 分布式,单机上的分布式并不是真正的伪分布式,而是使用线程模拟分布式。Hadoop 本身是无法区分伪分布式和分布式的,两种配置也很相似,唯一不同的地方是伪分布式是在单机器上配置,数据节点和名字节点均是一个机器。虽然Hadoop的安装步骤并不复杂,但是我在安装期间还是遇到了很多琐碎的问题,现将自己搭建Hadoop的详细过程和遇到的问题记录下来。完全分布式就是一个hadoop集群,有n台机器组成,一般组织方式是:一台机器作为master,上面 运行 namenode和jobtracker,另外的机器作为slave,上面运行datanode和tasktracker,至于secondaryname,可以运行在master上,也可以运行在另外一台机器上。secondaryname是namenode的一个备份里面同样保存了名字空间,和文件到文件块的map关系。建议运行在另外一台机器上,这样master死掉之后,还可以通过secondaryname所在的机器找回名字空间,和文件到文件块得map关系数据,恢复namenode。
二、 环境搭建
1.准备工作
主机名称 | 系统 | jdk | hadoop |
---|---|---|---|
hadoop | centos7 | jdk1.8+ | hadoop-2.7.3 |
2.开始安装
1.关闭防火墙、配置主机明和ip 、 ssh无密码登录
hadoop、jdk的下载、安装以及环境变量的配置请参考:2.伪分布hadoop的配置:
2.1core-site.xmlfs.defaultFS hdfs://hadoop:9000 hadoop.tmp.dir file:/home/hadoop/hadoop-2.7.3/tmp
2.2 hdfs-ssite.xml
dfs.replication 1 dfs.namenode.name.dir file:/home/hadoop/hadoop-2.7.3/tmp/dfs/name
2.3. mapred-site.xml
mapreduce.framework.name yarn
2.4 yarn.site.xml
yarn.nodemanager.aux-services mapreduce_shuffle
2.5 slaves
localhost
3.启动hadoop
1.hdfs namenode -format #第一次启动要执行格式化,之后启动不用执行这个
看到如下图证明成功:
2.mr-jobhistory-daemon.sh start historyserver
看到如下图证明成功:
3.start-dfs.sh
看到如下图证明成功:
4.start-yarn.sh
看到如下图证明成功:
5.在web浏览器上输入自己主机的ip+:50070端口号,即可看到如下图所示的页面查看节点状况和job状况 :
三、hadoop 的使用
一个测试例子wordcount
计算输入文本中词语数量的程序。WordCount在Hadoop主目录下的java程序包hadoop-0.20.2-examples.jar 中,执行步骤如下: 在/usr/local/hadoop/hadoop-0.20.2/bin/目录下进行如下操作: 执行 hadoop fs -ls命令,查看当前hdfs分布式文件系统的 文件目录结构,刚执行会说no such dictionary, 你要先建一个文件夹,用命令 haoop fs -mkdir testdir ,然后再执行hadoop fs -ls,就会展示/user/root/testdir 当前用户是root,所以hdfs的根目录就是 /user/roothadoop fs -mkdir okdir(新建目录名称,可任意命名)
离开hodoop的安全模式 bin/hadoop dfsadmin -safemode leave 在这个目录里放入文件:hadoop fs -put /usr/test_in/*.txt okdir(把本地/usr/test_in目录里的所有txt文件copy到 hdfs分布式文件系统的 /user/root/inputdir 目录里面,因为当前目录就是root 所以 直接写input 就代表/user/root/inputdir) 在/usr/local/hadoop/hadoop-0.20.2下执行: [root@master hadoop-0.20.2]# hadoop jar hadoop-0.20.2-examples.jar wordcount okdir output (提交作业,此处需注意okdir与output是一组任务,下次再执行wordcount程序,还要新建目录,不能跟okdir与output重名)11/05/28 22:02:34 INFO input.FileInputFormat: Total input paths to process : 0 11/05/28 22:02:34 INFO mapred.JobClient: Running job: job_201105282107_0005 11/05/28 22:02:35 INFO mapred.JobClient: map 0% reduce 0% 11/05/28 22:02:46 INFO mapred.JobClient: map 0% reduce 100% 11/05/28 22:02:48 INFO mapred.JobClient: Job complete: job_201105282107_0005 11/05/28 22:02:48 INFO mapred.JobClient: Counters: 8 11/05/28 22:02:48 INFO mapred.JobClient: Job Counters 11/05/28 22:02:48 INFO mapred.JobClient: Launched reduce tasks=1 11/05/28 22:02:48 INFO mapred.JobClient: Map-Reduce Framework 11/05/28 22:02:48 INFO mapred.JobClient: Reduce input groups=0 11/05/28 22:02:48 INFO mapred.JobClient: Combine output records=0 11/05/28 22:02:48 INFO mapred.JobClient: Reduce shuffle bytes=0 11/05/28 22:02:48 INFO mapred.JobClient: Reduce output records=0 11/05/28 22:02:48 INFO mapred.JobClient: Spilled Records=0 11/05/28 22:02:48 INFO mapred.JobClient: Combine input records=0 11/05/28 22:02:48 INFO mapred.JobClient: Reduce input records=0
执行完毕后,在hadoop下输入
hadoop fs -ls output
显示如下:
Found 2 items drwxr-xr-x - root supergroup 0 2011-05-08 05:20 /user/root/output/_logs -rw-r--r-- 1 root supergroup 1688 2011-05-08 05:21 /user/root/output/part-r-00000
可以查看运行结果 :
#bin/hadoop dfs -cat hellooutput/part-r-00000
显示如下:
a 1 are 1 day 1 fine 1 fridey 1 is 3 name 1 not 1 today 4 you 1 your 1
也可进入web界面刷新查看running job及completed job的显示。