1)安装Ubuntu或其他Linux系统:
a)为减少错误,集群中的主机最好安装同一版本的Linux系统,我的是Ubuntu12.04。
b)每个主机的登陆用户名也最好都一样,比如都是hadoop,不然到最后启动hadoop时会出现不管你密码是否输入正确,都会提示权限不够的错误,如果你之前装系统时没注意到这个问题,可以之后在每个主机上都新建一个用户hadoop来实现,命令如下:
增加hadoop用户:sudo adduser hadoop
把新加的hadoop用户,添加到admin组中,让其有sudo权限:sudo usermod -aG adm,sudo hadoop
切换到hadoop用户,以hadoop用户重新登陆linux系统即可。
c)修改每个主机的主机名hostname:充当主节点的主机名为master,充当从节点的主机名为slave1,slave2,slave3,4.....N
这里我的实验是2台主机,一个主机充当主节点master,一个主机充当从节点slave2
可以通过命令:sudo vi /etc/hostname 来打开并修改hostname,修改完之后重新打开一个终端就可以看到结果,例如我这里的主节点主主机中修改完登陆用户名和主机名后如下所示:
登陆用户名为:hadoop 主机名为:master
另外一个从节点用户名也为hadoop,主机名为:slave2
2)配置网络
a)配置每个节点的IP使其在同一个局域网内:
例如:
master IP:192.168.130.15 slave2 IP:192.168.130.41
可以通过命令ifconfig来修改IP,例如 :sudo ifconfig eth0 192.168.130.15(新IP地址)。
b)在每个master和slave的hosts文件中加入如下几行:
打开并修改hosts :sudo vi /etc/hosts
新添加内容:
192.168.130.15 master
192.168.130.41 slave2
c)各个节点相互ping测试
例如:这里用主节点master ping下从节点slave2
如果你的实验中slave节点多于1个,每个节点之间都ping下,确保可以ping通。
3)安装JDK
Hadoop是用JAVA编写的程序,Hadoop的编译及MapReduce的运行都需要使用JDK,因此在安装Hadoop前,必须安装JDK。
这里我安装的JDK版本是 jdk-6u38-linux-i586.bin,可用其他版本,但需要修改环境变量以及后面的配置路径。
需对实验中所有主机执行以下步骤:
1、把 jdk 安装文件拷贝到/usr/lib 目录下,然后安装
sudo cp jdk-6u38-linux-i586.bin /usr/lib
cd /usr/lib
修改jdk权限: sudo chmod +x jdk-6u38-linux-i586.bin
修改完权限后就可以安装: sudo ./jdk-6u38-linux-i586.bin
2、jdk安装成功后修改环境变量并且把 java 安装到系统
a)配置环境变量,编写一个 java.sh并放到目录 /etc/profile.d 下面,java.sh内容如下:
#set jdk environment
export JAVA_HOME=/usr/lib/jdk1.6.0_38
export JRE_HOME=/usr/lib/jdk1.6.0_38/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
b)提升 java.sh 的权限:
sudo chmod 775 /etc/profile.d/java.sh
c)刷新 profile
source /etc/profile
d)把 Java 安装到系统:
ln –s /usr/lib/jdk1.6.0_38/bin/java /usr/bin/java
e)查看 Java 版本确定已经安装到系统:
java –version
如果看到版本信息,说明安装成功。
4)SSH 无密码验证配置
Hadoop需要通过SSH来启动slave列表中的各台主机的守护进程,因此SSH必须安装。
SSH 是安全壳协议,使用公钥私钥机制,安全的在主机间传输文件,现在需要对集群进行无密码验证访问传输的配置。需对集群所有机器进行配置,建议以下操作集群按步骤同步,即所有机器都完成了一个步骤再进行下一步。
a)、安装 SSH
sudo apt-get install ssh
b)、在 hadoop 用户下,使用命令:
ssh-keygen –t rsa。
一路欢快的回车,有时需要在中间 y/n 时选择 y。
将在~/.ssh 目录下产生一个 id_rsa 的私钥 和 id_rsa.pub 的公钥。
ssh-keygen 表示生成密钥,-t 表示指定生成的密钥类型,这里是rsa
c)、进入~/.ssh 目录下,将 id_rsa.pub 复制为 authorized_keys,即把公钥加入到授权的key中。
cd ~/.ssh
cp id_rsa.pub authorized_keys
d)将本机公钥发给所有其他机器
这里以slave2为例:
scp id_rsa.pub hadoop@master:~/.ssh/slave2_key
中途可能会提示让你输入对方主机的密码,输入之后就会提示成功发送。
所有机器完成此步骤后,在每台机器~/.ssh 目录下都会有其他所有机器发送来的公钥。
例如在执行完上面的命令后,此在master主机的~/.ssh/目录下会多出个slave2_key:
e)将收集到的所有公钥添加到 authorized_keys中
例如:上面master收到了slave2发来的slave2_key后,把其添加到authorized_keys中
cat slave2_key >> authorized_keys
f) ssh登录
对于两台主机第一次 ssh 连接,需要确认 yes,很重要,必须确保集群所有机器相互 ssh连接过,否则后面 hadoop 安装会出问题。
以 master 为例
此时你已经登录到别人的机器了,hadoop@master 变为 hadoop@slave2,可以对slave2机器进行操作了。
exit
注意必须要退出,否则你后面做的所有操作都是在其他人的机器上。
5)安装Hadoop
我这里安装的版本为:hadoop-1.2.0.tar.gz 也可以到官网下载其他版本。
安装步骤如下:
a):在/opt 目录下建立 hadoop 目录,把 hadoop-1.2.0.tar.gz 拷贝到/opt/hadoop 目录下,然后解压
sudo mkdir /opt/hadoop
sudo cp hadoop-1.2.0.tar.gz /opt/hadoop
cd /opt/hadoop
sudo tar –zxvf hadoop-1.2.0.tar.gz
cd hadoop-1.2.0
b) : 配置Hadoop
(1)指定JDK的安装位置:
编辑 conf/hadoop-env.sh 文件,把 JAVA_HOME 设置成 Java 安装根路径,如下:
export JAVA_HOME=/usr/lib/jdk1.6.0_38 ,记住把 export 前面的#去掉
(2)配置conf/目录下的core-site.xml文件,这里配置的是HDFS的地址和端口号:
配置之前请先在/opt/hadoop 目录下建立 tmp 文件夹:sudo mkdir /opt/hadoop/tmp
#core-site.xml 1 <configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
(3)配置conf/目录下的 hdfs-site.xml文件:
配置之前新建目录 /opt/hadoop/hdfs :sudo mkdir /opt/hadoop/hdfs
#hdfs-site.xml <configuration>
<property>
<name>dfs.replication</name>
<value>1</value> #这里1是数据副本数量,默认是3,我这里写成1,因为我只用了1个datacode,slave2
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hdfs/data</value>
</property>
</configuration>
(4)配置 conf/mapred-site.xml
这里是配置MapReduce的配置文件,配置JobTracker的地址和端口
# conf/mapred-site.xml
1 <configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
(5)配置 conf/masters 和 conf/slaves 来设置主从节点,注意最好使用主机名,并且保证各节点之间可以通过主机名可以互相访问,每个主机名一行:
我这里的 conf/masters内容为:
master
conf/slaves内容为:
slave2
(6)提升 hadoop 权限,这里因为安装 hadoop 需要足够高的权限,所以一个简便方法是将整个 hadoop 文件提升至 777 权限:
sudo chmod 777 -R /opt/hadoop
对每台机器都进行上述操作。
6)启动hadoop
下面操作在master主机上进行 a)首先格式化hadoop:
./bin/hadoop namenode -format
b)启动hadoop
./bin/start-all.sh 启动提示如下:
从上图中可以看出是先启动了namenode,然后是启动datanode,再启动secondarynamenode,最后启动taskracker.
c)验证方式
1)用命令查看集群状态:./bin/hadoop dfsadmin –report
(2)也可以用java自带jps查看进程:
在master主机上查看结果如下:
也可以在slave主机上用jps查看下TaskTracker和DataNode是否被启动
(3)登录http://master:50070和http://master:50030查看集群状态
http://master:50070状态如下:
http://master:50030状态如下:
可以看出启动了一个datanode,因为我这里就只有一个slave2,如果多台主机组成集群,状态更明显。
d)关闭hadoop
./bin/stop-all.sh
先关闭了jobtracker,其次关闭slave2上的tasktracker,然后关闭namenode,关闭datanode,最后关闭secondarynamenode