目标: 利用本机(Win7)上的eclipse对虚拟机(redhat)上的Hadoop进行操作,实现学习和实验的目的
大体工作流程之Hadoop安装部分:
1、实现linux的ssh无密码验证配置.
2、在linux下安装jdk,并配好环境变量
3、修改linux的机器名,并配置 /etc/hosts
4、在windows下下载hadoop 0.20.0,并修改hadoop-env.sh,core-site.xml,hdfs-site.xml, mapred-site.xml,masters,slaves文件的配置
5、把修改好的hadoop整个文件夹传到linux下
6、把hadoop的bin加入到环境变量
7、格式化hadoop,启动hadoop
8、验证是否启动,并执行wordcount
具体过程:
在linux命令行里输入:ssh-keygen -t rsa,然后一路回车。
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhangtao/.ssh/id_rsa): //密钥保存位置,直接回车保持默认; Created directory '/home/zhangtao/.ssh'.
Enter passphrase (empty for no passphrase): //设置密钥的密码,空密码直接回车即可; Enter same passphrase again: //确认上一步设置的密码。
然后进入 /root/.ssh/下面,会看到两个文件 id_rsa.pub,id_rsa,
然后执行 cp id_rsa.pub authorized_keys
然后 ssh localhost 验证是否成功,第一次要你输入yes,以后就不需要了。
二 安装JDK 并配置环境变量
之前的博文中已经由此内容,此处略过
三、修改linux机器名
先说说怎么查看linux下的机器名
在命令行里输入hostname回车,展现的即当前linux系统的机器名如下 [root@hadoopName ~]# hostname hadoopName
[root@hadoopName ~]#
读者也看到了,命令行的前缀 [root@hadoopName ~], @符号后面的就是机器名,前面的是当前用户名 下面说说怎么修改redhat linux下的机器名,下面的方法只适合修改redhat的,别的版本改机器名不是这样的
1、执行 cd /etc/sysconfig,进入/etc/sysconfig 目录下
2、执行 vi network,修改network文件, NETWORKING=yes HOSTNAME=hadoopName
把HOSTNAME改成你想要的机器名,我改成了hadoopName,然后保存
3、执行 cd /etc,进入/etc 目录下
4、执行vi hosts,修改hosts文件
# Do not remove the following line, or various programs # that require network functionality will fail.
192.168.125.131 hadoopName hadoopName
127.0.0.1 localhost.localdomain localhost
默认是只有黑色字体内容,然后加上红色字体内容,第一个是自身ip,第二个network里的hostname名字,第三个一样。网上很多资料说hadoop安装要在 hosts里面加入 所有的集群机器的 ip hostname 对,嗯,没错,因为笔者这是单机,所以就只加自己就行了。
5、修改完后,执行hostname 就能看到自己新改的机器名了 (实际上可能需要reboot)
四、在windows下下载hadoop 0.20.0,并修改hadoop-env.sh,core-site.xml,hdfs-site.xml,
mapred-site.xml,masters,slaves文件的配置
下面要做最重要的操作,下载hadoop,并修改配置文件
下载hadoop 0.20.0 版本 ,下载后的文件是hadoop-0.20.2.tar.gz,然后解压出来
解压出来后的文件结构是这样的,进入conf目录里面, 修改hadoop-env.sh文件,加入如下一行
export JAVA_HOME=/usr/java/jdk1.6.0_03
其实hadoop-env.sh里面有这一行,默认是被注释的,你只需要把注释去掉,并且把JAVA_HOME 改成你的java安装目录即可。
需要说一下,在0.20.2版本之前,conf里面有一个 hadoop-site.xml文件,在0.20.0版本里面 conf下没有这个hadoop-site.xml文件,取而代之的是三个文件,core-site.xml,hdfs-site.xml,mapred.xml。下面要修改这三个文件 修改core-site.xml
默认的core-site.xml是如下这样的
href="configuration.xsl"?>
现在要改成如下
href="configuration.xsl"?>
修改hdfs-site.xml
默认的hdfs-site.xml是如下这样的
href="configuration.xsl"?>
要改成如下这样的
href="configuration.xsl"?>
修改mapred-site.xml
默认的mapred-site.xml是如下这样的
href="configuration.xsl"?>
要改成如下这样的
href="configuration.xsl"?>
修改完这三个文件了,就一些注意的要点说一下
1、其实core-site.xml 对应有一个core-default.xml, hdfs-site.xml对应有一个hdfs-default.xml,
mapred-site.xml对应有一个mapred-default.xml。这三个defalult文件里面都有一些默认配置,现在我们修改这三个site文件,目的就覆盖default里面的一些配置,
2、hadoop分布式文件系统的两个重要的目录结构,一个是namenode上名字空间的存放地方,一个是datanode数据块的存放地方,还有一些其他的文件存放地方,这些存放地方都是基于hadoop.tmp.dir目录的,比如namenode的名字空间存放地方就是 ${hadoop.tmp.dir}/dfs/name, datanode数据块的存放地方就是 ${hadoop.tmp.dir}/dfs/data,
所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根目录。我设置的是 /usr/local/hadoop/hadooptmp,当然这个目录必须是存在的。
3、fs.default.name,这个是设置namenode位于哪个机器上,端口号是什么hdfs://192.168.125.131:9000,格式一定要这样写,网上很多资料说ip地址写localhost也行,笔者建议最好写ip,因为后期讲到windows下 eclipse连接hadoop 的时候,如果写localhost,就会连接不到。
4、mapred.job.tracker,这个是设置jobtracker位于哪个机器上,端口号是什么,192.168.125.131:9001,格式和上一个不一样,这个也必须这样写,同样localhost和ip的分别和上述一样
5、dfs.replication,这个是设置数据块的复制次数,默认是3,因为笔者这里就一台机器,所以只能存在一份,就改成了1然后修改 masters和slaves文件
master文件里就把集群中的namenode所在的机器ip,这里就写 192.168.125.131, 不要写localhost,写了localhost,windows 下eclipse 连接不到hadoop
slaves文件里就把集群中所有的nodedata所在的机器ip,这里就写192.168.125.131,因为这里是单机,同样最好别写localhost
linux
所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根目录。我设置的是 /usr/local/hadoop/hadooptmp,当然这个目录必须是存在的。
3、fs.default.name,这个是设置namenode位于哪个机器上,端口号是什么hdfs://192.168.133.128:9000,格式一定要这样写,网上很多资料说ip地址写localhost也行,笔者建议最好写ip,因为后期讲到windows下 eclipse连接hadoop 的时候,如果写localhost,就会连接不到。
4、mapred.job.tracker,这个是设置jobtracker位于哪个机器上,端口号是什么,192.168.133.128:9001,格式和上一个不一样,这个也必须这样写,同样localhost和ip的分别和上述一样
5、dfs.replication,这个是设置数据块的复制次数,默认是3,因为笔者这里就一台机器,所以只能存在一份,就改成了1然后修改 masters和slaves文件
master文件里就把集群中的namenode所在的机器ip,这里就写 192.168.133.128, 不要写localhost,写了localhost,windows 下eclipse 连接不到hadoop
slaves文件里就把集群中所有的nodedata所在的机器ip,这里就写192.168.133.128,因为这里是单机,同样最好别写localhost
五、把修改好的hadoop整个文件夹传到linux下
上述文件修改好之后,把haoop整个目录copy草linux下,记得建个目录放这个,我建的目录是 /usr/local/hadoop,把hadoop的整个目录copy到这个下面,然后就是这样的形式 [root@hadoopName hadoop]# cd /usr/local/hadoop [root@hadoopName hadoop]# ls hadoop-0.20.2 hadooptmp
/usr/local/hadoop 下有两个文件,一个就是hadoop的根目录hadoop-0.20.2,另一个,就是上述的hadoop.tmp.dir的目录
六、把hadoop的bin加入到环境变量
把hadoop的执行命令加到环境变量里,这样就能直接在命令行里执行hadoop的命令了
操作跟把java的bin加入环境变量一样
1、执行 cd /etc, 进入/etc 目录下。
2、执行 vi profile, 修改profile文件 在里面加入以下
export PATH=/usr/local/hadoop/hadoop-0.20.2/bin:$PATH
3、执行 chmod +x profile ,把profile变成可执行文件
4、执行 source profile,把profile里的内容执行生效
7、格式化hadoop,启动hadoop
格式化hadoop
在命令行里执行,hadoop namenode -format,
启动hadoop
在命令行里执行,start-all.sh,或者执行start-dfs.sh,再执行start-mapred.sh。
如果出现权限问题 chmod 777 文件名 赋予权限
在命令行里输入 jps,如果出现一下内容,则说明启动成功。
不成功的话(command not found), 将java bin 加入到环境变量PATH中
[root@hadoopName ~]# jps
4505 NameNode
4692 SecondaryNameNode
4756 JobTracker
4905 Jps
4854 TaskTracker
4592 DataNode
启动之后,在/usr/local/hadoop/hadooptmp 下的dfs文件夹里会生成 data目录,这里面存放的是datanode上的数据块数据,因为笔者用的是单机,所以name 和 data 都在一个机器上,如果是集群的话,namenode所在的机器上只会有name文件夹,而datanode上只会有data文件夹。
执行 hadoop fs -ls命令,查看当前hdfs分布式文件系统的 文件目录结构,刚执行会说no such dictionary,
你要先建一个文件夹,用命令 haoop fs -mkdir testdir ,然后再执行hadoop fs -ls,就会展示/user/root/testdir 当前用户是root,所以hdfs的根目录就是 /user/root。其实也可以在虚拟机上装n个。