赞
踩
之前基于docker搭建了Hadoop完全分布式架构,现在来试试如何使用.基于docker搭建了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); } }
点击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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。