Hadoop单机模式的配置与安装
版权所有
前言:
由于Hadoop属于java程序,所以,安装Hadoop之前需要先安装jdk。
对于hadoop0.20.2的单机模式安装就需要在一个节点(一台主机)上运行5个节点。
分别是:
JobTracker:负责Hadoop的Job任务分发和管理。
TaskTracker:负责在单个节点上执行MapReduce任务。
对于Hadoop里面的HDFS的节点又有
NameNode:主节点,负责管理文件存储的名称节点
DateNode:数据节点,负责具体的文件存储节点。
由于HDFS中NameNode非常繁忙,容易产生故障。说以对于HDFS文件系统来说,需要一个节点随时给他复制编辑到名称节点NameNOde里面去。这样的一个类似于备份的节点叫做SecondaryNameNode。
所以对于Hadoop来说单机模式部署时
JobTracker
TaskTracker
NameNode
SecondaryNameNode
DateNode
这样的5个节点都只能安装在一台主机上。
很显然,在单机模式,里面数据如果自动做备份存储多份就没有意义。所以在单机模式和伪分布式模式里面数据只需要存储一份就可以了。但在完全分布式环境里面hadoop最少有三个节点(三台主机)。
完全分布式。最少要有三个节点(三台主机)
一个节点用来做:NameNode和JobTracker
一个节点用来做:SecondaryNameNode,随时用来编辑日志,完成向NameNode之间的合并。
一个节点用来做:DateNode,存储数据。
虽然三个节点组成的Hadoop并不能算完全分布模式。但已经具备了hadoop的基本构架了。随时可以增加其他节点。因此可以实现工作的节点越多,其hadoop的调度越强大。为了Hadoop能正常运行,Hadoop为每一个进程默认启动了1G的内存,当然这并不影响我们在虚拟机上模式实现。这1G的内存只是它最大能用到的是1G的内存。所以在正在的Hadoop运行时,你必须要保证Hadoop的物理资源要足够才行。
Hadoop的单机模式安装。
一般来说Hadoop都是别人编译好的版本。直接解压缩,然后过去启动就行了。
本次安装Hadoop所需要的基本工具。
hadoop-0.20.2-cdh3u4.tar.gz
jdk-7u76-linux-x64.tar.gz
注意:Hadoop的版非常多,每种版本之间差异特别大,一般每个版本都会对应特定的Jdk版本。
第一步:解压安装包到指定位置
[root@gdy01gandian]# tar -xf jdk-7u76-linux-x64.tar.gz -C /usr/gd/
[root@gdy01gandian]# tar -xf hadoop-0.20.2-cdh3u4.tar.gz -C /usr/gd/
注意:这里的/usr/gd/目录为本人已经提前创建好的目录,当然,你也可以选择自己创建好的其他目录。不过如果这里的目录改变了,下面后来的配置信息也要随着改变。
第二步,进入目录查看文件
[root@gdy01gandian]# cd /usr/gd/
[root@gdy01 gd]#ll
第三步:为jdk和Hadoop创建连接文件。
[root@gdy01 gd]#ln -s jdk1.7.0_76 java
[root@gdy01 gd]#ln -s hadoop-0.20.2-cdh3u4 hadoop
第四步:在/etc/profile.d/目录下配置hadoop和Jdk的环境变量
先配置java的环境变量:
[root@gdy01 gd]#vim /etc/profile.d/java.sh
添加如下信息:
JAVA_HOME=/usr/gd/java
JAVA_BIN=$JAVA_HOME/bin
PATH=$JAVA_BIN:$PATH
export JAVA_HOMEJAVA_BIN PATH
wq保存退出。
配置hadoop的环境变量:
[root@gdy01 gd]#vim /etc/profile.d/hadoop.sh
添加如下信息:
HADOOP_HOME=/usr/gd/hadoop
PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_HOMEPATH
wq保存退出。
到这里为了测试刚刚配置的信息是否成功,可以重新登录一次。
[root@gdy01 gd]#exit
退出当前用户
然后重新登录:
第五步:检查(hadoop是否已经配置成功,查看hadoop的版本信息)
输入:
[root@gdy01 ~]# hadoopversion
检查java环境变量是否已经配置成功,查看java的版本信息
[root@gdy01 ~]#java -version
这里已经看到配置基本完成。
第六步:修改hadoop的配置文件:
进入hadoop文件夹
[root@gdy01 ~]# cd/usr/gd/hadoop
[root@gdy01hadoop]# cd conf/
[root@gdy01 conf]#ll
【Masters】当前运行的为主节点,Masters定义要运行的第二名称节点。
hadoop的secondary-masters主机列表,当启动Hadoop时,其会在当前主机上启动NameNode和JobTracker,然后通过SSH连接此文件中的主机以作为备用NameNode;
【Slaves】定义每一个重节点。保证每个节点都运行tasktracke,datenode这两个进程。
Hadoop集群的slave主机列表,master启动时会通过SSH连接至此列表中的所有主机并为其启动DataNode和taskTracker进程;
【core-site.xml】用于定义系统级别的参数,如HDFS URL、Hadoop的临时目录以及用于rack-aware集群中的配置文件的配置等,此中的参数定义会覆盖core-default.xml文件中的默认配置;
【hdfs-site.xml】HDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限等,此中的参数定义会覆盖hdfs-default.xml文件中的默认配置;
【mapred-site.xml】HDFS的相关设定,如reduce任务的默认个数、任务所能够使用内存的默认上下限等,此中的参数定义会覆盖mapred-default.xml文件中的默认配置;
【hadoop-env.sh】用于定义hadoop运行环境相关的配置信息,比如配置JAVA_HOME环境变量、为hadoop的JVM指定特定的选项、指定日志文件所在的目录路径以及master和slave文件的位置等;
经过上面的结束,你应该大致了解了这些配置文件的作业了。接下来就要配置这些信息。
[root@gdy01 conf]#cat masters
[root@gdy01 conf]#cat slaves
我们可以看到这里都是localhost。由于本次是按照的单机模式。所以不需要修改这两个文件。
修改core-site.xml文件
[root@gdy01 conf]#vim core-site.xml
在这个文件中
在
wq保存退出。
其中:hadoop.tmp.dir的值是指定hadoop的临时目录。
我们知道hadoop中的Map是会生成临时文件的,这里就是定义类似的临时存放文件的目录。
其中:fs.default.name是用来定义HDFS的默认名称节点路径。就是我们将来访问HDFS文件时,如果没有指定路径,就会联系这里定义的路径的主机,去联系这台主机去寻找其路径。
编辑:mapred-site.xml文件
[root@gdy01 conf]#vim mapred-site.xml
同样也能看到
添加如下信息在
wq保存退出
运行MapReduce需要为其指定一个主机作为JobTracker节点,在一个小规模的Hadoop集群中,它通常跟NameNode运行于同一物理主机。可以通过mapred.job.trakcer属性定义JobTracker监听的地址(或主机名)和端口(默认为8021),与前面的fs.default.name属性的值不同的是,这不是一个URI,而仅一个“主机-端口”组合。
在MapReduce作业运行过程中,中间数据(intermediate data)和工作文件保存于本地临时文件中。根据运行的MapReduce作业不同,这些数据文件可能会非常大,因此,应该通过mapred.local.dir属性为其指定一个有着足够空间的本地文件系统路径,其默认值为${hadoop.tmp.dir}/mapred/local。mapred.job.tracker可以接受多个以逗号分隔路径列表作为其值,并会以轮流的方式将数据分散存储在这些文件系统上,因此指定位于不同磁盘上的多个文件系统路径可以分散数据I/O。
另外,MapReduce使用分布式文件系统为各TaskTracker保存共享数据,这可以通过mapred.system.dir属性进行定义,其默认值为${hadoop.tmp.dir}/mapred/system。下面给出了一个较简单的mapred-site.xml文件示例。
编辑:hdfs-site.xml文件
[root@gdy01 conf]#vim hdfs-site.xml
在
wq保存退出。
HDFS进程有许多属性可以定义其工作路,如dfs.name.dir属性定义的HDFS元数据持久存储路径默认为${hadoop.tmp.dir}/dfs/name、dfs.data.dir属性定义的DataNode用于存储数据块的目录路径默认为${hadoop.tmp.dir}/dfs/data、fs.checkpoint.dir属性定义的SecondaryNameNode用于存储检查点文件的目录默认为${hadoop.tmp.dir}/dfs/namesecondary。
为了数据可用性及冗余的目的,HDFS会在多个节点上保存同一个数据块的多个副本,其默认为3个。而只有一个节点的伪分布式环境中其仅用保存一个副本即可,这可以通过dfs.replication属性进行定义。如下所示的内容即可作为最简单的hdfs-site.xml配置文件。
第七步:创建启动hadoop的用户,为其用户设置无密码访问本机。
创建hduser用户
[root@gdy01 /]#useradd hduser
将之前的/etc/gd/hadoop文件下的所有文件赋予hduser
[root@gdy01 /]#chown -R hduser.hduser /usr/gd/hadoop/
[root@gdy01 /]# ll/usr/gd/hadoop/
为hduser用户指定密码
[root@gdy01 /]#passwd hduser
在之前配置文件core-site.xml中定义了hadoop的换成文件存放目录。所以现在先创建那个目录,并赋予hduser权限。
[root@gdy01 /]#mkdir /hadoop/temp/ -pv
属于hduser权限
[root@gdy01 /]#chown -R hduser.hduser /hadoop
登录hduser并为hduser创建无密码访问本机
[root@gdy01 /]# su- hduser
[hduser@gdy01 ~]$ssh-keygen -t rsa -P ''
[hduser@gdy01 ~]$ssh-copy-id -i .ssh/id_rsa.pub hduser@localhost
在这个过程中,你需要输入一次yes和一次hduser用户的密码
检查是否可以无密码访问
输入:
[hduser@gdy01 ~]$ssh localhost 'date'
如果没有提示你要输入密码,就证明已经设置成功。
第八步:格式化HDFS文件系统并启动hadoop
输入命令:
[hduser@gdy01 ~]$hadoop namenode -format
此时HDFS文件系统已经格式化完成。
输入命令启动hadoop
[hduser@gdy01 ~]$start-all.sh
输入命令jps查看hadoop的进程。
[hduser@gdy01 ~]$jps
到这里看见这5个进程表示hadoop已经启动完成。即单机hadoop配置启动完成。
验证:使用Hadoop做一次单词统计
在hadoop文件系统中创建一个目录test
命令:
[hduser@gdy01 ~]$hadoop fs -mkdir test
查看hadoop上的这个目录
[hduser@gdy01 ~]$hadoop fs -ls
上传/etc/profile文件到hadoop的文件系统中
[hduser@gdy01 ~]$hadoop fs -put /etc/profile test/
使用hadoop开始做单词统计读取目录为test/ 结果输出目录为testlog
[hduser@gdy01 ~]$hadoop jar /usr/gd/hadoop/hadoop-examples-0.20.2-cdh3u4.jar wordcount testtestlog
现在任务已经执行完成。
查看hadoop统计完成后输出的文件
[hduser@gdy01 ~]$hadoop fs -ls testlog
查看统计结果
[hduser@gdy01 ~]$hadoop fs -cat testlog/part-r-00000
到这里已经知道了hadoop的单机模式部署。也成功的在hadoop上执行了一次单词统计。