linux下安装hadoop详细教程

1、下载hadoop和hbase安装包(hbase是我研究的需要)我下载最新的hadoop-0.20.2.tar.gz和hbase-0.20.6.tar.gz,注意,他们的大版本最好要保持一致(譬如都是20版),否则在运行中可能会发生一些错误。安装包可以在win7中下载,因为已经安装好了vmwaretools可以直接将文件拖入red9中(关键是我还不熟悉linux的使用)。

2、创建专门的hadoop用户(如hadoopor)并设置密码

在root下执行:

[root@pwrh root]# useradd hadoopor

[root@pwrh root]# passwd hadoopor

3、解压安装包到用户目录

用hadoopor用户登录,hadoop-0.20.2.tar.gz和hbase-0.20.6.tar.gz已经放入/usr/hadoop/目录下,usr目录适合存放软件数据。

cp *.gz ~   将连个压缩包放入 /home/hadoopor中(复制后文件权限就是hadoopor。)

tar zxfhadoop-0.20.2.tar.gz 解压包(加上v参数,可以显示解压过程,但是会变慢,因为IO)

rm -rf *.gz 删除压缩包(如果你有备份)

因为在hadoopor用户下操作,已经不需要修改文件属主和权限

4、修改hadoop环境脚本

修改文件/home/hadoopor/hadoop-0.20.2/conf/hadoop-env.sh,在其中加入JAVA_HOME变量。可以用vi或者emacs,对于不太熟悉vi命令的就用emacs也算是图形界面。

exportJAVA_HOME=/usr/java/jdk1.6.0_21假设java已经安装在/usr/java/jdk1.6.0_21目录

5、修改hadoop启动配置

hadoop 20版本前需要配置两个文件:hadoop-default.xml和 hadoop-site.xml。到了20版本后,这两个文件没有了,改为三个文件:core-site.xml,hdfs-site.xml,mapred-site.xml 。内在的原因是因为hadoop代码量越来越宠大,拆解成三个大的分支进行独立开发,配置文件也独立了。

这三个文件在/home/hadoopor/hadoop-0.20.2/conf 目录下,初始时,这三个文件除了注释内容外没有任何设置。

1)修改core-site.xml文件: 设置hadoop需要的一些属性。从/home/hadoopor/hadoop-0.20.2/src/core目录下复制core-default.xml到conf目录下,并改名为core-site.xml。进入conf目录执行一下命令:

cp ~/hadoop-0.20.2/src/core/core-default.xml./ (./ 代表当前目录)

rm -f core-site.xml   删除空文件

mv core-default.xml core-site.xml   将复制来的文件改名

然后修改文件中的以下内容:

1.1)hadoop.tmp.dir

设置临时文件目录参数hadoop.tmp.dir,默认情况下master会将元数据等存在这个目录下,而slave会将所有上传的文件放在这个目录下,我选择的数据目录为:/data0/hadoopor/hadoop_tmp

hadoop.tmp.dir
/data0/hadoopor/hadoop_tmp
A base for other temporary directories.

注意事项:由于上传到Hadoop的所有文件都会被存放在hadoop.tmp.dir所指定的目录,所以要确保这个目录是足够大的。

1.2)fs.default.name

master需要用这个参数,提供基于http协议的状态上报界面,而slave通过这个地址连接master,设置如下:

fs.default.name
hdfs://pwrh:8989
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.

备注:fs.default.name指定NameNode的IP地址(主机名)和端口号,缺省值是file:///,,表示使用本地文件系统,,用于单机非分布式模式。注意,在使用时,我已开始是用缺省值file:///,但是在解析ip地址时出错,改为指明地址就OK了。

其他:dfs.replication指定HDFS中每Block被复制的次数,起数据冗余备份的作用。在典型的生产系统中,这个数常常设置为3

2)修改 mapred-site.xml 文件:配置 MapReduce 的一些设置,从/home/hadoopor/hadoop-0.20.2/src/mapred目录下复制mapred-default.xml到conf目录下,并改名为mapred-site.xml。执行命令同core-site.xml操作完全相似。

修改如下属性配置:

mapred.job.tracker
hdfs://pwrh:8990
The host and port that the MapReduce jobtracker runs
at. If"local", then jobs are run in-process as a single map
and reduce task.

注:缺省值local ,表示使用本地文件系统,,用于单机非分布式模式,但是jobtracker和TaskTracker进程无法启动。所以还是设置完整。

3)修改 hdfs-site.xml 文件:配置 hdfs的一些设置,从/home/hadoopor/hadoop-0.20.2/src/hdfs目录下复制hdfs-default.xml到conf目录下,并改名为hdfs-site.xml。不需要修改此文件。

4)修改 masters 和 slaves 文件:配置,文件中写入作为master机器和slaves机器的IP地址,如果是单机,都写localhost即可。

6、hadoop初始化及启动、停止

1)配置hadoop可执行脚本的运行路径。这个写在用户的.bash_profile 文件中比较合适。因为这是针对每个用户的设置,那么这个文件也是针对不同用户各有一个。对于那些所有用户都需要的环境变量放在 /etc/profile中比较合适。 该文件在用户登录时自动生效,如果不重新登录,使用source.bash_profile也能使配置在当前shell中生效(注意仅在当前shell中,所以,最好注销重登录一次)。配置内容:

HADOOP_HOME=~/hadoop-0.20.2PATH=$PATH:$HOME/bin:$HADOOP_HOME/bin

2)格式化 :在启动Hadoop集群之前,需要先格式化,在master节点上执行下面,以hadoop用户登陆系统然后执行 hadoop namenode-format    成功后可以去之前指定的tmp路径下(/data0/hadoopor/hadoop_tmp)确认是否生成了dfs目录及其子目录。

3)启动hadoop:执行命令 start-all.sh   成功执行完成后,用java的jps命令确认是否以下进程被创建:

NameNode

JobTracker

SecondaryNameNode

/*以上是master上namenode应该起的进程*/

DataNode

TaskTracker

/*以上是slave上datanode应该起的进程*/

如果出现问题,可以去~/hadoop-0.20.2/logs/目录下查看具体log,确认为何某个进程无法启动。有时很可能就因为某个配置文件小的笔误。

注:我初次设置时,虽然所有进程都能启动,但是在启动停止时,总提示警告:localhost:socket: Address family not supported by protocol   既然localhost不能解析,那么写了localhost的文件就只有slaves和masters这两个配置文件。所以,修改两个文件内容为:127.0.0.1(本机回环地址),重新启动,则不再出现问题。

4)停止hadoop:执行命令 stop-all.sh   成功执行完成后,用jps确认是否启动时创建的进程都被kill掉。

5)确认状态:执行命令 hadoop dfsadmin-report 注意有没有“Datanodes available: 1 (1 total,0 dead)”出现,如果没有数据节点被连接,请登录数据节点,查看hadoop的日志文件,查找其失败的原因。

6)运行wordcount例程:

hadoopfs -put ~/hadoop-0.20.2/conf/core-site.xml test (给hdfs上传一个文本文件)

hadoop fs -cat test (查看hdfs上的这个文件)

hadoopjar ~/hadoop-0.20.2/hadoop-0.20.2-examples.jar wordcount /user/hadoopor/testoutput

输出内容(部分):

10/08/24 20:47:05 INFO input.FileInputFormat: Total input pathsto process : 1
10/08/24 20:47:06 INFO mapred.JobClient: Running job: job_201008242008_0001
10/08/24 20:47:07 INFO mapred.JobClient: map 0% reduce 0%
10/08/24 20:47:14 INFO mapred.JobClient: map 100% reduce 0%
10/08/24 20:47:29 INFO mapred.JobClient: map 100% reduce 100%
10/08/24 20:47:31 INFO mapred.JobClient: Job complete: job_201008242008_0001
10/08/24 20:47:31 INFO mapred.JobClient: Counters: 17

好了,可以体验hadoop之旅了。。。