通过win7eclipse连接虚拟机redhat上hadoop的实现(上)


目标: 利用本机(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是如下这样的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> </configuration>
现在要改成如下
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadooptmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.default.name</name>
<value>hdfs://192.168.133.128:9000</value> <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description> </property> </configuration>
修改hdfs-site.xml
默认的hdfs-site.xml是如下这样的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> </configuration>
要改成如下这样的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. </description> </property> </configuration>
修改mapred-site.xml
默认的mapred-site.xml是如下这样的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. -->
<configuration>
</configuration>
要改成如下这样的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property>
<name>mapred.job.tracker</name> <value>192.168.133.128:9001</value> <description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task. </description> </property> </configuration>

修改完这三个文件了,就一些注意的要点说一下
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个。

相关内容