![在这里插入图片描述](https://img-blog.csdnimg.cn/20200401232922755.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MjYwNQ==,size_16,color_FFFFFF,t_70)


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200401231813368.png)




---


## Kafka集群搭建




---



#拉取Kafka镜像和kafka-manager镜像
docker pull wurstmeister/kafka:2.12-2.3.1
docker pull sheepkiller/kafka-manager


###### 编辑docker-compose.yml文件



version: ‘2’

services:
broker1:
image: wurstmeister/kafka:2.12-2.3.1
restart: always # 出现错误时自动重启
hostname: broker1# 节点主机
container_name: broker1 # 节点名称
privileged: true # 可以在容器里面使用一些权限
ports:
- “9091:9092” # 将容器的9092端口映射到宿主机的9091端口上
environment:
KAFKA_BROKER_ID: 1
KAFKA_LISTENERS: PLAINTEXT://broker1:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker1:9092
KAFKA_ADVERTISED_HOST_NAME: broker1
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
JMX_PORT: 9988 # 负责kafkaManager的端口JMX通信
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./broker1:/kafka/kafka-logs-broker1
external_links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.25.0.14

broker2:
image: wurstmeister/kafka:2.12-2.3.1
restart: always
hostname: broker2
container_name: broker2
privileged: true
ports:
- “9092:9092”
environment:
KAFKA_BROKER_ID: 2
KAFKA_LISTENERS: PLAINTEXT://broker2:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker2:9092
KAFKA_ADVERTISED_HOST_NAME: broker2
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
JMX_PORT: 9988
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./broker2:/kafka/kafka-logs-broker2
external_links: # 连接本compose文件以外的container
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.25.0.15
broker3:
image: wurstmeister/kafka:2.12-2.3.1
restart: always
hostname: broker3
container_name: broker3
privileged: true
ports:
- “9093:9092”
environment:
KAFKA_BROKER_ID: 3
KAFKA_LISTENERS: PLAINTEXT://broker3:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker3:9092
KAFKA_ADVERTISED_HOST_NAME: broker3
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
JMX_PORT: 9988
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./broker3:/kafka/kafka-logs-broker3
external_links: # 连接本compose文件以外的container
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.25.0.16
kafka-manager:
image: sheepkiller/kafka-manager:latest
restart: always
container_name: kafka-manager
hostname: kafka-manager
ports:
- “9000:9000”
links: # 连接本compose文件创建的container
- broker1
- broker2
- broker3
external_links: # 连接本compose文件以外的container
- zoo1
- zoo2
- zoo3
environment:
ZK_HOSTS: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
KAFKA_BROKERS: broker1:9092,broker2:9092,broker3:9092
APPLICATION_SECRET: letmein
KM_ARGS: -Djava.net.preferIPv4Stack=true
networks:
default:
ipv4_address: 172.25.0.10

networks:
default:
external: # 使用已创建的网络
name: bigdata



#运行命令
docker-compose up -d


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200401235440792.png)  
 \*\*看看本地端口9000也确实起来了  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200401235459198.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MjYwNQ==,size_16,color_FFFFFF,t_70)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200401235732298.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MjYwNQ==,size_16,color_FFFFFF,t_70)




---


## Hadoop高可用集群搭建




---


#### docker-compose创建集群



version: ‘2’

services:
master:
image: hadoop:latest
restart: always # 出现错误时自动重启
hostname: master# 节点主机
container_name: master # 节点名称
privileged: true # 可以在容器里面使用一些权限
networks:
default:
ipv4_address: 172.25.0.3

master_standby:
image: hadoop:latest
restart: always
hostname: master_standby
container_name: master_standby
privileged: true
networks:
default:
ipv4_address: 172.25.0.4

slave01:
image: hadoop:latest
restart: always
hostname: slave01
container_name: slave01
privileged: true
networks:
default:
ipv4_address: 172.25.0.5

slave02:
image: hadoop:latest
restart: always
container_name: slave02
hostname: slave02
networks:
default:
ipv4_address: 172.25.0.6
slave03:
image: hadoop:latest
restart: always
container_name: slave03
hostname: slave03
networks:
default:
ipv4_address: 172.25.0.7


#### 命令行方式创建



#创建一个master节点
docker run -tid --name master --privileged=true hadoop:latest /usr/sbin/init
#创建热备master_standby节点
docker run -tid --name master_standby --privileged=true hadoop:latest /usr/sbin/init
#创建三个slave
docker run -tid --name slave01 --privileged=true hadoop:latest /usr/sbin/init
docker run -tid --name slave02 --privileged=true hadoop:latest /usr/sbin/init
docker run -tid --name slave03 --privileged=true hadoop:latest /usr/sbin/init


#### 给每台节点配置免密码登陆



ssh-keygen -t rsa
#然后不断会车,最终如下图所示
#每台机器都是如此


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200402095727572.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MjYwNQ==,size_16,color_FFFFFF,t_70)


###### 将各自的公钥传到每台机器authorized\_keys里面


**这里有个小问题:先检查安装了passwd没有,如果没有执行以下命令:**



yum install passwd
#然后设置密码
passwd


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200402103504856.png)



#一台机器的公钥都要弄到自己和其他机器的authorized_keys
#以免以后安装其他东西减少不必要的麻烦
cat id_rsa.pub >> .ssh/authorized_keys


###### 编辑/etc/hosts


**注意:这里的master\_standby可能不允许带下划线,有的机器在hdfs格式化的时候会不合法,所以你配置最后不要带特殊字符**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200402104555308.png)



#将/etc/hosts复制到每台节点
scp /etc/hosts master_standby:/etc/
scp /etc/hosts slave01:/etc/
scp /etc/hosts slave02:/etc/
scp /etc/hosts slave03:/etc/


#### 配置Hadoop



#解压hadoop包
tar -zxvf hadoop-2.8.5.tar.gz


###### 配置环境变量



#配置环境变量
vim ~/.bashrc
#添加以下内容
export HADOOP_HOME=/usr/local/hadoop-2.8.5
export CLASSPATH=.: H A D O O P _ H O M E / l i b : HADOOP\_HOME/lib: HADOOP_HOME/lib:CLASSPATH
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin
export PATH= P A T H : PATH: PATH:HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME= H A D O O P _ H O M E e x p o r t H A D O O P _ C O M M O N _ H O M E = HADOOP\_HOME export HADOOP\_COMMON\_HOME= HADOOP_HOMEexportHADOOP_COMMON_HOME=HADOOP_HOME
export HADOOP_HDFS_HOME= H A D O O P _ H O M E e x p o r t Y A R N _ H O M E = HADOOP\_HOME export YARN\_HOME= HADOOP_HOMEexportYARN_HOME=HADOOP_HOME
export HADOOP_ROOT_LOGGER=INFO,console
export HADOOP_COMMON_LIB_NATIVE_DIR= H A D O O P _ H O M E / l i b / n a t i v e e x p o r t H A D O O P _ O P T S = " − D j a v a . l i b r a r y . p a t h = HADOOP\_HOME/lib/native export HADOOP\_OPTS="-Djava.library.path= HADOOP_HOME/lib/nativeexportHADOOP_OPTS="Djava.library.path=HADOOP_HOME/lib"
#将这个文件拷到其他机器的下面
scp ~/.bashrc 机器名字:~/
#hadoop命令验证一下


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200402105641627.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3MjYwNQ==,size_16,color_FFFFFF,t_70)


###### 配置文件


**hdfs-site.xml**



dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2 dfs.namenode.rpc-address.mycluster.nn1 master:9000 dfs.namenode.http-address.mycluster.nn1 master:50070 dfs.namenode.rpc-address.mycluster.nn2 master_standby:9000 dfs.namenode.http-address.mycluster.nn2 master_standby:50070 dfs.namenode.shared.edits.dir qjournal://slave01:8485;slave02:8485;slave03:8485/mycluster dfs.journalnode.edits.dir /usr/local/hadoop-2.8.5/journaldata dfs.ha.automatic-failover.enabled true dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000

**core-site.xml**



fs.defaultFS hdfs://mycluster hadoop.tmp.dir /usr/local/hadoop-2.8.5/tmp ha.zookeeper.quorum zoo1:2181,zoo2:2181,zoo3:2181

**yarn-site.xml**



yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id mycluster
<!-- Rm's name-->
yarn.resourcemanager.ha.rm-ids rm1,rm2
<!-- RM1's address-->
yarn.resourcemanager.hostname.rm1 master yarn.resourcemanager.hostname.rm2 master\_standby
<!-- zookeeper cluster address-->
yarn.resourcemanager.zk-address zoo1:2181,zoo2:2181,zoo3:2181
<!-- mapreduce-->
yarn.nodemanager.aux-services mapreduce\_shuffle
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>master:8001</value>
</property>
<property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>master_standby:8001</value>
</property>
<!-- RM1 -->
yarn.resourcemanager.scheduler.address.rm1 master:8030 yarn.resourcemanager.resource-tracker.address.rm1 master:8031 yarn.resourcemanager.address.rm1 master:8032 yarn.resourcemanager.admin.address.rm1 master:8033 yarn.resourcemanager.scheduler.address.rm2 master\_standby:8030 yarn.resourcemanager.resource-tracker.address.rm2 master\_standby:8031 yarn.resourcemanager.address.rm2 master\_standby:8032 yarn.resourcemanager.admin.address.rm2

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

lue>master_standby:8031


yarn.resourcemanager.address.rm2
master_standby:8032


yarn.resourcemanager.admin.address.rm2

[外链图片转存中…(img-Ku0RdnWy-1714401611941)]
[外链图片转存中…(img-OQbtvzY6-1714401611941)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐