目录

  • Docker中Hadoop集群搭建
    • 环境
    • 网络设置
    • 安装docker
    • 安装OpenSSH免密登录
    • Ansible安装
    • 软件环境配置
    • 配置hadoop运行所需配置文件
    • Hadoop 启动
    • 问题

Docker中Hadoop集群搭建

环境

1、操作系统: CentOS 7 64位

网络设置

hostname IP
cluster-master 172.20.0.2
cluster-slave1 172.20.0.3
cluster-slave2 172.20.0.4
cluster-slave3 172.20.0.5

安装docker

安装后拉去Centos镜像

$ docker pull  daocloud.io/library/centos:7

按照集群的架构,创建容器时需要设置固定IP,所以先要在docker使用如下命令创建固定IP的子网

$ docker network create --subnet=172.20.0.0/16 netgroup

docker的子网创建完成之后就可以创建固定IP的容器了

#cluster-master
#-p 设置docker映射到容器的端口 后续查看web管理页面使用
docker run -d --privileged -ti --name cluster-master -h cluster-master -p 18088:18088 -p 9870:9870 --net netgroup --ip 172.20.0.2 daocloud.io/library/centos:7 /usr/sbin/init#cluster-slaves
docker run -d --privileged -ti  --name cluster-slave1 -h cluster-slave1 --net netgroup --ip 172.20.0.3 daocloud.io/library/centos:7 /usr/sbin/initdocker run -d --privileged -ti  --name cluster-slave2 -h cluster-slave2 --net netgroup --ip 172.20.0.4 daocloud.io/library/centos:7 /usr/sbin/initdocker run -d --privileged -ti --name cluster-slave3 -h cluster-slave3 --net netgroup --ip 172.20.0.5 daocloud.io/library/centos:7 /usr/sbin/init

启动控制台并进入docker容器中:

docker exec -it cluster-master /bin/bash

安装OpenSSH免密登录

1、cluster-master安装:

#cluster-master需要修改配置文件(特殊)
#cluster-master#安装openssh
$ yum -y install openssh openssh-server openssh-clients$ systemctl start sshd
####ssh自动接受新的公钥
####master设置ssh登录自动添加kown_hosts
$ vi /etc/ssh/ssh_config
#将原来的StrictHostKeyChecking ask
#设置StrictHostKeyChecking为no
#保存
$  systemctl restart sshd

2、分别对slaves安装OpenSSH

#安装openssh
$ yum -y install openssh openssh-server openssh-clients$ systemctl start sshd

3、cluster-master公钥分发

在master机上执行ssh-keygen -t rsa并一路回车,完成之后会生成~/.ssh目录,目录下有id_rsa(私钥文件)和id_rsa.pub(公钥文件),再将id_rsa.pub重定向到文件authorized_keys

$ ssh-keygen -t rsa
#一路回车$ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

需要先设置slave服务器密码

$ passwd
root

文件生成之后用scp将公钥文件分发到集群slave主机

$ ssh root@cluster-slave1 'mkdir ~/.ssh'
$ scp ~/.ssh/authorized_keys root@cluster-slave1:~/.ssh
$ ssh root@cluster-slave2 'mkdir ~/.ssh'
$ scp ~/.ssh/authorized_keys root@cluster-slave2:~/.ssh
$ ssh root@cluster-slave3 'mkdir ~/.ssh'
$ scp ~/.ssh/authorized_keys root@cluster-slave3:~/.ssh

分发完成之后测试是否已经可以免输入密码登录

[root@cluster-master /]# ssh root@cluster-slave1
[root@cluster-slave1 ~]# exit
logout

Ansible安装

[root@cluster-master /]# yum -y install epel-release
[root@cluster-master /]# yum -y install ansible
#这样的话ansible会被安装到/etc/ansible目录下

此时我们再去编辑ansible的hosts文件

$ vi /etc/ansible/hosts
[cluster]
cluster-master
cluster-slave1
cluster-slave2
cluster-slave3[master]
cluster-master[slaves]
cluster-slave1
cluster-slave2
cluster-slave3
  • 配置docker容器hosts

由于/etc/hosts文件在容器启动时被重写,直接修改内容在容器重启后不能保留,为了让容器在重启之后获取集群hosts,使用了一种启动容器后重写hosts的方法。
需要在~/.bashrc中追加以下指令

$ vi ~/.bashrc
:>/etc/hosts
cat >>/etc/hosts<<EOF
127.0.0.1   localhost
172.20.0.2  cluster-master
172.20.0.3  cluster-slave1
172.20.0.4  cluster-slave2
172.20.0.5  cluster-slave3
EOF
$ source ~/.bashrc

使配置文件生效,可以看到/etc/hosts文件已经被改为需要的内容

[root@cluster-master ansible]# cat /etc/hosts
127.0.0.1   localhost
172.20.0.2  cluster-master
172.20.0.3  cluster-slave1
172.20.0.4  cluster-slave2
172.20.0.5  cluster-slave3
  • 用ansible分发.bashrc至集群slave下
ansible cluster -m copy -a "src=~/.bashrc dest=~/"

软件环境配置

下载JDK1.8并解压缩至/opt 目录下

$ docker cp jdk-8u211-linux-x64.tar.gz  cluster-master:/opt/
$ tar -zxvf jdk-8u211-linux-x64.tar.gz

下载hadoop3 到/opt目录下,解压安装包,并创建链接文件

$ wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz --no-check-certificate$ tar -xzvf hadoop-3.3.2.tar.gz
$ ln -s hadoop-3.3.2 hadoop
  • 配置java和hadoop环境变量

编辑 ~/.bashrc文件

# hadoop
export HADOOP_HOME=/opt/hadoop-3.3.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH#java
export JAVA_HOME=/opt/jdk8
export PATH=$JAVA_HOME/bin:$PATH

使文件生效:

$ source ~/.bashrc

配置hadoop运行所需配置文件

cd $HADOOP_HOME/etc/hadoop/

1、修改core-site.xml

<configuration><property><name>hadoop.tmp.dir</name><value>/home/hadoop/tmp</value><description>A base for other temporary directories.</description></property><!-- file system properties --><property><name>fs.default.name</name><value>hdfs://cluster-master:9000</value></property><property><name>fs.trash.interval</name><value>4320</value></property>
</configuration>

2、修改hdfs-site.xml

<configuration>
<property><name>dfs.namenode.name.dir</name><value>/home/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/home/hadoop/data</value></property><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.permissions.superusergroup</name><value>staff</value></property><property><name>dfs.permissions.enabled</name><value>false</value></property></configuration>

3、修改mapred-site.xml

<configuration>
<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>
<property><name>mapred.job.tracker</name><value>cluster-master:9001</value>
</property>
<property><name>mapreduce.jobtracker.http.address</name><value>cluster-master:50030</value>
</property>
<property><name>mapreduce.jobhisotry.address</name><value>cluster-master:10020</value>
</property>
<property><name>mapreduce.jobhistory.webapp.address</name><value>cluster-master:19888</value>
</property>
<property><name>mapreduce.jobhistory.done-dir</name><value>/jobhistory/done</value>
</property>
<property><name>mapreduce.intermediate-done-dir</name><value>/jobhisotry/done_intermediate</value>
</property>
<property><name>mapreduce.job.ubertask.enable</name><value>true</value>
</property>
</configuration>

4、yarn-site.xml

<configuration><property><name>yarn.resourcemanager.hostname</name><value>cluster-master</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property><name>yarn.resourcemanager.address</name><value>cluster-master:18040</value></property>
<property><name>yarn.resourcemanager.scheduler.address</name><value>cluster-master:18030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>cluster-master:18025</value></property> <property><name>yarn.resourcemanager.admin.address</name><value>cluster-master:18141</value></property>
<property><name>yarn.resourcemanager.webapp.address</name><value>cluster-master:18088</value></property>
<property><name>yarn.log-aggregation-enable</name><value>true</value></property>
<property><name>yarn.log-aggregation.retain-seconds</name><value>86400</value></property>
<property><name>yarn.log-aggregation.retain-check-interval-seconds</name><value>86400</value></property>
<property><name>yarn.nodemanager.remote-app-log-dir</name><value>/tmp/logs</value></property>
<property><name>yarn.nodemanager.remote-app-log-dir-suffix</name><value>logs</value></property>
</configuration>
  • 打包hadoop 向slaves分发
$ cd /opt
$ tar -cvf hadoop-dis.tar hadoop hadoop-3.3.2
  • 使用ansible-playbook分发.bashrc和hadoop-dis.tar至slave主机
---
- hosts: clustertasks:- name: copy .bashrc to slavescopy: src=~/.bashrc dest=~/notify:- exec source- name: copy hadoop-dis.tar to slavesunarchive: src=/opt/hadoop-dis.tar dest=/opthandlers:- name: exec sourceshell: source ~/.bashrc

将以上yaml保存为hadoop-dis.yaml,并执行

ansible-playbook hadoop-dis.yaml

hadoop-dis.tar会自动解压到slave主机的/opt目录下

  • 主节点修改环境变量
$ vi /opt/hadoop-3.3.2/etc/hadoop/hadoop-env.sh
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

Hadoop 启动

  • 主节点格式化namenode(第一次运行执行)
$ hdfs --daemon namenode -format

如果看到storage format success等字样,即可格式化成功

  • 从节点初始化(第一次运行执行)
$ hdfs --daemon start datanode
  • 启动集群
$ start-all.sh

启动后可使用jps命令查看是否启动成功

#主节点
9697 NodeManager
8947 NameNode
9076 DataNode
9573 ResourceManager
9318 SecondaryNameNode
10041 Jps
#从节点
944 DataNode
1020 Jps
  • 验证服务
守护进程 网页界面 笔记
名称节点 http://nn_host:port/ 默认 HTTP 端口为 9870。
资源管理器 http://rm_host:port/ 默认 HTTP 端口为 18088。
MapReduce JobHistory 服务器 http://jhs_host:port/ 默认 HTTP 端口为 19888。

关闭服务

停止集群
$ stop-all.sh

问题

问题1:ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation

$ vi /opt/hadoop-3.3.2/etc/hadoop/hadoop-env.sh
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

**问题2:**启动hadoop 集群是,发现slave节点的datanode没有启动

查了资料发现是因为我在启动集群前,执行了这个命令:

hadoop namenode -format

这个指令会重新格式化namenode的信息,这样可能会导致master节点的VERSION信息跟datanode的信息对不上,导致指令无法同步。

第一步:停止集群:
> stop-all.sh第二步:删除logs文件夹和tmp文件夹
> rm -rf /opt/hadoop-3.3.2/logs
> rm -rf /tmp/logs第三步:查看VERSION文件是否存在,如果存在的话,把它删除:
> cd /home/hadoop/tmp/dfs/name/current
> cat VERSION
如果有VERSION文件,直接删除:
> rm -f VERSION第四步:所有slave节点删除VERSION文件
> cd /home/hadoop/data/current
> cat VERSION
> rm -f VERSION

【大数据实战】Docker中Hadoop集群搭建相关推荐

  1. 好程序员大数据笔记之:Hadoop集群搭建

    好程序员大数据笔记之:Hadoop集群搭建在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天 ...

  2. 全国大学生大数据技能竞赛(Hadoop集群搭建)

    系列文章 全国大学生大数据技能竞赛(数仓部署) 全国大学生大数据技能竞赛(Spark on Yarn安装) 文章目录 系列文章 前言 资料链接 用VMware练习配置前准备三台虚拟机并修改网络为桥接 ...

  3. 大数据讲课笔记3.3 Hadoop集群配置

    文章目录 零.学习目标 一.导入新课 二.新课讲解 (一)配置Hadoop集群 1.在master虚拟机上配置hadoop (1)编辑Hadoop环境配置文件 - hadoop-env.sh (2)编 ...

  4. 自学大数据第四天~hadoop集群的搭建(一)

    Hadoop集群安装配置 当hadoop采用分布式模式部署和运行时,存储采用分布式文件系统HDFS,此时HDFS名称节点和数据节点位于不同的机器上; 数据就可以分布到多个节点,不同的数据节点上的数据计 ...

  5. 基于docker的hadoop集群搭建

    最近想学习如何使用hdfs来存储文件,在网上学习了一下,明确了HDFS(Hadoop Distribute File System 分布式存储).mapReduce(分布式计算).YARN(Yet A ...

  6. 大数据Hadoop集群搭建

    大数据Hadoop集群搭建 一.环境 服务器配置: CPU型号:Intel® Xeon® CPU E5-2620 v4 @ 2.10GHz CPU核数:16 内存:64GB 操作系统 版本:CentO ...

  7. 大数据 -- Hadoop集群搭建

    Hadoop集群搭建 1.修改/etc/hosts文件 在每台linux机器上,sudo vim /etc/hosts 编写hosts文件.将主机名和ip地址的映射填写进去.编辑完后,结果如下: 2. ...

  8. 在Linux中进行hadoop集群搭建

    在公网IP为x.x.x.x.y.y.y.y和z.z.z.z并装有Centos8的服务器上进行hadoop集群搭建,都安装hadoop-3.1.3和server-jre-8u202-linux-x64. ...

  9. 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...

    作者 | chen_01_c 责编 | Carol 来源 | CSDN 博客 封图 | CSDN付费下载于视觉中国 hadoop介绍 Hadoop 是 Lucene 创始人 Doug Cutting, ...

最新文章

  1. oracle 11g数据库以管理员身份登录不上
  2. 1041. Robot Bounded In Circle
  3. poj 2240 Arbitrage(bellman-ford spfa 判断正环)
  4. 【Spring第十篇】Spring整合Mybatis
  5. hihoCoder #1174:拓扑排序#183;一
  6. DIV+CSS布局 - 弹性盒子布局
  7. Rainmeter天气不能更新、win地图不能检测定位
  8. [数字疾控]-从业人员健康体检管理系统
  9. 花生壳诊断“域名指向IP与服务器不一致”的解决方法
  10. Facebook账号被封了怎么办?这份账号申诉指南请收好
  11. 教你怎样查询快递查询单号并保存物流信息
  12. HTML5在线电影网站设计 黑色的影视传媒公司网站(6页) HTML+CSS+JavaScript
  13. 朴素贝叶斯模型、SVM模型笔记
  14. XML完整教程和什么是XML语言
  15. 互联网线下活动一周整理 11月23日—29日
  16. 关于SAP十个常见问题集锦
  17. VNC安装常见问题与处理
  18. iphone的分辨率总结2014以前的设备
  19. javah提示找不到类文件
  20. 【不定积分】不定积分知识点总结

热门文章

  1. python定义向量_python中向量怎么表示
  2. python 怎么用gpu运算,用GPU计算python
  3. zookeeper分布式应用程序协调服务
  4. CentOS7或Ubuntu 配置阿里云yum源
  5. 重磅发布 | 中汽协携手零数科技发布汽车数据可信存证区块链平台
  6. 偶尔写写诗,让生活多点灵性
  7. 什么是用户画像?金融行业大数据用户画像实践 [
  8. C语言printf函数详解
  9. Java之获取时间/日期/时间戳及格式化
  10. 星球年度汇总-爬虫获取基金持仓明细(附GUI可拿来就用}