首先我们要准备三台云主机,我已经在阿里云上面购买好了3台按量收费的云主机了,当我部署完后我就会摧毁掉这3台机子的了。现在我用crt对这3台机子进行同意的操作。

当我们打开了crt的3个session后,我们同时为这3个机子创建一个用户hadoop,并在其家目录上面创建几个目录,分别是app,software,source和lib。

现在我们先配置好3台机器的hostname

接着我们来配置这3台机器的无密码登陆ssh,首先我们先生成3台机器的公钥和私钥,使用命令:

ssh-keygen -t rsa

将hadoop002和hadoop003这两台机器的公钥发送到hadoop001这台机器上面,然后将3个公钥都写入到authorized_keys这个文件里面,再分发到hadoop2和hadoop3这两台机器上:

scp id_rsa.pub root@hadoop001:/home/hadoop/.ssh/id_rsaX
cat id_rsa.pub > authorized_keys
cat id_rsa2 >> authorized_keys
cat id_rsa3 >> authorized_keys

 

scp authorized_keys root@hadoop002:/home/hadoop/.ssh/
scp authorized_keys root@hadoop003;/home/hadoop/.ssh/

现在我们检查一下3台机器是否都可以免密登陆到另外两台机器上就行了。

然后,我们把需要的软件包上传到上面去,我们分别需要到jdk1.8,hadoop-2.6.0-cdh5.7.0和zookeeper-3.4.6的tar.gz的包。接着在/usr/目录下创建一个java目录来存放我们的jdk,接着我们就解压jdk到这个目录下吧:

tar -xzvf /home/hadoop/software/jdk-8u45-linux-x64.gz -C /usr/java

然后配置全局环境变量 vi /etc/profile 添加:

export JAVA_HOME=//usr/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH

然后source一下使其生效。

现在我们已经配置好了java的环境变量了,是时候配置zookeeper和hadoop了。同样是先解压这两货:

tar -xzvf /home/hadoop/software/hadoop-2.6.0-cdh5.7.0.tar.gz -C /home/hadoop/app/
tar -xzvf /home/hadoop/software/zookeeper-3.4.6.tar.gz -C /home/hadoop/app/

现在我们来配置zookeeper,我们先进入到Zookeeper的conf目录下,在里面有一个zoo_sample.cfg这样的样例文件,我们将其copy一份来修改里面的内容:

cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

然后,我们在里面添加几个参数dataDir=/home/hadoop/app/zookeeper/data以及

server.1=hadoop001:2888:3888
server.2=hadoop002:2888:3888
server.3=hadoop003:2888:3888

这样我们就配好了zookpeer的配置文件了,然后我们需要在三台机器上的/home/hadoop/app/zookeeper/data目录上分别创建3个文件myid,并在里面填入一个数字,如果你是hadoop001机器就填入1,hadoop002就填入一个2,以此类推。

这个时候你将zookeeper配置到环境变量当中去,然后就可以直接使用bin目录下的zkServer.sh这个命令了,当使用zkServer.sh start这个命令为启动zookeeper服务,使用zkServer.sh status为查看进程的状态,切记你的2181,2888和3888端口一定要开启否则,当你使用zkServer.sh status查看是会看到报错了,并且后面使用zkfc服务也不会成功的。

接着我们开始配置Hadoop了,这里Hadoop的配置文件和伪分布式的配置文件有点不一样,后面的博客我会详细地解释每个配置文件的配置参数的不同。

当我们都配置好了以后,我们的开启顺序是先开启zookeeper,使用命令zkServer.sh start(前提是你已经配置好了环境变量了)。接着我们要开启journalNode这个进程了,3台机器都要开启哦。在hadoop/sbin目录下使用命令hadoop-daemon.sh start journalnode这个命令来开启JN进程。

然后我们就到我们的hadoop001这个机器上初始化namenode节点,使用命令hadoop namenode -format,因为hadoop002机器上也有一个namenode节点,但是我们不能将再在hadoop002上面初始化namenode节点了,所以我们将hadoop001节点上的/home/hadoop/app/hadoop/data这个目录scp到hadoop002这台机器上的/home/hadoop/app/hadoop上面,这里我已经将hadoop-2.6.0-cdh5.7.0改成了hadoop了,同时在hadoop目录下创建了一个data目录,请小伙伴们也这样创建吧。

接着我们ZKFC这个进程,使用hadoop/bin目录下的hdfs zkfc -formatZK这个命令执行。最后,我们就直接使用sbin上面的start-dfs.sh这个命令来启动分布式文件系统就好了,在这个过程当中请小伙伴们看清楚了个进程启动的进程。系统的顺序是这样:NN,DN,JN,ZKFC。。。

如果你是单进程启动的话,请使用sbin目录下的hadoop-hadoop-daemon.sh start namenode/datanode/journalnode/zkfc,我这里的/是顺序的意思,你要一个一个进程这样启动。

同样的,启动yarn也是使用sbin目录下的start-yarn.sh来启动,启动顺序是:ResourceManager再到NodeManager。单进程启动也是使用sbin目录下的hadoop-daemon.sh start resourcemanage/nodemanager。

最后jps检查一下你的进程数:

在hadoop001这个机器上有:NN,DN,JN,ZK,ZKFC,RM,NM这7个进程。

在hadoop002这个机器上有:NN,DN,JN,ZK,ZKFC,RM,NM这7个进程。

在hadoop003这个机器上有:DN,JN,ZK,NM这个4个进程。