Hadoop环境筹建——伪分布式环境搭建
本文大部分借鉴了http://vampire1126.iteye.com/blog/891693中的安装过程,在此向原作者表示感谢,同时本文的原创性是更改了Hadoop文件配置部分,以及对按装过程中遇到的问题做了说明
工具:
jdk-6u38-linux-i586.bin
hadoop-1.1.2.tar.gz
ubuntu-12.04.1-desktop-i386.iso
安装
1、安装ubuntu10.10
参见博文:http://blog.****.net/chw1989/article/details/8708447
2、安装jdk1.6.0_38
在usr下面新建一个文件夹Java,然后将jdk复制过来
sudo mkdir /usr/Java
sudo cp jdk的路径 /usr/Java
进入到Java目录下,改变文件权限为可执行
cd /usr/Java
sudo chmod u+x jdk-6u38-linux-i586.bin
执行安装
sudo ./ jdk-6u38-linux-i586.bin
3、安装hadoop0.21.0
将hadoop-1.1.2.tar.gz复制到usr下面的local文件夹内
sudo cp hadoop的路径 /usr/local
进入到local目录下,解压hadoop-1.1.2.tar.gz
cd /usr/local
sudo tar -xzf hadoop-1.1.2.tar.gz
为了方便管理,将解压后的文件夹名改为hadoop
sudo mv hadoop-1.1.2.tar.gz
4、创建一个名为hadoop的用户和用户组
创建一个名为hadoop的用户组
sudo addgroup hadoop
创建一个名为hadoop的用户,归到hadoop用户组下
sudo adduser --ingroup hadoop hadoop
用gedit打开etc下的sudoers文件
sudo gedit /etc/sudoers
在 root ALL=(ALL) ALL 下面添加如下一行,然后保存关闭gedit
hadoop ALL=(ALL) ALL
5、配置相关文件
用gedit打开etc下的profile文件
sudo gedit /etc/profile
在文件最后加入如下几行
export CLASSPATH=.:/usr/Java/jdk1.6.0_38/lib:/usr/Java/jdk1.6.0_38/jre/lib:$CLASSPATH
export PATH=.:/usr/Java/jdk1.6.0_38/bin:/usr/Java/jdk1.6.0_38/jre/bin:/usr/local/hadoop/bin:$PATH
保存后关闭gedit,并重启机器
sudo reboot
重启后用hadoop用户登录,验证配置是否成功
java -version
PS:我刚开始装jdk时,一切都妥妥的装好以后,发现这个命令一直无法运行成功,经过多方查证,发现时jdk版本有问题,前面装的jdk是从Unix社区下载的jdk-6u3-dlj-linux-i586.bin,安装好后,会有许多没有后缀名为.pack的文件,这些文件需要解压成后缀名为.jar的文件,才可以确保jdk的正常使用,可以用/usr/java/jdk1.6.0_38/bin下的Unpack200来做,命令类似与:
sudo ./unpack200 tools.pack tools.jar
如果选用jdk-6u38-linux-i586.bin这个jdk则不会出现上述问题
6、创建ssh-key
装载ssh服务
sudo apt-get install ssh
创建ssh-key
ssh-keygen -t rsa --P
将此ssh-key添加到信任列表中,并启用此ssh-key
cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
sudo /etc/init.d/ssh reload
7、配置hadoop
配置chadoop-env.sh
cd /usr/local/hadoop
sudo gedit conf/hadoop-env.sh
打开后在文档的上部某行有“#export JAVA_HOME=...”字样的地方,去掉“#”,然后在等号后面填写你的jdk路径,完全按此文档来的话应改为 "export JAVA_HOME=/usr/Java/jdk1.6.0_38"
配置core-site.xml
sudo gedit conf/core-site.xml
(打开后标签<configuration> </configuration>中是空的,所以在空的地方加入如下配置)
<property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property>
配置conf目录下的hdfs-site.xml
sudo gedit conf/hdfs-site.xml
(打开后标签<configuration> </configuration>中也是空的,添加如下配置)
<property> <name>dfs.replication</name> <value>1</value> </property>
配置conf目录下的mapred-site.xml
sudo gedit conf/mapred-site.xml
(打开后标签<configuration> </configuration>中也是空的,添加如下配置)
<property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property>
8、运行测试阶段:
格式化namenode
cd /usr/local/hadoop
hadoop namenode -format
启动hadoop
sudo chown -hR hadoop /usr/local/hadoop
bin/start-all.sh
验证hadoop是否正常启动
jps
此语句执行后会列出已启动的东西NameNode,JobTracker,SecondaryNameNode...如果NameNode没有成功启动的话就要先执行"bin/stop-all.sh"停掉所有东西,然后重新格式化namenode,再启动
PS:如果调用jp命令后s发现NameNode,JobTracker,SecondaryNameNode等进程都在,但是过几秒中,几个进程全部退出不见了,可以去
/usr/local/hadoop/logs下查看日志文件,然后分析退出原因,我在使用问题jdk的过程中就有上述出问题——Namenode等进程意外退出,后来查看hadoop-hadoop-namenode-chw-N-A.log发现退出异常的报错信息为:
ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.NoClassDefFoundError: javax/net/SocketFactory
就是因为/usr/java/jdk1.6.0_38/jre/lib中的jsse.jar文件没有被解压出来的原因,用jdk-6u38-linux-i586.bin则不会出现这个问题。
9、运行wordcount
准备需要进行wordcount的文件
sudo gedit /tmp/test.txt
随便输入一些英语单词,然后保存退出
将准备的测试文件上传到dfs文件系统中的firstTest目录下
hadoop dfs -copyFromLocal /tmp/test.txt firstTest
执行wordcount
hadoop jar hadoop-mapred-examples-1.1.2.jar wordcount firstTest result
PS:此处的jar文件会因安装的hadoop版本不同而不同,安装好Hadoop以后,hadoop文件夹下会有类似名字的example文件
查看结果
hadoop dfs -cat result/part-r-00000
- 1楼cvBertie昨天 15:28
- 太好了,太有用了!lzV5!