本文搭建环境以普通用户运行Hadoop集群环境,同时为了保留软件版本号,方便日后升级,所有解压目录都创建软连接,同时在环境变量/etc/profile或~/.bash_profile文件中引用的路径都为软连接路径,这样升级方便:
1、环境分配:【打钩的表示该主机上运行该功能】
- NN:表示NameNode,和SecondNameDode,这里的Spark-master主NameNode、SecondNameDode在Spark-slave1主机上。
- DN:表示DataNode,有三个节点分别在Slave【1、2、3】上。
- ZK:表示ZeeKeeper ,以单节点数。【可1、或3、5等】。
- ZKFC:NameNode在哪ZKFC就在哪。【必须】
- JN:journalnode作为共享,集群有高可用。
- RM:Mapreduce主程序,ResourceManager放到NameNode上【选择少服务的主机】。
- DM:最好跟DataNode在同一节点上。【为Mapreduce分配任务】
2、软件版本:
jdk-7u79-linux-x64.gz、hadoop-2.5.2.tar.gz、hadoop-native-64-2.4.0.tar
注:hadoop-native-64-2.4.0.tar 是为了解决运行dfs时的一个WARN 提示:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
用法:把它解压到hadoop的/lib/目录下即可。【适合2.5.2,其它版本未测试过】
3、建立用户:
useradd swper
echo “123456”|passwd --stdin swper
切换到swper用户目录下,并上软件到主目录下,并在主目录下建立一个安装所需软件的目录。
su swper
mkdir /app
解压软件到/app目录下,并创建对应的软连接:
tar xf hadoop-2.5.2.tar.gz app/
tar xf jdk-7u79-linux-x64.gz app/
建立软连接:
cd app/
ln -s hadoop-2.5.2/ hadoop
ln -s jdk1.7.0_79/ java
配置环境变量:可修改~/.bash_profile或者/etc/profile文件:
#HDFS configuration at 20160411
#JAVA configuration
export JAVA_HOME=/home/swper/app/java
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
#Hadoop configuration
export HADOOP_HOME=/home/swper/app/hadoop
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4、修改配置文件:进入目录:cd app/hadoop/etc/hadoop/
建立目录:mkdir /home/swper/app/hadoop/tmp
1)core-site.xml
<configuration>
<property>
<name>ha.zookeeper.quorum</name>
<value>spark-master:2181,spark-slave1:2181,spark-slave2:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/swper/app/hadoop/tmp</value>
</property>
</configuration>
2)hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>spark-master:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>spark-slave1:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>spark-master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>spark-slave1:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://spark-slave1:8485;spark-slave2:8485;spark-slave3:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/swper/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
3)安装zookeeper-3.4.6
tar xf zookeeper-3.4.6.tar.gz -C /home/swper/app/
cd /home/swper/app/
ln -s zookeeper-3.4.6/ zookeeper
cd zookeeper/conf/
建立目录:
mkdir -p /home/swper/app/zookeeper/data
【复制一份zoo_sample.cfg改名为zoo.cfg】
修改下面配置:【由于上面的规则,zk_server只在以下三台机器运行】
dataDir=/home/swper/app/zookeeper/data
server.1=spark-master:2888:3888
server.2=spark-slave1:2888:3888
server.3=spark-slave2:2888:3888
注:修改完后要在dataDir目录下建立一个文件名叫:myid 并根据上面配置填ID。每个节点都要对应,根据主机名和前面的ID相对应。
创建完后,先在每个节点上启动zkServer,进入bin目录:【上面三台节点都要启动】
./zkServer.sh start
4)hadoop-env.sh和yarn-env.sh都要加入JAVA的路径:
export JAVA_HOME=/home/swper/app/java
5)slaves #【填上运行DataNode的的主机名】
spark-slave1
spark-slave2
spark-slave3
完成上面的配置后接下来按顺序启动:
1、启动journalnode:在spark-slave1、spark-slave2、spark-slave3 【根据上面的规则,三台机都要启动】
/home/swper/app/hadoop/sbin/hadoop-daemon.sh start journalnode
2、格式化zk不然下边启动dfs时会报错,进入随便一个NameNode主机上,执行以下命令:
cd /home/swper/app/hadoop/bin
./hdfs zkfc -formatZK
格式化zk,只需在其中一台NameNode主机上执行命令:
3、格式化第一个NameNode,查看提示是否成功,并检查是否创建了NameNode的元数据。
并且启动第一个格式化的NameNode,因为要把元数据同步到第二个NameNode;
4、回到另一台NameNode主机上执行命令:
cd /home/swper/app/hadoop/bin
./hdfs namenode -bootstrapStandby
如下截图:
5、完成后可以把所有服务停止:./stop-all.sh
然后,再次启动所有服务:./start-dfs.sh
可以成功看到各节点已经启动起来了,详情查看截图: