当前位置:   article > 正文

基于docker的Hadoop完全分布式开发环境使用和配置_基于docker搭建hadoop完全分布式环境的设计与实现

基于docker搭建hadoop完全分布式环境的设计与实现

之前基于docker搭建了Hadoop完全分布式架构,现在来试试如何使用.基于docker搭建了Hadoop完全分布式架构

Hadoop简单介绍

可能有的人目前为止对hadoop还不是太了解,首先进行简单的介绍.大白话,简单来说,hadoop就是个分布式文件系统.要了解的有三部分,
1.hdfs(分布式文件系统),
2.mapreduce(面向大数据并行处理的计算模型、框架和平台),
3.yarn(将资源调度和任务调度分开)
对于hdfs只要熟悉linux命令就行了,代码里有很好的封装,基本上不会再敲命令了.今后绝大部分时间是在学mapreduce,
对于hadoop集群就是一堆服务器(分布式至少是三个),由客户端远程管理,读写数据和编写逻辑代码,客户端只与namenode交互,整个集群由namenode管理,由datanode存储数据和运行逻辑任务,各个datanode向namenode发送心跳.
hadoop1与hadoop2的区别看看下图,现在主要用的都是2
在这里插入图片描述
客户端,namenode, datanode之间的关系
在这里插入图片描述

一.下载开发工具

环境:

ubuntu16.04
JDK
esclipse
hadoop-2.8.3

之前的hadoop是在docker中安装的,现在的开发环境是客户端也就是你自己的本机,我这里是ubuntu:16.04,软件的下载我就不说了,esclipse的下载比较慢,建议不要用浏览器下载,因为一旦中间断了,浏览器就认为下载完了,但是整个软件要350M左右,找个百度云或者用wget,或者curl都行.对于hadoop的文件,只要把docker中的hadoop的安装目录中的share目录赋值下来就行.
这里说说如何从docker中赋值文件.
首先启动docker镜像,

docker cp 容器id:源文件目录 目的文件目录

这里注意,如果按照我之前基于docker安装hadoop的博客来的小伙伴,这里不要用容器名,用docker ps找到你启动的容器的id,如果是直接启动的,则在@后面的就是容器id.

二.配置开发工具

1,JDK的配置
打开当前用户目录下的 .bashrc文件中加入JDK的路径,这里用自己的路径,当然也可以直接写入/etc/profile文件中,这样所有用户都可用.然后执行source /etc/profile
在这里插入图片描述
2.esclipse配置
把下载后的esclipse文件解压后运行esclipse目录中的./esclipse程序,启动esclipse,如果JDK配置无误,这里esclipse会自动导入jdk的,下面说说hadoop的导入,可以用maven导入,比较简单,也可以直接手动导入,我是手动导入的.把刚才从docker中赋值出的文件放在一个目录中命名为hadooplib吧.
在esclipse中创建项目,在项目中右键,Buid Path ->configure build path
在这里插入图片描述
这里我用的java9所以有module这个部分,不要管这里,点击classpath->add library->user library->next->user library
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
点击new, 创建自己的user library,点击add external jars,
1,选择hadoop中share目录下的hdfs 下的hadoop-hdfs-2.8.3.jar和lib目录中的所有jar包,
2,然后导入common目录下的hadoop-common-2.8.3.jar和当前目录下的lib目录中的所有jar包,
然后finish就行.

三.测试用例

首先启动hadoop集群,后面就不用管了,编码在客户端.
代码

package hadoop;

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

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;


public class hello {
	FileSystem fs = null;
	
	@Before
	public void init() throws Exception {
		Configuration conf = new Configuration();
		
		//这里的fs.default.name是docker集群中core-site.xml中的key和value,
		//ip地址也是你自己的,因为docker启动时指定了hostname,所以这里直接用ip就行了
		
		conf.set("fs.default.name", "hdfs://172.17.0.2:9000/");
		fs = FileSystem.get(new URI("hdfs://172.17.0.2:9000/"), conf, "root");
	}
	
	@Test
	public void upload() throws IOException {
		//这里src是你本机的文件,这个文件要存在.
		Path src = new Path("/home/yuan/run.sh");
		Path dst = new Path("hdfs://172.17.0.2:9000/run.sh");
		fs.copyFromLocalFile(src, dst);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

点击upload函数右键,run as -> junit test运行就行,
在本地浏览器172.17.0.2:50070中查看结果,这里用你自己的地址.
在这里插入图片描述

可能出现的错误

1.导包时的错误,这里注意要把包放在classpath中
2.编码在客户端,要上传的文件就在本地不是docker,
3.编码中的URI是java.net.URI;包中的不是hadoop的,
3.org找不到或者,hadoop.fs出现在多个包中,解法同1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/483079
推荐阅读
相关标签
  

闽ICP备14008679号