因为种种缘由,掘金等第三方平台博客再也不保证可以同步更新,欢迎移步 GitHub:github.com/kingcos/Per…。谢谢!java
Hadoop with Dockergit
Date | Notes | Hadoop | Other |
---|---|---|---|
2017-03-27 | 首次提交 | 2.7.2 | Docker CE, Intellij IDEA 2016.3 |
自从学习 iOS/Swift 以来,就没有太多时间分配给 Java 专业课,毕竟我不是个三心二用还能样样学好的人。不过做为大三的专业课,分布式计算技术仍是有去上课的,毕竟不能最后挂科吧 :]github
曾有人说,「开发一个项目,至少有 50% 时间在配置环境」。确实,在折腾了三周的课时以后,我才按照老师给的详细步骤配置好 Hadoop 的环境。尽管如此,因为种种缘由,班里仍有不少同窗尚未配置好 Hadoop 的环境,致使课程一直停滞。在偶然中,我想到了 Docker,Docker 这个词我至少在半年前已经据说(固然,恕我孤陋寡闻,Docker 早在 13 年即发行),但一直没有去了解和使用。时至今日,我对 Docker 的了解也十分少,简单的来讲,Docker 是一种容器(Container)管理工具,经过 Docker 咱们能够配置可移植的环境,方便发布。Docker 基于 Linux,但也提供了 macOS 和 Windows 桌面版,方便在咱们的本地机器测试、使用。web
虽然本文是一个小白向的文章,但下载和安装的过程也不会在本文涉及。一是官方网站必然提供了相应的教程,纯粹的翻译毫无心义;二是下载和安装可能随着后续更新发生略微的区别,而本文只着眼于配置 Hadoop 集群环境的搭建。docker
不过因为我的对 Hadoop 和 Docker 的了解甚少,若有错误,但愿指出,我会学习、改正。shell
Docker 自己就是基于 Linux 的,因此首先以个人一台服务器作实验。虽然最后跑 wordcount 已经因为内存不足而崩掉,可是以前的过程仍是能够参考的。apache
ssh root@[Your IP Address]
复制代码
apt-get update
复制代码
sudo apt-get install docker.io
复制代码
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
复制代码
./start-hadoop.sh
复制代码
./run-wordcount.sh
复制代码
./run-wordcount.sh
复制代码
其实最开始就没有打算放出 Windows 版,倒不是由于以为 Windows 很差,而是目前手头没有 Windows 的电脑,借用同窗的电脑也不是很方便。若是须要安装 Docker,须要 CPU 支持虚拟化,且安装了 64 位 Windows 10 Pro/企业版(须要开启 Hyper-V)。其余版本的 Windows 能够安装 Docker Toolbox。vim
咱们的 Hadoop 集群已经在容器里安装完成,并且已经能够运行。相比本身一个个创建虚拟机,这样的确十分方便、快捷。为了便于开发调试,接下来就须要在 Intellij IDEA 下配置开发环境,包管理工具选择 Gradle。Maven 配合 Eclipse 的配置网上已经有不少了,须要的同窗能够自行搜索。bash
docker ps
(注意是在本机,而不是在容器运行该命令)列出全部容器,查看容器映射的端口。cd hadoop-cluster-docker
vim start-container.sh
复制代码
-p 9000:9000 \
复制代码
该步非必须。为了方便在网页端管理,所以开启 Web 端,默认关闭。服务器
which hadoop
cd /usr/local/hadoop/etc/hadoop/
ls
vi core-site.xml
复制代码
cp /etc/vim/vimrc ~/.vimrc
修复。<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
复制代码
compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.7.2'
compile group: 'org.apache.hadoop', name: 'hadoop-hdfs', version: '2.7.2'
复制代码
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);
}
}
复制代码