CentOS 5.x单机安装Hadoop
花了近两天时间,终于把Hadoop的安装,实例运行实践了一遍。虽然还有很多东西都不大懂,但总算有了个好的开端,也算是对自己的一点安慰吧。
一、JDK安装
我的系统的CentOS 5.X的linux distribution, 要安装Hadoop,首先要配置好JAVA环境,这个相对简单,从http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载JDK,我下载的是jdk-8u20-linux-x64.rpm的版本,这个是rmp的版本,可以用非常简单的语句安装:
rpm –ivh jdk-8u20-linux-amd64.rpm
并在/etc/profile里面添加环境变量(全局部量)声明如下:
export JAVA_HOME=/usr/java/default
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
写好后保存退出,可以重启linux或者运行命令 source /etc/profile 使得配置生效。
Linux是采用文件系统来建立操作系统,因此其一切访问离不开各种变量,环境变量是针对整个系统而言的,模块之间的相互调用,函数或shell命令的执行,需要环境变量来执行各种路径的搜
索,从而快速找到所需命令。
顺便还补充一点,我装JDK的时候,原先电脑上装的是jdk1.6,后来安装了1.8版本后,通过linux命令 java -version检测,发现没有改过来。不要担心,这是因为相应的命令文件还是指向的老版本。那咋办呢?
二、Hadoop安装
下面开始折腾hadoop的安装。说是折腾,其实一点也不过份,大量时间都是在琢磨hadoop的配置问题。在网络上看了无数的安装,每位大虾好像都成功了,但移植到我的机器系统上来,
却因系统、软件版本、安装目录等各种原因,让人不知所措。因此,我只能以我的安装过程,来为朋友们提供一种参考。
我下载的是 hadoop-1.2.1-bin.tar.gz,这个版本可以从官网境像获得。这个文件是个二进制的,所要只要解压放到你想放的目录即可。接下来就是环境配置了。以我的为例,我的文件解压后
变成了hadoop-1.2.1文件夹,然后放在/usr/local/hadoop/下面,即是 /usr/local/hadoop/hadoop-1.2.1
的目录。进入到hadoop-1.2.1/conf文件夹下面,打开hadoop-env.sh,在最后面一行补上
export JAVA_HOME=/usr/java/defualt
注意,我这里是default,如果没有default,要换成具体的路径,总之就是指向java。然后是对三个文件进行修改。
对以下几个文件进行设置
core-site.xml
<<configuration>>
<<property>>
<<name>>fs.default.name<</name>>
<<value>>hdfs://localhost/<</value>>
<</property>>
<</configuration>>
hdfs-site.xml
<<configuration>>
<<property>>
<<name>>dfs.replication<</name>>
<<value>>1<</value>>
<</property>>
<</configuration>>
mapred-site.xml:
<<configuration>>
<<property>>
<<name>>mapred.job.tracker<</name>>
<<value>>localhost:8021<</value>>
<</property>>
<</configuration>>
注意,所有的双括号“《》”最后都要在改成“<>”,新浪博客现在显示不出html语言。
另外,还要设置hadoop的环境变量,不然hadoop1.2.1/bin/下面的函数怎么调用呢?所以又要打开/etc/profile文件,在后面再添加如下语句:
export HADOOP_INSTALL=/usr/local/hadoop/hadoop-1.2.1
export PATH=$PATH:$HADOOP_INSTALL/bin
这样,hadoop-1.2.1/bin下面的所有函数就可以直接使用了。
三、配置SSH
接下来是SSH设置的问题。SSH是Secure Shell Protocol的简写,它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。为了确保用户通够SSH到本地主机,并不输入密码即可登录,可用以下方式建立无密码登录模式:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
用以下指令进行测试:
ssh localhost
如果成功,则无需键入密码。
四、实例测试
Hadoop以命令空间的方式对文件进行管理,形式上看上去就是在操作一个文件一样。由于我测试的伪分布式是模式,即以开启五个进程来模拟,所以无法体会到集群的特点。不过还是可
以说是一下的。下面就来玩一下单词统计这样一个小例子吧。
第1步:格式化HDFS,即格式化文件系统,有点像格式化磁盘的意味,总之就是新的工作开始啰!输入以下命令:
hadoop namenode -format
第2步:启动守护进程
start-all.sh
[说明]start-all.sh是hadoop1.2.1/bin下的文件,其实,它是两个文件的组合形式,其真面目是
start-dfs.sh
start-mapred.sh
所以你不嫌麻烦写两次也行。当所有工作执行完毕要退出时,执行stop-all.sh,当然也可以执行
stop-dfs.sh
stop-mapred.sh
第3步:测试文件准备
要玩单词统计,当然要单词文本文件啦。由于我在root用户模式下,所以我选择了在 /root/input文件夹下建立了两个文本,命名为file1和file2,里面随便写入一些单词。
第4步:文件导入HDFS系统
导入HDFS系统?听起来好高端,其实在HDFS下,将/root/input的所有文件,导入一个在HDFS系统下的一个虚拟文件夹中,这个文件夹只能在前台显示出来,好像不能看到具体的文件夹
(至少我在我的电脑上没看到,如果有你一定要告诉我)。我们可以将这个文件夹命名为in,当然你可根据你的喜好给个名字。即执行以下命令:
hadoop dfs -put /root/input in
此命令就将file1和file2写入了in文件夹中,你可以用以下命令来测试:
hadoop dfs -ls ./in/
看看输出了什么东东。
第5步:启动单词统计程序
执行命令
hadoop jar /usr/local/hadoop/hadoop-1.2.1/hadoop-examples-1.2.1.jar wordcount in out
其中,wordcount是命令,out是个与in同处于HDFS下的一个文件夹,用于存储上述命令的输也结果。
这时如果你再输入以下命令:
hadoop dfs -ls ./out
就可以看到out中有个文件,名为part-r-00000
第6步:显示结果
显示结果命令如下:
hadoop dfs -cat ./out/part-r-00000
就会见到相应的单词统计结果啦!
小结:
Hadoop的命令行模式,文件目录模式,环境变量的设置好像都继承了linux的风格,所以只要略微懂点linux,hadoop的一些语言就容易理解了。最后,给大家列举几本参考书,希望大家能快速入门,共同进步!
[2] 鸟哥 著,《鸟哥的Linux私房菜—服务器架设篇(第三版)》,机械工业出版社,2013.
[4] http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html