前面介绍了Hadoop的原理、安装、运行和客户端命令,这一节我会演示hadoop的java api去实现hadoop的命令,由于存在跨平台操作问题,这里我会介绍我的心路历程。
1. win eclipes开发准备
1.1 准备好jar包
解压hadoop-2.9.0.tar.gz, 通过前面的连载可以知道,hadoop的所有jar包放在share/hadoop目录下,本节演示的是hadoop中hdfs的api实现hdfs shell命令,有用的jar包:
首先是share/hadoop/common目录下的hadoop-common-2.9.0.jar和share/hadoop/common/lib下的所有common jar包的依赖jar包
其次是share/hadoop/hdfs下的hadoop-hdfs-2.9.0.jar和share/hadoop/hdfs/lib下的所有hdfs jar包的依赖jar包
1.2 新建hadoop project并添加相关库文件
hadoop所有的组件依赖common包,先添加common包
添加common包的所有依赖jar包
添加hdfs jar包
添加hdfs依赖的jar包
完成jar包的添加,并提交生成java库,这里大致浏览一下依赖了那些包,其中有zookeeper,这意味着再调用zookeeper api的时候不用再单独去导zk的包了。还有junit包是用于测试的,也不用再导了
2. 上传文件到linux hadoop hdfs中
2.1 尝试写一段代码上传windows代码到linux hadoop hdfs
运行后报错
可以看出环境变量HADOOP_HOME和环境变量Path中的hadoop bin并未设置,在windowns环境变量中添加HADOOP_HOME,在Path中添加hadoop/bin的路径后,重新运行testUpload依然报错:java.lang.RuntimeException: java.io.FileNotFoundException: Could not locate Hadoop executable: D:\vmshare\hadoop-2.9.0\bin\winutils.exe
只是这次是发现没有winutils.exe
原因是:bin和lib下需要一些当前windows版本下用VC++编译出来的winutil.exe工具和windows库文件,这样就太麻烦了。
由于我们开的大数据环境一般是基于linux的数据,程序也运行在linux中,所以把java运行环境更改的linux中去,这样需要在eclipse中把源程序export成jar文件,再放到linux jre中运行即可。
2.2 上传linux中的文件到linux hadoop hdfs
2.2.1 开发环境
目前市面上的教程都是在windows下用eclipse+maven搞开发,虽然java是一个平台无关的语言,但是从1中我还是发现了2个问题:
一是运行时需要winutil.exe需要自己在windows编译
二是windows和linux的路径表述是不同的
为了一次性永久解决这样的跨平台问题,我使用了带桌面的centos7中安装eclipse
使用中你会发现没有hadoop小模块的api程序都需要导不同的jar包,且又会有很多依赖,同一个项目下的package可能会导同样的包,这样就需要使用maven包管理工具。
因此请参考我的简文://www.greatytc.com/p/662a8291e0e3 在centos7中搭建eclipse+maven3.5开发环境