热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要介绍了详解从0开始使用Docker快速搭建Hadoop集群环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

Linux

Info:

  • Ubuntu 16.10 x64

Docker 本身就是基于 Linux 的,所以首先以我的一台服务器做实验。虽然最后跑 wordcount 已经由于内存不足而崩掉,但是之前的过程还是可以参考的。

连接服务器

使用 ssh 命令连接远程服务器。

ssh root@[Your IP Address]

更新软件列表

apt-get update


更新完成。


安装 Docker

sudo apt-get install docker.io


当遇到输入是否继续时,输入「Y/y」继续。

安装完成

输入「docker」测试是否安装成功。

拉取镜像

镜像,是 Docker 的核心,可以通过从远程拉取镜像即可配置好我们所需要的环境,我们这次需要的是 Hadoop 集群的镜像。

在本文中,我们将使用 kiwenlau 的 Hadoop 集群镜像以及其配置。由于我的服务器本身即在国外,因此拉取镜像的速度较快,国内由于众所周知的原因,可以替换为相应的国内源,以加快拉取速度。

sudo docker pull kiwenlau/hadoop:1.0

拉取镜像完成。


克隆仓库

克隆仓库到当前文件夹(可以自行创建并切换到相应文件夹)。

git clone https://github.com/kiwenlau/hadoop-cluster-docker

克隆仓库完成

桥接网络

sudo docker network create --driver=bridge hadoop
 

运行容器

cd hadoop-cluster-docker
./start-container.sh

默认是 1 个主节点,2 个从节点,当然也可以根据性能调整为 N 节点,详见文末参考链接。

启动 Hadoop

./start-hadoop.sh

在上一步,我们已经运行容器,即可直接运行 Hadoop。启动时长与机器性能有关,也是难为了我这一台 512 MB 内存的服务器。

测试 Word Count

./run-wordcount.sh

Word Count 是一个测试 Hadoop 的 Shell 脚本,即计算文本中的单词个数。不过由于我的服务器内存不够分配无法完成,所以后续以本机进行测试。

网页管理

我们可以通过网页远程管理 Hadoop:

  1. Name Node: [Your IP Address]:50070/
  2. Resource Manager: [Your IP Address]:8088/

macOS

Info:

  1. macOS 10.12.4 beta (16E191a)

下载 & 安装

打开 Docker 官方网站:https://www.docker.com,选择社区版,并下载、安装。Windows 系统用户可以选择 Windows 版本。

Docker CE

macOS or Windows

运行 Docker

打开 Docker。为了简单,我没有改动配置,如需更改,可以在 Preferences 中修改。


我们可以在终端(Terminal)输入「docker」,测试是否安装成功。

拉取镜像 & 克隆仓库 & 桥接网络 & 运行容器 & 启动 Hadoop

同 Linux。

测试 Word Count

./run-wordcount.sh

同 Linux,但这次我们可以运算出结果了。

Windows

其实最开始就没有打算放出 Windows 版,倒不是因为觉得 Windows 不好,而是目前手头没有 Windows 的电脑,借用同学的电脑也不是很方便。如果需要安装 Docker,需要 CPU 支持虚拟化,且安装了 64 位 Windows 10 Pro/企业版(需要开启 Hyper-V)。其他版本的 Windows 可以安装 Docker Toolbox。

Intellij IDEA

我们的 Hadoop 集群已经在容器里安装完成,而且已经可以运行。相比自己一个个建立虚拟机,这样的确十分方便、快捷。为了便于开发调试,接下来就需要在 Intellij IDEA 下配置开发环境,包管理工具选择 Gradle。Maven 配合 Eclipse 的配置网上已经有很多了,需要的同学可以自行搜索。

Docker 开启 9000 端口映射

由于我们使用的是 kiwenlau 的镜像和开源脚本,虽然加快了配置过程,但是也屏蔽了很多细节。比如在其脚本中只默认开启了 50070 和 8088 的端口映射,我们可以通过 docker ps(注意是在本机,而不是在容器运行该命令)列出所有容器,查看容器映射的端口。

cd hadoop-cluster-docker
vim start-container.sh

切换到脚本文件夹,使用 Vim 编辑 start-container.sh。在图中光标处添加以下内容,保存并退出。

-p 9000:9000 \

重启容器,并查看容器状态,如图即为映射成功。

开启 Web HDFS 管理*

该步非必须。为了方便在网页端管理,因此开启 Web 端,默认关闭。

which hadoop
cd /usr/local/hadoop/etc/hadoop/
ls

vi core-site.xml

找到 Hadoop 配置文件路径,使用 Vi 编辑,若 Vi 的插入模式(Insert Mode)中,上下左右变成了 ABCD,那么可以使用以下命令即可:cp /etc/vim/vimrc ~/.vimrc 修复。

添加以下内容。


  dfs.webhdfs.enabled
  true

启动 Hadoop

同 Linux。

构建依赖

使用 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'

Demo

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 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 直接写代码来测试,这里简单写了几个方法。

总结

在写这篇文章之前,其实我对 Docker 的概念很不了解。但是通过 Learn by do it. 大致知道了其中的概念和原理。我们完全可以构建自己的容器 Dockerfile,来部署生产和开发环境,其强大的可移植性大大缩短配置的过程。

由于个人对 Hadoop 和 Docker 的了解甚少,如有错误,希望指出,我会学习、改正。


推荐阅读
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 利用SSH隧道实现外网对局域网机器的安全访问
    本文探讨了一种常见的网络配置问题及其解决方案,即如何在外网环境下安全地访问位于局域网内的计算机。特别介绍了使用SSH反向隧道技术来实现这一目标的具体步骤和注意事项。 ... [详细]
  • 本文将指导您如何在Docker环境中高效地搜索、下载Redis镜像,并通过指定或不指定配置文件的方式启动Redis容器。同时,还将介绍如何使用redis-cli工具连接到您的Redis实例。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • Windows 环境下安装 Git 并连接 GitHub 的详细步骤
    本文详细介绍了如何在 Windows 系统中安装 Git 工具,并通过配置 SSH 密钥实现与 GitHub 的安全连接。包括下载、安装、环境配置及验证连接等关键步骤。 ... [详细]
author-avatar
HK12593
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有