您的位置:首页 > 运维架构

Hadoop环境搭建——伪分布式环境搭建

2013-03-22 23:38 661 查看
本文大部分借鉴了/article/4490049.html中的安装过程,在此向原作者表示感谢,同时本文的原创性是更改了Hadoop文件配置部分,以及对按装过程中遇到的问题做了说明

工具:

jdk-6u38-linux-i586.bin

hadoop-1.1.2.tar.gz

ubuntu-12.04.1-desktop-i386.iso

安装

1、安装ubuntu10.10

参见博文:/article/8938519.html

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 hadoop

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

PS: 上述命令可能会有如下报错,此时需要执行:sudo apt-get update做一下更新

E: 无法解析或打开软件包的列表或是状态文件。

创建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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: