搭建环境:
Redhat-Server-6.3,hadoop-0.20.203.0,jdk系统自身安装的
需要注意的是在所有的节点中namenode和datanode用户名和密码应该是相同的
一、安装jdk、hadoop:
本人由于用的是系统自带的jdk,所以本人没有设置相关的JAVA_HOME的相关路径,利用which java和ls java命令来查找系统指定的java路径。
给出相关配置jdk的步骤,参考网上的相关资料
无论在单机模式还是在集群模式下,建议将hadoop,jdk等其他软件装在固定目录下。如果是集群模式,在各个机器上一定要选择同一个目录,建议选择文件系统的 /opt/ 目录。可能由于权限问题无法更改 /opt/ 目录,可使用命令 $ sudo chmod 777 -R /opt 更改权限.
将下载好的jdk,hadoop放在 /opt 目录下,直接右键解压到此处解压hadoop,打开终端,转到 /opt 目录下,执行
$ sudo ./jdk-6u25-linux-i586.bin
就可以解压。
如果提示该操作权限不够,先执行
$ sudo chmod 777 jdk-6u25-linux-i586.bin
后再做该操作。
将hadoop压缩包解压到相关路径下,本人的用户名为redhat 将压缩包解压到以下路径下/home/redhat路径下。
使用的解压命令式:
Tar zxvf hadoop-0.20.203.0rc1.tar.gz
二、环境变量配置及host配置
由于本人的相关设置是自动生成的,所以可能是不用对/etc/profile文件进行相关的设置。这里我就给出网上前人给出的配置
Profile文件添加配置
export JAVA_HOME=/opt/jdk1.6.0_25
export JRE_HOME=/opt/jdk1.6.0_25/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:/opt/android-sdk-linux_x86/platform-tools
export HADOOP_HOME=/opt/hadoop-0.20.203.0
export PATH=$HADOOP_HOME/bin:$PATH
我是使用三台机器来做,ip分配如下:
机器名 IP 作用
redhat1 192.168.1.20 NameNode、master、jobTracker
redhat2 192.168.1.21 DataNode、 slave、 taskTracker
redhat3 192.168.1.22 DataNode、 slave、 taskTracker
redhat4 192.168.1.23 DataNode、 slave、 taskTracker
配置hosts文件内容
192.168.1.20 redhat1
192.168.1.21 redhat2
192.168.1.22 redhat3
192.168.1.23 redhat4
三、ssh无密码登录
(1)在 NameNode 上实现无密码登录本机:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
直接回车,完成后会在~/.ssh/生成两个文件:id_dsa 和 id_dsa.pub。这两个是成对
出现,类似钥匙和锁。再把 id_dsa.pub 追加到授权 key 里面(当前并没authorized_keys
文件):
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
完成后可以实现无密码登录本机:
$ ssh localhost。
(2)实现 NameNode 无密码登录其他 DataNode:
把 NameNode 上的 id_dsa.pub 文件追加到 dataNode 的 authorized_keys 内 ( 以192.168.1.21 节点为例):
a. 拷贝 NameNode 的 id_dsa.pub 文件:
$ scp authorized_keys hadoop@125.216.244.201:/home/hadoop/.ssh/
其他的 dataNode 执行同样的操作。如果提示没有.ssh文件夹,自己创建一个。
注意:如果配置完毕,如果 namenode 依然不能访问 datanode,可以修改 datanode 的
authorized_keys:
四、关闭防火墙
/etc/init.d/iptables stop
五、hadoop文件配置
进入hadoop路径下,进入conf文件加下打开hadoop-env.sh文件
hadoop-env.sh文件配置
添加如下一行
export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk
masters文件配置
redhat1
slaves文件配置
redhat2
redhat3
redhat4
core-site.xml文件配置
<?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>/home/redhat/tmp1</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.20:9000</value>
</property>
</configuration>
hdfs-site.xml文件配置
<?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>3</value>
</property>
</configuration>
注意:replication 默认为 3,如果不修改,datanode 少于三台就会报错如果配置datanode比较少改为1比较合适
mapred-site.xml文件配置
<?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.1.20:9001</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
六、运行hadoop
进入 hadoop-0.20.203.0/bin,首先格式化文件系统:
$ hadoop namenode –format
启动 Hadoop:
$ start-all.sh
用 jps 命令查看进程
$ jps
29087 Jps
3704 JobTracker
3013 NameNode
查看集群状态:
$ hadoop dfsadmin -report
Configured Capacity: 55609774080 (51.79 GB)
Present Capacity: 36792840192 (34.27 GB)
DFS Remaining: 36791676928 (34.26 GB)
DFS Used: 1163264 (1.11 MB)
DFS Used%: 0%
Under replicated blocks: 5
Blocks with corrupt replicas: 2
Missing blocks: 0
-------------------------------------------------
Datanodes available: 3 (3 total, 0 dead)
Name: 192.168.1.21:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 376832 (368 KB)
Non DFS Used: 6284947456 (5.85 GB)
DFS Remaining: 12251267072(11.41 GB)
DFS Used%: 0%
DFS Remaining%: 66.09%
Last contact: Sun Sep 16 21:25:22 CST 2012
Name: 192.168.1.23:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 376832 (368 KB)
Non DFS Used: 6267588608 (5.84 GB)
DFS Remaining: 12268625920(11.43 GB)
DFS Used%: 0%
DFS Remaining%: 66.19%
Last contact: Sun Sep 16 21:25:21 CST 2012
Name: 192.168.1.22:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 409600 (400 KB)
Non DFS Used: 6264397824 (5.83 GB)
DFS Remaining: 12271783936(11.43 GB)
DFS Used%: 0%
DFS Remaining%: 66.2%
Last contact: Sun Sep 16 21:25:22 CST 2012
Hadoop 的 web 方式查看:http://192.168.1.20:50070
七、运行WordCount程序
(1)先在本地文件系统建立一个文件夹test-in,然后转到该目录下创建 file01 和 file02:
$ echo “Hello World Bye World” > file01
$ echo “Hello Hadoop Goodbye Hadoop” > file02
test-in文件夹可以建在那里都可以。
(2)转到hadoop-0.20.203.0 目录下,在 hdfs 中建立一个 input 目录:
$ hadoop fs –mkdir input
注意如果提示存在该目录已存在,不能创建。则执行命令
$hadoop fs -ls
显示 /user/当前用户/ 下的文件夹,看到input后又执行
$hadoop fs -rmr input
删除该文件夹。之后再创建。
(3)将 file01 和 file02 拷贝到 hdfs 中:
$ hadoop fs –copyFromLocal /opt/test-in/file0* input
(4)执行 wordcount:
$ hadoop jar hadoop-examples-0.20.203.0.jar wordcount input output
(5)完成之后,查看结果:
$ hadoop fs -cat output/part-r-00000
Bye 1
Goodbye 1
Hadoop 2
Hello 2
World 2
异常处理
1.could only be replicated to 0 nodes, instead of 1
上一次的缓存数据还没有删除,删除 namenode 和 datanode 中 /home/hadoop/tmp/dfs 和/home/hadoop/tmp/mapred 下所有文件,重新格式化 namenode
重新开始后,执行
$start-all
$hadoop dfsadmin -report
看看有没有可用的datanode ,没有的话等待几分钟,直到出现有可用的datanode再执行worldcount.jar 程序。等了很久还没有的话,删除 namenode 和 datanode 中 /home/hadoop/tmp/dfs 和/home/hadoop/tmp/mapred 下所有文件,重新格式化 namenode 再执行。
其他的异常也可以通过此方法解决。