实验环境
VMware + Ubuntu 16.04
Hadoop环境部署
简介
本实验使用Hadoop环境采用Docker来搭建的,采用开源项目hadoop-cluster-docker,总共有三个结点,下面来一段百度百科的摘要:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
[站外图片上传中……(1)]
安装步骤
Ubuntu系统安装过程就不演示了,下面从安装后开始操作。
- 修改软件源
因为在国内访问Ubuntu的官方源特别慢,这里我推荐大家使用清华大学开源镜像,打开链接后按照帮助修改即可。 - 安装Docker
使用清华大学开源镜像中的Docker进行安装,打开后按照帮助操作即可。 - 将当前用户加入Docker用户组
sudo usermod -aG docker $USER
$USER表示当前用户名,例如,当前用户是hadoop,则把$USER替换成hadoop即可;然后注销,再次登录即可方便使用Docker了;
- 创建Hadoop网络
docker network create --driver=bridge hadoop
- 下载Docker镜像
docker pull kiwenlau/hadoop:1.0
- 从GitHub下载hadoop-cluster-docker项目代码
git clone https://github.com/kiwenlau/hadoop-cluster-docker
- 添加9000端口映射
cd hadoop-cluster-docker
vim start-container.sh
将第10行改为如下代码
sudo docker run -itd \
--net=hadoop \
-p 9000:9000 \
-p 50070:50070 \
-p 8088:8088 \
--name hadoop-master \
--hostname hadoop-master \
kiwenlau/hadoop:1.0 &> /dev/null
因为我们后续要调用HDFS的API,默认端口为9000,所以要将容器中的9000端口暴露出来。
- 运行容器
./start-container.sh
- 运行结果
start hadoop-master container...
start hadoop-slave1 container...
start hadoop-slave2 container...
root@hadoop-master:~#
启动了3个容器,1个master, 2个slave
运行后就进入了hadoop-master容器的/root目录
- 启动hadoop
./start-hadoop.sh
- 运行wordcount测试
./run-wordcount.sh
编程实践
实际操作过程可以查看此篇博客。此处只写了如何在本机调用容器中的接口。
- 引入Java API
重新打开一个终端,执行如下命令:
wget https://github.com/kiwenlau/compile-hadoop/releases/download/2.7.2/hadoop-2.7.2.tar.gz
tar -xzvf hadoop-2.7.2.tar.gz
使用Eclipse编写HDFS的程序时,引入当前下载Hadoop的Java API即可。
- 代码配置
在编写Java代码时,首先会创建一个Configuration对象,调用该对象的set方法,设置fs.defaultFS为hdfs://localhost:9000,localhost为本机地址,如果部署在其他机器上,将localhost改为那台机器的ip地址即可,下面是代码
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
问题总结
在Ubuntu上使用Eclipse编写代码调用Hadoop API遇到的坑
- 加载jar包时,一定要将common和hdfs的lib目录下的所有jar包都加载进去。
- 若遇到log4j这个包提示的错误,试试下面的解决办法。
在src目录下新建一个log4j.properties文件,写入:
log4j.rootLogger = off