Hadoop 基于 ZK 的高可用集群安装

282 阅读5分钟

注意事项

1、安装 ZooKeeper 配置注意事项

  • 1、新建 data 文件夹,注意这个文件夹的权限。

  • 2、新建文件 myid ,注意这个文件的权限。

  • 3、要分别向 myid 写入1,2,3。

2、修改了 hosts 主机名后,各个主机需要再次执行

ssh masterssh worker_01ssh worker_02

3、第一次启动的时候,需要格式化,第二次在启动的时候就不需要在格式化了,但 worker03 上的 ResourceManager 启动不起来,要单独启动。

4、从新修改了 Hadopp 集群的配置文件后,不需要从新在格式化NameNode

5、Namenode 主备切换不成功的原因(两者修改其中一项即可)

  • 1:没有安装:psmisc.

  • 2:配置里没有配:shell(/bin/true)××

6、hadoop version 不显示

  • 6.1、在配置文件里vim /etc/profile 里加

    export PATH=HADOOPHOME/bin:HADOOP_HOME/bin:HADOOP_HOME/sbin:$PATH

  • 6.2、配置生效:

    source /etc/profile

7、WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

  • 7.1、下载:hadoop-native-64-2.*.0.tar

  • 7.2、执行

    tar -xvf hadoop-native-64-2.7.0.tar -C $HADOOP_HOME/lib

  • 7.3、添加环境变量:vim /etc/profile

    export HADOOP_COMMON_LIB_NATIVE_DIR=HADOOPHOME/lib/nativeexportHADOOPOPTS="Djava.library.path=HADOOP_HOME/lib/nativeexport HADOOP_OPTS="-Djava.library.path=HADOOP_HOME/lib"

  • 7.4、配置生效:

    source /etc/profile

安装步骤

第一步

首先准备需要的软件:(最好注意一下版本)。

  • JDK (1.8)

  • ZooKeeper(3.4.6)

  • Hadoop(2.7.2)

第二步:

准备硬件。

  • 这里准备三台计算机,分别是 masterworker01worker02

  • masterworker01NameNode主备。

  • worker01worker02ResourceManager主备。

第三步:

确定安装顺序

(首次安装,请严格按照顺序来执行)

root 用户下执行

  • 修改 host

  • 关闭防火墙

  • 上传文件

  • JDK安装

新建 hadoop用户,并赋值 root 权限

hadoop 用户执行

  • 免密登录(本机和各个服务器之间)

  • 安装 zookeeper 并配置

  • 安装 hadoop 集群并配置

在进行安装和配置的时候,一定要注意用户,以及权限,尤其新建文件夹和新建文件操作

第四步

JDK安装和配置

(三台机器都要这样操作)

  • 1:上传文件到指定位置。

  • 2:解压。

  • 3:修改系统配置(vim /etc/profile)。

    export JAVA_HOME=/home/JDK/jdk1.8.0_191    export JRE_HOME=${JAVA_HOME}/jre    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH    export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
    
  • 4:配置生效 source /etc/profile

  • 5:验证 java -version

第五步

ZooKeeper 安装和配置

(三台机器都要这样操作)

  • 1:上传文件到指定目录。

  • 2:解压。

  • 3:在 zookeeper 目录下新建 data 文件夹。

  • 4:conf 目录下 zoo_sample.cfg重名为 zoo.cfg,添加如下配置。

    tickTime=2000    initLimit=10    syncLimit=5    dataDir=/usr/local/zookeeper/data/    dataLogDir=/usr/local/zookeeper/log/    clientPort=2181    # server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里    # 指名集群间通讯端口和选举端口    server.1=master:2287:3387    server.2=worker01:2287:3387    server.3=worker02:2287:3387
    
  • 5:进入data 目录,新建文件 myidtouch myid)。

  • 6:在 master 机器上执行 echo 1 > myid

  • 7:在 worker01 机器上执行 echo 2 > myid

  • 8:在 worker02 机器上执行 echo 3 > myid

(myid 的大小是两个字节【也就是只有一个数字;不要有空格】{查看方法就是vi进去以后光标闪烁是在 1 上,并且移动光标移动不了)。

  • 9:配置环境变量。

    export ZOOKEEPER_HOME=/home/ZK/zookeeper    export PATH=$PATH:${ZOOKEEPER_HOME}/bin
    
  • 10:配置项生效 source /etc/profile

  • 11:启动 ZK zkServer.sh start

  • 12:查看状态 zkServer.sh status

(如果启动出错,注意查看启动日志,问题就一目了然了)

第六步

Hadoop安装和配置

(三台机器都要这样操作)

  • 1:上传文件到指定的位置。

  • 2:解压。

  • 3:配置环境变量。

    export HADOOP_HOME=/home/HA/hadoop    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native    export HADOOP_PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"    export PATH=$PATH:${HADOOP_PATH}
    
  • 4:环境变量生效 source /etc/profile

  • 5:Hadoop集群配置。

    1. hadoop-evn.sh

    2. core-site.xml

    3. hdfs-site.xml

    4. yarn-site.xml

    5. mapred-site.xml

    6. slaves

  • 5.1、hadoop-env.sh

    export JAVA_HOME=/home/JDK/jdk1.8.0_191

  • 5.2、core-site.xml

    fs.defaultFS hdfs://mycluster hadoop.tmp.dir file:/home/HA/hadoop/tmp ha.zookeeper.quorum master:2181,worker01:2181,worker02:2181 ha.zookeeper.session-timeout.ms 10000

  • 5.3、hdfs-site.xml

    dfs.replication 3 dfs.namenode.name.dir file:/home/HA/hadoop/tmp/dfs/name dfs.datanode.data.dir file:/home/HA/hadoop/tmp/dfs/data dfs.permissions false dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2 dfs.namenode.rpc-address.mycluster.nn1 master:9000 dfs.namenode.rpc-address.mycluster.nn2 worker01:9000 dfs.namenode.http-address.mycluster.nn1 master:50070 dfs.namenode.http-address.mycluster.nn2 worker01:50070 dfs.namenode.shared.edits.dir qjournal://master:8485;worker01:8485;worker02:8485/mycluster dfs.journalnode.edits.dir /home/HA/hadoop/journalnode/data dfs.ha.fencing.methods sshfence shell(/bin/true) dfs.ha.fencing.ssh.private-key-files /home/hadoop/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000 dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.automatic-failover.enabled true

  • 5.4、yarn-site.xml

    yarn.nodemanager.aux-services mapreduce_shuffle yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 86400 yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id yarn yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 worker01 yarn.resourcemanager.hostname.rm2 worker02 yarn.resourcemanager.webapp.address.rm1 worker01:8088 yarn.resourcemanager.webapp.address.rm2 worker02:8088 yarn.resourcemanager.zk-address master:2181,worker01:2181,worker02:2181 yarn.resourcemanager.recovery.enabled true yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

  • 5.5、mapred-site.xml

    mapreduce.framework.name yarn

  • 5.6、slaves

    masterworker01worker02

  • 配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 DataNode服务和 NodeManager 服务都会被启动。

  • 注意不要有空格。

第七步

配置压缩包

(三台机器都要这样操作)

hadoop-native-64-2.7.0.tar 解压到 hadoop-2.7.2/lib/nativehadoop-2.7.2/lib 目录下。

(之前搭建伪分布式的时候,出现不能加载本地库的情况,这里在这里就直接把这一步给用上了,这里也可以不先这样操作,加载有问题后,在处理也一样。)

这里还有一步操作,那就是配置文件 etc/profile 里加:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

第八步

第一次启动

  • 1、启动 ZooKeeper

(三台机器都要启动)

zkServer.sh start
  • 2、启动 Journalnode

(三台机器都要启动)

hadoop-daemon.sh start journalnode
  • 3、初始化 NameNode

master上操作)

 hdfs namenode -format
  • 4、初始化之后。

(执行初始化命令后,需要将 NameNode 元数据目录的内容,复制到其他未格式化的 NameNode 上。元数据存储目录就是我们在 hdfs-site.xml 中使用 dfs.namenode.name.dir 属性指定的目录。)

scp -r /home/hadoop/namenode/data worker01:/home/hadoop/namenode/
  • 5、初始化HA状态。

(任意一台机器)

hdfs zkfc -formatZK

(在任意一台 NameNode 上使用以下命令来初始化 ZooKeeper 中的 HA 状态)

  • 6、启动 HDFS

master上操作)

 start-dfs.sh
  • 7、启动 YARN

worker01上操作)

 start-yarn.sh

(需要注意的是,这个时候 worker02 上的 ResourceManager 服务通常是没有启动的,需要手动启动)

yarn-daemon.sh start resourcemanager

第九步

第二次启动

  • 1、启动 ZooKeeper

(三台机器都要启动)

zkServer.sh start 
  • 2、master上启动 HDFS

    start-dfs.sh

  • 3、worker01 上启动 YARN

    start-yarn.sh

  • 4、worker02 上启动 ResourceManager

    yarn-daemon.sh start resourcemanager