hadoop的伪分布式模式配置与安装
上次对hadoop单机模式中已经介绍了hadoop的基本安装,本次将讲解hadoop的伪分布式模式进行对hadoop的基本模拟部署。
安装软件:
系统:Linux 2.6.32-358.el6.x86_64
JDK:jdk-7u7-linux-i586.tar.gz
Hadoop版本:hadoop-0.20.2-cdh3u4.tar.gz
硬件环境:
三台主机:分别为
gdy192 192.168.61.192
gdy194 192.168.61.194
gdy195 192.168.61.195
本次部署模型为:
gdy192上部署:NameNode和JobTracker
gdy194上部署:SecondaryNameNode
gdy195上部署:DateNode TaskTracker
首先配置三台主机的hosts文件,以便之后不用ip而直接用别名进行相互访问
首先在gdy192上配置一份信息。
[root@gdy192 /]#vim /etc/hosts
wq保存退出
将已经配置好的文件分别拷贝一份到其他两台主机上
拷贝文件到gdy194上
[root@gdy192 ~]#scp /etc/hosts root@gdy194:/etc/
输入gdy194的root密码
拷贝成功。
去gdy194上查看/etc/hosts验证是否是叫我们刚才修改的文件
[root@gdy194 /]#cat /etc/hosts
可以看到拷贝成功。
同样再次拷贝一份到gdy195
在gdy192上输入:
[root@gdy192 ~]#scp /etc/hosts root@gdy195:/etc/
这里就不验证了。
在gdy192上创建jDK和Hadoop的安装目录gd
[root@gdy192 /]#mkdir /usr/gd/ -pv
在gdy194上创建JDK和Hadoop的安装目录gd
在gdy195上创建JDK和Hadoop的安装目录gd
分别在gdy192,gdy194,gdy195上创建hduser用户并设置密码
在gdy192上
[root@gdy192 /]#useradd hduser
[root@gdy192 /]#passwd hduser
在gdy194上
[root@gdy194 /]#useradd hduser
[root@gdy194 /]#passwd hduser
在gdy195上
[root@gdy195 /]#useradd hduser
[root@gdy195 /]#passwd hduser
将之前准备好的软件包拷贝到gdy192上,
如下图是我已经拷贝好的文件
将这两个文件解压到之前创建的目录/usr/gd/下面
[root@gdy192ftpftp]# tar -xf jdk-7u7-linux-i586.tar.gz -C /usr/gd/
[root@gdy192ftpftp]# tar -xf hadoop-0.20.2-cdh3u4.tar.gz -C /usr/gd/
使用ls /usr/gd/可以查看解压后的文件
为jdk和hadoop创建软链接在/usr/gd目录下面
[root@gdy192ftpftp]# ln -s /usr/gd/jdk1.7.0_07/ /usr/gd/java
[root@gdy192ftpftp]# ln -s /usr/gd/hadoop-0.20.2-cdh3u4/ /usr/gd/hadoop
[root@gdy192ftpftp]# ll /usr/gd/
配置java和hadoop的环境变量
配置java的环境变量
[root@gdy192 /]#vim /etc/profile.d/java.sh
添加如下信息:
JAVA_HOME=/usr/gd/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOMEPATH
wq保存退出
配置hadoop的环境变量
[root@gdy192 /]#vim /etc/profile.d/hadoop.sh
添加如下信息:
HADOOP_HOME=/usr/gd/hadoop
PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_HOMEPATH
wq保存退出
使用scp分别将这两个文件拷贝到gdy194和gdy195机器上的/etc/profile.d/目录下面。
拷贝到gdy194上
[root@gdy192 /]#scp /etc/profile.d/java.sh root@gdy194:/etc/profile.d/
[root@gdy192 /]#scp /etc/profile.d/hadoop.sh root@gdy194:/etc/profile.d/
拷贝到gdy195上
[root@gdy192 /]#scp /etc/profile.d/java.sh root@gdy195:/etc/profile.d/
[root@gdy192 /]#scp /etc/profile.d/hadoop.sh root@gdy195:/etc/profile.d/
修改/usr/gd/目录下的所有文件的属主和属组为hduser
[root@gdy192 /]#chown -R hduser.hduser /usr/gd
在gdy192上切换到hduser用户下面
[root@gdy192 /]#su – hduser
使用ssh-keygen和ssh-copy-id为gdy192能无密码直接访问gdy194和gdy195下的hduser用户
命令:
先制作秘钥文件
[hduser@gdy192 ~]$ssh-keygen -t rsa -P ''
回车
使用ssh-copy-id拷贝生成的公秘到gdy194机器上的hduser下,使gdy192能无密码访问gdy194
[hduser@gdy192 ~]$ssh-copy-id -i .ssh/id_rsa.pub hduser@gdy194
输入yes
输入gdy194上的hduser的用户密码
使用ssh-copy-id拷贝生成的公秘到gdy195机器上的hduser下,使gdy192能无密码访问gdy195
[hduser@gdy192 ~]$ssh-copy-id -i .ssh/id_rsa.pub hduser@gdy195
使用ssh-copy-id拷贝生成的公秘到gdy192机器上的hduser下,使gdy192能无密码访问gdy192
注意:即使是hadoop中使用的是ip进行调度访问,即使是访问自己的机器,如果不配置无密码访问,访问时,一样需要输入密码。这里和之前配置hadoop单机模式时一样。需要配置无密码访问。
[hduser@gdy192 ~]$ssh-copy-id -i .ssh/id_rsa.pub hduser@gdy192
验证gdy192是否已经不用输密码自己访问gdy194
[hduser@gdy192 ~]$ssh gdy194 'date'
能不需要输入密码就显示gdy194上的日期,则证明配置成功。
验证gdy192是否已经不用输密码自己访问gdy195
[hduser@gdy192 ~]$ssh gdy195 'date'
验证gdy192是否已经不用输入访问自己gdy192
[hduser@gdy192 ~]$ssh gdy192 'date'
查看三台机器上的系统世界是否一样
[hduser@gdy192 ~]$ssh gdy194 'date';ssh gdy195 'date';ssh gdy192 'date'
同步三个节点上的时间:
注意:这里由于hadoop没有权限修改时间,需要配置root能无密码访问gdy194和gdy195,gdy192。然后在统一设定时间。或者你自己设计其他方法保证时间同步。不过,时间同步在正在部署的环境上是必须要有的。如果这步你不配置,对于本次的hadoop伪分布式模式也没有多大影响。不过建议还是配置下。
配置代码如下。
[hduser@gdy192 ~]$exit
先退出hduser用户
[root@gdy192 /]#cd ~
进入root用户的家目录
制作秘钥文件
[root@gdy192 ~]#ssh-keygen -t rsa -P ''
拷贝秘钥文件到gdy194,gdy195
[root@gdy192 ~]# ssh-copy-id -i.ssh/id_rsa.pub root@gdy194
[root@gdy192 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@gdy195
由于root自己访问自己,每次都需要确认一次yes,所以用root用户配置无密码访问自己没有用。再说这里的配置只是为了完成三台电脑的时间同步。
先检查三台电脑的时间:
[root@gdy192 ~]#ssh gdy194 'date';ssh gdy195 'date';date
将三台电脑的时间设为同一时间:
[root@gdy192 ~]#ssh gdy194 'date 0929235415';ssh gdy195 'date 0929235415';date 0929235415
再次查看时间
[root@gdy192 ~]#ssh gdy194 'date';ssh gdy195 'date';date
可以看到这里的时间就已经同步了。
用gdy192切换到hduser用户下
[root@gdy192 ~]#su - hduser
再来查看三台电脑的时间:
[hduser@gdy192 ~]$ssh gdy194 'date';ssh gdy195 'date';ssh gdy192 date
接下来就要开始配置hadoop的配置文件了
进程hadoop的文件目录里面
[hduser@gdy192hadoop]$ cd /usr/gd/hadoop/conf/
由于在hadoop单机模式配置里面已经对重要文件做个解释。这里不再重复解释,详情请见日志《hadoop的单机模式配置与安装》
编辑masters文件
[hduser@gdy192conf]$ vim masters
将原来的localhost修改为gdy194
wq保存退出
注意:在上面就已经说明gdy194是用来做SecondaryNameNode的名称节点的。
而masters就是配置第二名称节点的。
编辑slaves文件
[hduser@gdy192conf]$ vim slaves
将原来的localhost修改为gdy195
wq保存退出
同样这里定义的是数据节点。
编辑文件core-site.xml
[hduser@gdy192conf]$ vim core-site.xml
在<configuration></configuration>直接添加如下信息
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/temp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://gdy192:8020</value>
</property>
wq保存退出
注意:这里的fs.default.name定义的是主节点。由于每个节点上配置文件都一样,所以这里要使用ip或者别名来定义主节点的位置。
由于这里定义了一个hadoop的缓存文件目录,所以我们需要在三台电脑上分别创建这个缓存文件目录。
切换到root用户。
[hduser@gdy192conf]$ su – root
创建/hadoop目录
[root@gdy192 ~]#mkdir /hadoop/
修改hadoop目录的属主和属主为hduser,让hduser能在这个目录下有写权限。
[root@gdy192 ~]#chown -R hduser.hduser /hadoop
同样在gdy194和gdy195上创建一个这样的目录,并赋予hadoop权限。
在gdy194上
[root@gdy194 /]#mkdir /hadoop
[root@gdy194 /]#chown -R hduser.hduser /hadoop
在gdy195上
[root@gdy195 /]#mkdir hadoop
[root@gdy195 /]#chown -R hduser.hduser /hadoop
使用gdy192
退出当前用户,返回之前的hduser用户
[root@gdy192 ~]#exit
注意:这里由于刚刚是直接登录,所以现在能退出返回到之前的hduser用户和hduser操作的目录下面。
编辑文件 mapred-site.xml
[root@gdy192conf]# vim mapred-site.xml
在<configuration>和</configuration>之间添加如下信息。
<property>
<name>mapred.job.tracker</name>
<value>gdy192:8021</value>
</property>
wq保存退出
同样,由于这里定义的是JobTracker,而我们上部署就已经说明gdy192上存放jobTracker
所以这里在单机模式下的localhost就要改成ip或者是ip别名。
编辑文件:hdfs-site.xml
[root@gdy192conf]# vim hdfs-site.xml
在<configuration>和</configuration>之间添加如下信息。
<property>
<name>dfs.replication</name>
<value>1</value>
<description>The actualnumber of replications can be specified when the file iscreated.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/hadoop/data</value>
<final>ture</final>
<description>Thedirectories where the datanode stores blocks.</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/hadoop/name</value>
<final>ture</final>
<description>Thedirectories where the namenode stores its persistentmatadata.</description>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/hadoop/namesecondary</value>
<final>ture</final>
<description>Thedirectories where the secondarynamenode stores checkpoints.</description>
</property>
wq保存退出
注意:这里是跟想象的定义了hadoop中其他目录的位置,如果这里不定义,将会默认使用core-site.xml文件里面定义的默认缓存目录。
到这里hadoop的配置文件就已经配置完成了。
接下来分别在gdy194上和gdy195上解压jdk-7u7-linux-i586.tar.gz和hadoop-0.20.2-cdh3u4.tar.gz软件包到/etc/gd/文件夹下面。并分别创建连接文件。(向上面之前操作一样)
这由于重复操作。不再做解释。
接下来拷贝刚刚在gdy192上已经配置好的文件到gdy194和gdy195的对应位置。
方法如下:
在gdy192上使用root用户
拷贝文件到gdy194和gdy195上
[hduser@gdy192hadoop]$ scp /usr/gd/hadoop/conf/* gdy194:/usr/gd/hadoop/conf/
[hduser@gdy192 hadoop]$ scp /usr/gd/hadoop/conf/*gdy195:/usr/gd/hadoop/conf/
在gdy194和gdy195上分别使用root用户给予/usr/gd/hadoop文件夹赋予hduser用户权限。
在gdy194上
[root@gdy194 /]#chown hduser.hduser /usr/gd/ -R
[root@gdy194 /]#ll /usr/gd/
在gdy195上
[root@gdy195 /]#chown hduser.hduser /usr/gd/ -R
[root@gdy195 /]#ll /usr/gd/
到这里hadoop的伪分布式模式已经全部配置完成。
启动hadoop伪分布式模式
使用gdy192主机。重新登录root用户
切换到hduser用户
格式化hadoop的文件系统HDFS
[hduser@gdy192 ~]$hadoop namenode -format
启动hadoop
[hduser@gdy192 ~]$start-all.sh
这里已经看到gdy192上成功启动了NameNode和JobTracker两个节点
查看gdy194上是否已经成功启动SecondaryNameNode
[hduser@gdy192 ~]$ssh gdy194 'jps'
看到已经成功启动
查看gdy195上是否已经成功启动DataNode和TaskTracker
[hduser@gdy192 ~]$ssh gdy195 'jps'
到这里已经看到都成功启动
使用
[hduser@gdy192 ~]$netstat –nlpt
可以查看hadoop的端口
其中50030端口为hadoop的对外web网址端口。可以查看hadoop的MapReduce作业的相关信息
50070为hadoop的Namenode节点信息。
查看hadoop的MapReduce作业信息
可以在浏览器上访问:http://192.168.61.192:50030/jobtracker.jsp
如下图:
查看hadoop的NameNode节点信息
可以在浏览器上访问:http://192.168.61.192:50070/dfshealth.jsp
如下图:
由于SecondaryNameNode部署在gdy194上。
查看gdy194上的Hadoop的进程端口信息。
[hduser@gdy192 ~]$ssh gdy194 'netstat -nlpt'
其中50090端口为hadoop的SecondaryNameNode的web对外端口
可以使用:http://192.168.61.194:50090/status.jsp
来访问SecondaryNameNode的对外web端口。
同样,由于DataNode和TaskTracker部署在gdy195上。
在gdy192上查看gdy195上的端口信息
[hduser@gdy192 ~]$ssh gdy195 'netstat -nlpt'
50060为hadoop的TaskTracker的节点信息
50075为hadoop的DateNoe的节点信息
分别通过以下地址可访问:
http://192.168.61.195:50075/
http://192.168.61.195:50060/tasktracker.jsp
注意:在实际部署中以上web的访问端口前的ip地址为你实际部署的ip地址,这里我是按照我自己部署的ip地址列举出来的。
在hadoop上做一次hadoop的单词统计
使用机器gdy192
在hadoop的DNSF文件系统上新建一个text文件夹
查看已经建立好的文件夹
[hduser@gdy192 ~]$hadoop fs -ls /
上传一个系统文件到test文件夹下
[hduser@gdy192 ~]$hadoop fs -put /etc/hosts /test
查看已经上传的文件
[hduser@gdy192 ~]$hadoop fs -ls /test
对hadoop目录中的test所有文件做单词统计,统计结果输出在word文件夹下
[hduser@gdy192 ~]$hadoop jar /usr/gd/hadoop/hadoop-examples-0.20.2-cdh3u4.jar wordcount /test /word
在这个过程中可以通过
http://192.168.61.192:50030/jobtracker.jsp来查看作业进行的情况。
下图就是刚刚执行的作业完成后的显示
查看单词统计结果输出目录
[hduser@gdy192 ~]$hadoop fs -ls /word
查看结果输出文件part-r-00000可以看到刚才对test目录下的文件做单词统计的统计结果
[hduser@gdy192 ~]$hadoop fs -cat /word/part-r-00000
这就是刚才统计的的统计结果。
到本文档位置hadoop的单机模式和hadoop的伪分布模式安装和部署就已经完成了。
其实hadoop的单独安装后一般都会再安装hbase来原理hadoop。这样好方便存储数据,和管理。对于在hadoop的单机模式上怎么部署hbase和在hadoop的伪分布式模式下如何部署hbase。将在之后陆续公布。