源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

详解从 0 开始使用 Docker 快速搭建 Hadoop 集群环境

  • 时间:2021-06-09 22:02 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:详解从 0 开始使用 Docker 快速搭建 Hadoop 集群环境
Linux Info: [list] [*]Ubuntu 16.10 x64[/*] [/list] Docker 本身就是基于 Linux 的,所以首先以我的一台服务器做实验。虽然最后跑 wordcount 已经由于内存不足而崩掉,但是之前的过程还是可以参考的。 [b]连接服务器[/b] 使用 ssh 命令连接远程服务器。
ssh root@[Your IP Address]
[img]http://img.1sucai.cn/uploads/article/2018010709/20180107090122_0_4545.png[/img] [b]更新软件列表[/b] apt-get update [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090122_1_63807.png[/img] 更新完成。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090123_2_13032.png[/img] [b]安装 Docker[/b]
sudo apt-get install docker.io
[img]http://img.1sucai.cn/uploads/article/2018010709/20180107090123_3_21920.png[/img] 当遇到输入是否继续时,输入「Y/y」继续。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090123_4_92192.png[/img] 安装完成 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090123_4_92192.png[/img] 输入「docker」测试是否安装成功。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090124_6_48605.png[/img] [b]拉取镜像[/b] 镜像,是 Docker 的核心,可以通过从远程拉取镜像即可配置好我们所需要的环境,我们这次需要的是 Hadoop 集群的镜像。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090124_7_68285.png[/img] 在本文中,我们将使用 kiwenlau 的 Hadoop 集群镜像以及其配置。由于我的服务器本身即在国外,因此拉取镜像的速度较快,国内由于众所周知的原因,可以替换为相应的国内源,以加快拉取速度。
sudo docker pull kiwenlau/hadoop:1.0
[b]拉取镜像完成。[/b] [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090125_8_14199.png[/img] [b]克隆仓库[/b] 克隆仓库到当前文件夹(可以自行创建并切换到相应文件夹)。
git clone https://github.com/kiwenlau/hadoop-cluster-docker
[b]克隆仓库完成[/b] [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090126_9_60172.png[/img] 桥接网络
sudo docker network create --driver=bridge hadoop
 
[img]http://img.1sucai.cn/uploads/article/2018010709/20180107090126_10_43264.png[/img] [b]运行容器[/b]
cd hadoop-cluster-docker
./start-container.sh
默认是 1 个主节点,2 个从节点,当然也可以根据性能调整为 N 节点,详见文末参考链接。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090127_11_85300.png[/img] [b]启动 Hadoop[/b]
./start-hadoop.sh
在上一步,我们已经运行容器,即可直接运行 Hadoop。启动时长与机器性能有关,也是难为了我这一台 512 MB 内存的服务器。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090127_12_70771.png[/img] [b]测试 Word Count[/b]
./run-wordcount.sh
Word Count 是一个测试 Hadoop 的 Shell 脚本,即计算文本中的单词个数。不过由于我的服务器内存不够分配无法完成,所以后续以本机进行测试。 [b]网页管理[/b] 我们可以通过网页远程管理 Hadoop: [list=1] [*]Name Node: [Your IP Address]:50070/[/*] [*]Resource Manager: [Your IP Address]:8088/[/*] [/list] [b]macOS[/b] Info: [list=1] [*]macOS 10.12.4 beta (16E191a)[/*] [/list] [b]下载 & 安装[/b] 打开 Docker 官方网站:[url=https://www.docker.com/]https://www.docker.com[/url],选择社区版,并下载、安装。Windows 系统用户可以选择 Windows 版本。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090127_13_48675.png[/img] Docker CE [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090128_14_34260.png[/img] macOS or Windows [b]运行 Docker[/b] 打开 Docker。为了简单,我没有改动配置,如需更改,可以在 Preferences 中修改。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090128_15_52999.png[/img] 我们可以在终端(Terminal)输入「docker」,测试是否安装成功。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090129_16_6885.png[/img] [b]拉取镜像 & 克隆仓库 & 桥接网络 & 运行容器 & 启动 Hadoop[/b] 同 Linux。 [b]测试 Word Count[/b]
./run-wordcount.sh
同 Linux,但这次我们可以运算出结果了。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090129_17_57655.png[/img] Windows 其实最开始就没有打算放出 Windows 版,倒不是因为觉得 Windows 不好,而是目前手头没有 Windows 的电脑,借用同学的电脑也不是很方便。如果需要安装 Docker,需要 CPU 支持虚拟化,且安装了 64 位 Windows 10 Pro/企业版(需要开启 Hyper-V)。其他版本的 Windows 可以安装 Docker Toolbox。 [b]Intellij IDEA[/b] 我们的 Hadoop 集群已经在容器里安装完成,而且已经可以运行。相比自己一个个建立虚拟机,这样的确十分方便、快捷。为了便于开发调试,接下来就需要在 Intellij IDEA 下配置开发环境,包管理工具选择 Gradle。Maven 配合 Eclipse 的配置网上已经有很多了,需要的同学可以自行搜索。 [b]Docker 开启 9000 端口映射[/b] 由于我们使用的是 [url=http://kiwenlau.com/]kiwenlau [/url]的镜像和开源脚本,虽然加快了配置过程,但是也屏蔽了很多细节。比如在其脚本中只默认开启了 50070 和 8088 的端口映射,我们可以通过 docker ps(注意是在本机,而不是在容器运行该命令)列出所有容器,查看容器映射的端口。
cd hadoop-cluster-docker
vim start-container.sh
切换到脚本文件夹,使用 Vim 编辑 start-container.sh。在图中光标处添加以下内容,保存并退出。
-p 9000:9000 
[img]http://img.1sucai.cn/uploads/article/2018010709/20180107090130_18_29140.png[/img] 重启容器,并查看容器状态,如图即为映射成功。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090130_19_6068.png[/img] [b]开启 Web HDFS 管理*[/b] 该步非必须。为了方便在网页端管理,因此开启 Web 端,默认关闭。
which hadoop
cd /usr/local/hadoop/etc/hadoop/
ls

vi core-site.xml
找到 Hadoop 配置文件路径,使用 Vi 编辑,若 Vi 的插入模式(Insert Mode)中,上下左右变成了 ABCD,那么可以使用以下命令即可:[code]cp /etc/vim/vimrc ~/.vimrc [/code]修复。 [img]http://img.1sucai.cn/uploads/article/2018010709/20180107090131_20_54920.png[/img] 添加以下内容。
<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>
[img]http://img.1sucai.cn/uploads/article/2018010709/20180107090131_21_25276.png[/img] [b]启动 Hadoop[/b] 同 Linux。 [b]构建依赖[/b] 使用 Intellij IDEA 新建一个 Gradle 项目,在 Build.gradle 中加入以下依赖(对应容器 Hadoop 版本)。
compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.7.2'
compile group: 'org.apache.hadoop', name: 'hadoop-hdfs', version: '2.7.2'
[b]Demo[/b]
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;

/**
 * Created by kingcos on 25/03/2017.
 */
public class HDFSOperations {

  FileSystem fileSystem;

  @Before
  public void configure() throws Exception {
    Configuration configuration = new Configuration();
    configuration.set("fs.defaultFS", "hdfs://192.168.1.120:9000");
    fileSystem = FileSystem.get(URI.create("hdfs://192.168.1.120:9000"), configuration, "root");
  }

  @Test
  public void listFiles() throws IOException {
    Path path = new Path("/");
    RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(path, true);

    while (iterator.hasNext()) {
      LocatedFileStatus status = iterator.next();
      System.out.println(status.getPath().getName());
    }
  }

  @Test
  public void rm() throws IOException {
    Path path = new Path("/");
    fileSystem.delete(path, true);
  }

  @Test
  public void mkdir() throws IOException {
    Path path = new Path("/demo");
    fileSystem.mkdirs(path);
  }
}

之后便可以通过 IDEA 直接写代码来测试,这里简单写了几个方法。 [b]总结[/b] 在写这篇文章之前,其实我对 Docker 的概念很不了解。但是通过 Learn by do it. 大致知道了其中的概念和原理。我们完全可以构建自己的容器 Dockerfile,来部署生产和开发环境,其强大的可移植性大大缩短配置的过程。 由于个人对 Hadoop 和 Docker 的了解甚少,如有错误,希望指出,我会学习、改正。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部