Skip to main content

Command Palette

Search for a command to run...

基于Docker实现Hadoop完全分布式部署

Updated
3 min read

阅读本文需要一定的 Linux 基础,不适合新手,仅提供思路

系统部署

参考

Docker 下载:https://docs.docker.com/desktop/windows/install/

Docker 安装:https://www.runoob.com/docker/windows-docker-install.html

部署 Centos7

Docker 国内源

参考源

  • 中科大
  • 网易源
  • 阿里镜像(建议)

    进入管理控制台 --> 产品与服务 --> 弹性计算 --> 容器镜像服务 --> 镜像加速器,复制自己的专属加速器地址。

添加

# Linux
vi /etc/docker/daemon.json

# MAC
请前往 Preferences -> Daemon 处设置

重启 docker

# Linux
systemctl restart docker

镜像部署

拉取

docker pull centos:centos7

检查本地镜像


docker images

启动

docker run -itd --name 「DIY Image Name」 centos:centos7 /bin/Bash

查看启动信息

docker ps

管理容器

docker start/kill/stop/rm 「CONTAINER ID」

进入容器

docker exec -it 「CONTAINER ID」 /bin/Bash



制作开发环境镜像

Centos 国内源

参考

基础工具安装

vim

Linux 最好用的文本编辑器

yum -y install vim

net-tools

Linux 网络管理工具

yum -y install net-tools

openssh-clients/openssh-server

ssh 客户端

yum -y install openssh-clients && yum -y install openssh-server

openssl

通过 SSL 保障,保证安全通信的软件库包

yum -y install openssl

wget

远程下载工具

yum -y install wget

开发工具安装

Mysql 安装

请参考我的另一篇文章:

《Hadoop 高并发集群 与 开发环境部署》第 5.1 小节

Java 安装

请参考我的另一篇文章:

《Hadoop 高并发集群 与 开发环境部署》第 5.2 小节

Python3 安装

请参考我的另一篇文章:

《Hadoop 高并发集群 与 开发环境部署》第 5.3 小节

Scala 安装

请参考我的另一篇文章:

Hadoop 高并发集群 与 开发环境部署》第 5.4 小节

制作镜像

打包镜像

docker commit -a "「Image Name」" -m "「Comment」"  「CONTAINER ID」 「Image Name」:v「version」



开始生产集群

统一口径

创建网络

docker network create --subnet=192.168.10.1/24 「Net Name」

统一 IP 和 Host

NameNode

docker run -itd --name nn \
--privileged=true \
--hostname nn \
--net hadoop --ip 192.168.10.10 \
--add-host dn1:192.168.10.11 \
--add-host dn2:192.168.10.12 \
-d 「Image Name」(记得带版本号)\
/usr/sbin/init

DataNode 1

docker run -itd --name dn1 \
--privileged=true \
--hostname dn1 \
--net hadoop --ip 192.168.10.11 \
--add-host nn:192.168.10.10 \
--add-host dn2:192.168.10.12 \
-d 「Image Name」(记得带版本号)\
/usr/sbin/init

DataNode 2

docker run -itd --name dn2 \
--privileged=true \
--hostname dn2 \
--net hadoop --ip 192.168.10.12 \
--add-host dn1:192.168.10.11 \
--add-host nn:192.168.10.10 \
-d 「Image Name」(记得带版本号)\
/usr/sbin/init

SSH 配置

请参考我的另一篇文章:

《Hadoop 高并发集群 与 开发环境部署》第 6.2.2 小节



Hadoop 完全分布式部署

准备

下载地址

wget https://dlcdn.apache.org/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz

准备目录

mkdir /usr/hadoop \
&& mkdir /usr/hadoop/tmp \
&& mkdir /usr/hadoop/hdfs/name \
&& mkdir /usr/hadoop/hdfs/data

环境变量请解压后自行配置

变量名请遵守:HADOOP_HOME



修改配置

地址:$HADOOP_HOME/etc/hadoop/

core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://nn:9000</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/hadoop/hdfs/data</value>
    </property>
</configuration>

mapred-site.xml

复制 mapred-site.xml.template 为 mapred-site.xml

cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
  <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
   <property>
      <name>mapred.job.tracker</name>
      <value>http://nn:9001</value>
  </property>
</configuration>

yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>nn</value>
    </property>
</configuration>

masters

地址: $HADOOP_HOME/etc/hadoop/masters

内容:

nn

slaves

地址: $HADOOP_HOME/etc/hadoop/slaves

修改内容:

「datanode HOST 1」

「datanode HOST 2」

............

「datanode HOST n」

Hadoop-env.sh

前往该文件中添加 JAVA_HOME 避免出现识别不到 JDK 的情况



同步

使用 scp 命令同步所有变动文件

参考:

scp -r /usr/dt dn1:/usr/

检验

初始化 HDFS

hadoop namenode -format

启动 Hadoop

sh $HADOOP_HOME/sbin/start-all.sh

查看集群状态

hadoop dfsadmin -report

More from this blog

【两万字总结】Spark 部署与入门

Spark 介绍 核心概念 Spark 是 UC Berkeley AMP lab 开发的一个集群计算的框架,类似于 Hadoop,但有很多的区别。 最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入 HDFS,更适用于需要迭代的 MapReduce 算法场景中,可以获得更好的性能提升。 例如一次排序测试中,对 100TB 数据进行排序,Spark 比 Hadoop 快三倍,并且只需要十分之一的机器。 Spark 集群目前最大的可以达到 8000 节点,处理的数据达到 PB 级别...

Oct 20, 202115 min read

【引言】浙大机器学习课程记录

机器学习的定义 第一种定义 ARTHUR SAMUEL对Machine learning 的定义 Machine Learning is Fields of study that gives computers the ability to learn without being explicitly programmed 机器学习是这样的领域,它赋予计算机学习的能力,(这种学历能力)不是通过显著式编程获得的 显著式编程 提前人为指定规律的编程方式 非显著式编程 让计算机自己总结规律的...

Oct 19, 20212 min read

TensorFlow 2 Keras实现线性回归

介绍 线性回归是入门机器学习必学的算法,其也是最基础的算法之一。 接下来,我们以线性回归为例,使用 TensorFlow 2 提供的 API 和 Eager Execution 机制对其进行实现。 线性回归是一种较为简单,但十分重要的机器学习方法,它也是神经网络的基础。 如下所示,线性回归要解决的问题就是如何找到最理想的直线去拟合散点样本。 对于一个线性回归问题,一般来讲有 2 种解决方法,分别是: 最小二乘法 代数求解 矩阵求解 梯度下降法。 本次,我们将使用梯度下降方法来解决线性回...

Oct 12, 20211 min read

TensorFlow 2 基础概念语法与常用模块

TensorFlow 2 简介 TensorFlow 是由谷歌在 2015 年 11 月发布的深度学习开源工具,我们可以用它来快速构建深度神经网络,并训练深度学习模型。运用 TensorFlow 及其他开源框架的主要目的,就是为我们提供一个更利于搭建深度学习网络的模块工具箱,使开发时能够简化代码,最终呈现出的模型更加简洁易懂。 2019 年,TensorFlow 推出了 2.0 版本,也意味着 TensorFlow 从 1.x 正式过度到 2.x 时代。根据 TensorFlow 官方 介绍内...

Oct 12, 20213 min read

uiu's log

27 posts

Insist on programming & Love open source