自己的电脑上的环境为win10 ,在配置eclipse的环境下遇到了一点小问题,为遇到的问题总结下。
我是在vmware上安装了hadoop集群,一共三台机,一台master,两台slave,其中的linux为centos 6.6 hadoop版本为2.6.4。
具体的环境搭建如下:
1、将hadoop 2.6.1的安装包进行解压,在win10的任意的目录下,相当于配置eclipse的基本的环境,我放在E:\下。
2、需要编译出win10环境下的编译出的hadoop.dll 和winutils等文件放入E:\hadoop-2.6.1\bin(之前觉得E:\hadoop-2.6.1\lib可能也需要更换,后来测试了不更换也没有问题的),由于自己电脑上没有编译环境,于是在网上找了个。链接如下:https://download.csdn.net/download/sinat_32110305/9703571
3、将下载好的hadoop.dll 和winutils等文件放入E:\hadoop-2.6.1\bin中,会发现增加了好多的文件,另外特别注意:将hadoop.dll文件也同时放到C:\Windows\System32下一份,之前也网上找了不少,都没有说到这个问题,一直没运行成功。后来改了下就可以了。
4、接下来开始修改环境变量,分别修改如下:
HADOOP_HOME=E:\hadoop-2.6.1
在path下增加一个 %HADOOP_HOME%\bin%HADOOP_HOME%\sbin
注意:hadoop是基于java环境的,之前安装过java ,不过java_home是安装在Program Files这个文件下的,而hadoop是识别空格的,所以可能会报错,关于这个网上一般有两种解决办法,我是直接重新安装了一个jdk使得路径下没有空格(主要是之前用的jdk1.7,刚好也打算换个1.8,体验下新特性)
5、至此需要配置的环境已经完成了,打开我们久违的eclipse,需要导入操作hdfs的jar包,分别是hadoop-2.6.4\share\hadoop\hdfs的hadoop-hdfs-2.6.4.jar,不过该jar又依赖于hadoop-2.6.4\share\hadoop\hdfs\lib包,为了方便就全部导入了,还需要hadoop-2.6.4\share\hadoop\common下的hadoop-common-2.6.4.jar同时该包也需要导入hadoop-2.6.4\share\hadoop\common\lib下的jar一样全部导入。由于jar比较多,我把这些全部打成了一个hdfsjar库,以此来和其它的类进行区分。
6、然后编写一个测试用例HdfsClientDemo。
import java.net.URI;
import java.net.URISyntaxException;
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 HdfsClientDemo {
FileSystem fs =null;
@Before
public void init() throws IOException, InterruptedException, URISyntaxException{
Configuration conf = new Configuration();
//拿到一个文件操作客户端实例
fs =FileSystem.get(new URI("hdfs://master:9000"),conf,"root");
}
@Test 把win10上的文件上传到linux上的hadoop上
public void testUpload() throws IllegalArgumentException, IOException{
fs.copyFromLocalFile(new Path("E:/abc.log"), new Path("/abc.log.copy"));
fs.close();
}
@Test 从hadoop上进行下载
public void testDownload() throws IllegalArgumentException, IOException{
fs.copyToLocalFile(new Path("/abc.log.copy"), new Path("D:/"));
fs.close();
}
}
有几个需要注意的地方:
1、需要在E盘下创建一个abc.log的文件
2、fs =FileSystem.get(new URI("hdfs://master:9000"),conf,"root");
这行代码最为重要,第一个参数会让你的文件是上传到hadoop上的hdfs中的,而不是上传在本地的
(我的namenode的主机名叫master ,地址是192.168.153.11所以这样配置的,另外还要在 win10的hosts文件中增加一个配置 192.168.153.11 master 不然会报不能识别master的问题。
第二个参数没什么要说的,第三个参数会让你以root用户去操作namenode,我是用root安装的,所 以给的root 没有该参数eclipse会拿到win10上的用户,这样会报没有权限,因为linux上根本没有这 个用户。
后记:这就是我在运行过程中遇到的一些问题和解决的办法,虽然没有什么技术含量,不过也让我走了不 少弯路,不过只有搭建好了环境才能进行下一步的操作,努力总不会白费。