1、 配置主机名和ip
(1) Network配置完成,使ip可以互相ping通; (2) 修改/etc/sysconfig/network中HOSTNAME的值,分别为Master、Slaves1、Slaves2、Slaves3; (3) 在/etc/hosts中添加所有主机的ip和主机名,如(样式): 192.168.2.111 Master 192.168.2.112 Slaves1 (4) 所有主机均创建hadoop用户 | |
2、 安装jdk
1、 利用Xshell工具,在每台主机上安装rz(上传工具),sz(下载工具),执行yum install lrzsz 即可;
2、 利用Xshell工具,在每台主机上上传jdk(1.7.0_51)并解压到/usr/local/jdk下;
3、 修改/etc/profile,如下:
#set java environment
export JAVA_HOME=/usr/local/jdk/jdk1.7.0_51
export JRE_HOME=/usr/local/jdk/jdk1.7.0_51/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
exportCLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
4、 执行source /etc/profile;
输入java -version,出现jdk版本号即jdk安装成功;
| |
3、 安装SSH无密码登陆机制
[hadoop@Master ~]$ ssh-keygen -t rsa -P ""
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): /home/hadoop/.ssh/id_rsa
[hadoop@Master ~]cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
[hadoop@Master ~]chmod 700 ~/.ssh/
[hadoop@Master ~]chmod 600 ~/.ssh/authorized_key
#验证
[hadoop@Master ~]ssh localhost
[hadoop@Master ~]ssh Slaves1
#复制ssh配置到其它机器
[hadoop@Master ~]ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@Slaves1
[hadoop@Master ~]ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@Slaves2
[hadoop@Master ~]ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@Slaves3
#在Master主机上再验证ssh Slaves1即可无密码登陆成功
| |
4、 安装HDFS
(1) 切换到hadoop用户,利用Xshell工具上传hadoop-1.2.1.tar到/home/Hadoop/目录下,并解压:/home/Hadoop/Hadoop-1.2.1;
(2) 修改Master主机上的/etc/profile新增如下内容(其他主机应该不需要,不过我也配置了),然后执行source /etc/profile使文件生效。
#hadoop1.2.1
export HADOOP_HOME=/home/hadoop/hadoop-1.2.1
export PATH=$PATH:$HADOOP_HOME/bin
#需要添加下边这句,不然启动的时候一直会有warning($HADOOP_HOME is deprecated)
export HADOOP_HOME_WARN_SUPPRESS=1
| |
(3) 配置conf/hadoop-env.sh文件,添加:
#这里修改为jdk的安装路径
export JAVA_HOME=/usr/local/jdk/jdk1.7.0_51/
| |
(4) 测试hadoop的安装
$ cd /home/Hadoop/hadoop-1.2.1
$ hadoop jar Hadoop-1.2.1-examples.jar wordcount conf/ /tmp/out
#可以看到/tmp/out/文件夹下有文件part-r-00000(里面记录这每一个文件的count)
| |
(5) 集群配置(所有主机节点相同)
5.1 配置文件:conf/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
#tmp文件夹不用提前创建
</configuration>
| |
fs.default.name是NameNode的URI。hdfs://主机名:端口/hadoop.tmp.dir:Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
5.2 配置文件:conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>Master:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
| |
mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。
5.3 配置文件:conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/name1,/home/hadoop/name2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data1,/home/hadoop/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
| |
dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。
5.4 配置masters和slaves主从节点(最好使用主机名,避免以后ip变动)
$vim masters:
输入:
Master
$vim slaves:
输入:
Slave1
Slave2
Slave3
| |
(6) 配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确,例如:如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh
$scp -r /home/hadoop/hadoop-1.2.1 Slave1:/home/hadoop/
$scp -r /home/hadoop/hadoop-1.2.1 Slave2:/home/hadoop/
$scp -r /home/hadoop/hadoop-1.2.1 Slave3:/home/hadoop/
| |
(7) 格式化一个分布式文件系统,需要先关闭防火墙,不然会报错
需要重新格式化了,把所有东西都删掉
#所有主机都需要关闭防火墙
sudo service iptables stop
#Master主机执行
hadoop namenode –format
#启动所有节点,启动顺序为
#namenode>datanode>secondnamenode>jobtracker>tasktracker
start-all.sh
#关闭所有节点
# jobtracker>tasktracker>namenode>datanode>secondnamenode
| |
(8) 测试
8.1 用jps检验各后台进程是否成功启动
8.2 用hadoop dfsadmin –report查看hadoop集群的状态
8.3 通过浏览器和http访问NameNode和JobTracker的网络接口
Namenode:http://Master:50070/
JobTracker:http://Master:50030/
8.4 使用netstat-net查看端口9000和9001是否正在使用
5、 zookeeper的安装
(1) 利用Xshell工具将下载好的zookeeper上传到/usr/local目录下,解压文件;改名字zookeeper
(2)修改/etc/profile,添加
#zookeeper
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
(3)进入/usr/local/zookeeper/目录下,新建文件夹data(作为数据目录);
(4)重命名/usr/local/zookeeper/conf 目录下的zoo_sample.cfg 为zoo.cfg;
(5)修改/conf/zoo.cfg配置文件,如下:
#dataDir=/tmp/zookeeper
dataDir=/usr/zookeeper/data
clientPort=2181
initLimit=10
syncLimit=5
tickTime=2000
server.1=192.168.2.105:2888:3888
server.2=192.168.2.106:2888:3888
server.3=192.168.2.107:2888:3888
| |
(6)在/data目录下新建文件,文件名为myid,并在对应的机器上输入对应的编号,如192.168.2.105机器上输入1,192.168.2.106机器上输入2;
(7)修改防火墙配置如下,然后执行防火墙重启命令:service iptables restart
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
| |
(8)启动zookeeper
启动:/usr/local/zookeeper3.4.5/bin/zkServer.sh start
停止:/usr/local/zookeeper3.4.5/bin/zkServer.sh stop
重启:/usr/local/zookeeper3.4.5/bin/zkServer.sh restart
检查状态:/usr/local/zookeeper3.4.5/bin/zkServer.sh status
注:可能需要安装nc包,则执行yum install nc