zookeeper 安装

1 禁用防火墙和 selinux

2 设置 /etc/hosts ip 主机名对应关系

3 安装 openjdk

zookeeper 角色,选举

leader 集群主节点

follower 参与选举的附属节点

observer 不参与选举的节点,同步 leader 的命名空间

解压包:

tar -zxf zookeeper-3.4.10.tar.gz

拷贝:

cp -r zookeeper-3.4.10 /usr/local/zookeeper

1.拷贝配置文件

cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

2.修改配置文件  在最后添加

server.1=node1:2888:3888

server.2=node2:2888:3888

server.3=node3:2888:3888

server.4=master:2888:3888:observer    //手动指定observer

3.创建目录 zookeeper 配置文件里面的 dataDir 指定的目录

mkdir /tmp/zookeeper

  创建到所有机器  node1/node2/node3中

3-1: 拷贝/usr/local/zookpper文件夹到所以电脑

for i in node{1..3}; do rsync -aSH --delete /usr/local/zookeeper/ ${i}:/usr/local/zookeeper  -e 'ssh' &

done

wait

4 在/tmp/zookeeper中echo 文件对应zoo.cfg,写入自己的 id 值

   master : echo 4 > /tmp/zookeeper/myid   那个ID在那台机器去echo这条命令

   node1: echo 1 >> /tmp/zookeeper/myid

   node2: echo 2 >> /tmp/zookeeper/myid

   node3: echo 3 >> /tmp/zookeeper/myid

5 启动集群,查看角色

/usr/local/zookeeper/bin/zkServer.sh start

/usr/local/zookeeper/bin/zkServer.sh status

6.查看启动

jps   quodrumpeermain 

netstat -nltpu     端口号:2181

7.编辑脚本查看状况

vim a.sh

#!/bin/bash

function getstatus() {

        exec 2</dev/null

        exec 9<> /dev/tcp/$1/2181

        echo -ne "$2\n" >&9

        cat <&9

        exec 9<&-

}

for i in 192.168.4.{10..13};do

        echo -n "${i} "

        A=$(getstatus ${i} stat | grep Mode)

        echo "${A:--}"

done


kafka 信息集群安装

1 禁用防火墙和 selinux

2 设置 /etc/hosts ip 主机名对应关系

3 安装 openjdk

4 安装 kafka 到 /usr/local/kafka

5 修改配置文件 /usr/local/kafka/config/server.properties

broker.id=      //id值不能相同   每台电脑都要不同

zookeeper.connect=node1:2181,node2:2181      //只要在zookper有就可以不用全部添加

5-1:拷贝所以去所以电脑:

for i in node{1..3}; do rsync -aSH --delete /usr/local/kafka/ ${i}:/usr/local/kafka/  -e 'ssh' &

done

启动 kafka

/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

验证:

jps 能看到 kafka

netstat 能看到 9092 被监听

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

创建主题

bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 1 --topic nsd1706

查看显示已存在的主题

bin/kafka-topics.sh --list --zookeeper node1:2181

查看主题的详细信息

bin/kafka-topics.sh --describe --zookeeper node1:2181 --topic nsd1706

生存者发布信息

bin/kafka-console-producer.sh --broker-list node1:9092,node2:9092 --topic nsd1706

消费者消费信息

bin/kafka-console-consumer.sh --zookeeper node1:9092 --topic nsd1706 --from-beginning

bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic nsd170

from-beginning 是从头开始消费消息


hadoop 高可用

      ac1004a4-5c3f-4d08-90ca-ae6641056451


2台master:  master1/master 2

3台nodedata    node1/node2/node3  

3台kafa   

3台 zokpper

每台都配置好hosts一定用域名方式配置


1、安装 java


yum install java-1.8.0-openjdk -y 


验证:

java -version


2、安装 jps

yum install -y java-1.8.0-openjdk-devel 


验证:

jps


3、安装 hadoop

tar zxf hadoop-2.7.3.tar.gz

mv hadoop-2.7.3 /usr/local/hadoop


修改配置文件的运行环境:

vim/usr/local/hadoop/etc/hadoop/hadoop-env.sh  添加以下内容:

export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre"

export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"


验证:

cd /usr/local/hadoop

./bin/hadoop version

1.在一台新所有的name master 等机器上上设置ssh免密码

2.启动zokeeper服务在node1 node 2 node3 

/usr/local/zookeeper/bin/zkServer.sh start

3. 在已经安装运行hadoop老的机器上执行  新设置可以不执行!!

rm -rf /var/hadoop && mkdir/var/hadoop 

4.配置文件更新内容如下:

master上编辑   

core-site.xml

<configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://mycluster</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/var/hadoop</value>

    </property>

    <property>

        <name>ha.zookeeper.quorum</name>

        <value>node1:2181,node2:2181,node3:2181</value>

    </property>

</configuration>

hdfs-site.xml

<configuration>

    <property>

        <name>dfs.replication</name>                                              //定义备份数量

        <value>2</value>

    </property>

    

    <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>master1:8020</value>

    </property>

    

    <property>

        <name>dfs.namenode.rpc-address.mycluster.nn2</name>                       //定义第二台计算机心跳检查地址及其端口

        <value>master2:8020</value>

    </property>

    

    <property>

        <name>dfs.namenode.http-address.mycluster.nn1</name>                      //定义集群计算机http通信端口地址端口

        <value>master1:50070</value>

    </property>

    

    <property>

        <name>dfs.namenode.http-address.mycluster.nn2</name>                      //定义集群计算机http通信端口地址端口

        <value>master2:50070</value>

    </property>

    

    <property>

        <name>dfs.namenode.shared.edits.dir</name>                                //指定namenode元数据存储在journalnode中的路径

        <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>

    </property>

    

    <property>

        <name>dfs.journalnode.edits.dir</name>                                    //指定journalnode日志文件存储的路径

        <value>/var/hadoop/journal</value>

    </property>

    

    <property>

        <name>dfs.client.failover.proxy.provider.mycluster</name>                 //指定HDFS客户端连接active namenode的java类

        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

    </property>

    

    <property>

        <name>dfs.ha.fencing.methods</name>                                        //配置隔离机制为 ssh

        <value>sshfence</value>

    </property>

    

    <property>

        <name>dfs.ha.fencing.ssh.private-key-files</name>                           //指定秘钥的位置

        <value>/root/.ssh/id_rsa</value>

    </property>

    

    <property>

        <name>dfs.ha.automatic-failover.enabled</name>                              //开启自动故障转移

        <value>true</value>

    </property>

</configuration>

同步配置到所有集群机器 (新配置机器只需要执行第一条指令)

1. 在master1上同步hadoop文件到 到master2 上

rsync -aSH --delete /usr/local/hadoop/ 192.168.4.20:/usr/local/hadoop -e 'ssh'

2. 同步etc到node1.2.3上

for i in node{1..3}; do rsync -aSH --delete /usr/local/hadoop/etc ${i}:/usr/local/hadoop -e 'ssh' & done   

3.在其中一台master 初始化 zookeeper 集群

bin/hdfs zkfc -formatZK

4.在定义的节点(node1 node2 node3)启动 journalnode

/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode

5.在其中一台(master) namenode 上执行格式化命令

./bin/hdfs namenode –format

6.格式化后把数据目录拷贝到另一台 namenode(master2)    master 1 格式化后的/var/hadoop/*  同步到master2上去

rsync -aSH --delete /var/hadoop master2:/var/hadoop -e 'ssh'

7. 初始化 JournalNode

必须在node1 node2 node3 停止 JournalNode

./sbin/hadoop-daemon.sh stop journalnode

8.启动 dfs

./sbin/start-dfs.sh

9.验证配置

./bin/hadoop dfsadmin -report

10.查看集群状态  

./bin/hdfs haadmin -getServiceState nn1     此时反馈应该是active

./bin/hdfs haadmin -getServiceState nn2     此时反馈应该是 standby

./bin/hadoop fs -ls hdfs://mycluster/       查看集群内容 应该没有任何内容

. /bin/hadoop fs -mkdir hdfs://mycluster/input        创建集群目录

验证高可用,关闭 active namenode

sbin/hadoop-daemon.sh stop namenode

在查看状态,才是应该有一个不存在,另一个被占active

高可用yarn

在master namenode节点上  yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->

    <property>

        <name>yarn.nodemanager.aux-services</name>       //NodeManager上运行的附属服务。需配置成mapreduce_shuffle

        <value>mapreduce_shuffle</value>

    </property>

    <property>

        <name>yarn.resourcemanager.ha.enabled</name>         //高可用集群设置

        <value>true</value>

    </property>

   

    <property>

        <name>yarn.resourcemanager.ha.rm-ids</name>         //设置高可用集群主机列表主机名

        <value>rm1,rm2</value>

    </property>

   

     <property>

        <name>yarn.resourcemanager.hostname.rm1</name>        //设置第一台主机

        <value>master1</value>

    </property>

    

    <property>

        <name>yarn.resourcemanager.hostname.rm2</name>           //设置第二台

        <value>master2</value>

    </property>

    

    <property>

        <name>yarn.resourcemanager.recovery.enabled</name>      //启用RM重启的功能,默认为false

        <value>true</value>

    </property>

    

    <property>

        <name>yarn.resourcemanager.store.class</name>             //用于状态存储的类

        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

    </property>

    

    <property>

        <name>yarn.resourcemanager.zk-address</name>         //被RM用于状态存储的ZooKeeper服务器的主机:端口号,多个话使用逗号分隔。                       

        <value>node1:2181,node2:2181,node3:2181</value>

    </property>

    

    <property>              

        <name>yarn.resourcemanager.cluster-id</name>            //定义该名字ID           

        <value>yarn-ha</value>

    </property>

</configuration>

同步服务到每台

 

rsync -aSH --delete /usr/local/hadoop/etc 192.168.4.20:/usr/local/hadoop -e 'ssh'

rsync -aSH --delete /usr/local/hadoop/etc 192.168.4.11:/usr/local/hadoop -e 'ssh'

rsync -aSH --delete /usr/local/hadoop/etc 192.168.4.12:/usr/local/hadoop -e 'ssh'

rsync -aSH --delete /usr/local/hadoop/etc 192.168.4.13:/usr/local/hadoop -e 'ssh'

1.master 1启动服务,检查状态

./sbin/start-yarn.sh

2. master 2  启动服务,检查状态

./sbin/yarn-daemon.sh start resourcemanager

3.检查是否主从

./bin/yarn rmadmin -getServiceState rm1  此时反馈应该是active

./bin/yarn rmadmin -getServiceState rm2  此时反馈应该是 standby


 在学习了RM重启的特性和机制后,接下来就是如何启用RM重启的特性,主要涉及了yarn-site.xml中的几个配置参数,如下:

yarn.resourcemanager.recovery.enabled:启用RM重启的功能,默认为false。

yarn.resourcemanager.store.class:用于状态存储的类,默认为org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore,基于Hadoop文件系统的实现。还可以为org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore,该类为基于ZooKeeper的实现。

yarn.resourcemanager.am.max-attempts:应用程序尝试的最大次数。该参数是对所有ApplicationMasters的全局设置,每个ApplicationMaster可以通过API指定自己的最大尝试次数,但不可以超过全局设置上限,如果超过了,RM将使用全局设置。默认值为2,允许AM至少尝试一次。

        当使用FileSystemRMStateStore做为状态存储时,还需要配置下面的参数:

yarn.resourcemanager.fs.state-store.uri:指向文件系统路径位置的URI,RM将存储状态到该路径中,默认为$hadoop.tmp.dir/yarn/system/rmstore,如果没有指定文件系统名称,将使用fs.defaultFS的值。

yarn.resourcemanager.fs.state-store.retry-policy-spec:Hadoop文件系统客户端重试策略规范,客户端重试总是启用的。规范以休眠时间和重试次数对的形式给出,如(t0, n0), (t1, n1), ...,第一个n0次重试平均休眠t0毫秒,接下来的n1次重试平均休眠t1毫秒,以此类推。默认值为(2000, 500)。

        当使用ZKRMStateStore做为状态存储时,需要配置下面这些参数:

yarn.resourcemanager.zk-address:被RM用于状态存储的ZooKeeper服务器的主机:端口号,多个ZooKeeper的话使用逗号分隔。

yarn.resourcemanager.zk-state-store.parent-path:存储RM状态的ZooKeeper Znode全路径。

yarn.resourcemanager.zk-num-retries:RM尝试连接ZooKeeper的次数,默认为500。

yarn.resourcemanager.zk-retry-interval-ms:重试连接ZooKeeper的间隔毫秒数,默认为2000毫秒。

yarn.resourcemanager.zk-timeout-ms:ZooKeeper会话超时的毫秒数,该参数被ZooKeeper使用以决定什么时候会话到期。当ZooKeeper在由该参数指定的会话超时时间内没有收到客户端的信息,那么会话到期。默认值为10000毫秒。

yarn.resourcemanager.zk-acl:用于在ZooKeeper znode上设置权限的ACL,默认值为world:anyone:rwcda。