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 高可用
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。