Hadoop三:Hadoop Java API初探(完結(jié))

前面介紹了Hadoop的原理、安裝、運(yùn)行和客戶端命令,這一節(jié)我會演示hadoop的java api去實(shí)現(xiàn)hadoop的命令,由于存在跨平臺操作問題,這里我會介紹我的心路歷程。

1. win eclipes開發(fā)準(zhǔn)備

1.1 準(zhǔn)備好jar包

解壓hadoop-2.9.0.tar.gz, 通過前面的連載可以知道,hadoop的所有jar包放在share/hadoop目錄下,本節(jié)演示的是hadoop中hdfs的api實(shí)現(xiàn)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并添加相關(guān)庫文件

新建hadoop工程

hadoop所有的組件依賴common包,先添加common包

添加common jar包

添加common包的所有依賴jar包

添加common jar的依賴jar包

添加hdfs jar包

添加hadoop-hdfs jar包

添加hdfs依賴的jar包

添加hdfs jar依賴的jar包

完成jar包的添加,并提交生成java庫,這里大致瀏覽一下依賴了那些包,其中有zookeeper,這意味著再調(diào)用zookeeper api的時候不用再單獨(dú)去導(dǎo)zk的包了。還有junit包是用于測試的,也不用再導(dǎo)了

提交后點(diǎn)finish完成hadoop hdfs api庫的建立


2. 上傳文件到linux hadoop hdfs中

2.1 嘗試寫一段代碼上傳windows代碼到linux hadoop hdfs

第一個例子

運(yùn)行后報錯

部分報錯信息

可以看出環(huán)境變量HADOOP_HOME和環(huán)境變量Path中的hadoop bin并未設(shè)置,在windowns環(huán)境變量中添加HADOOP_HOME,在Path中添加hadoop/bin的路徑后,重新運(yùn)行testUpload依然報錯:java.lang.RuntimeException: java.io.FileNotFoundException: Could not locate Hadoop executable: D:\vmshare\hadoop-2.9.0\bin\winutils.exe

只是這次是發(fā)現(xiàn)沒有winutils.exe

原因是:bin和lib下需要一些當(dāng)前windows版本下用VC++編譯出來的winutil.exe工具和windows庫文件,這樣就太麻煩了。


由于我們開的大數(shù)據(jù)環(huán)境一般是基于linux的數(shù)據(jù),程序也運(yùn)行在linux中,所以把java運(yùn)行環(huán)境更改的linux中去,這樣需要在eclipse中把源程序export成jar文件,再放到linux jre中運(yùn)行即可。


2.2 上傳linux中的文件到linux hadoop hdfs

2.2.1 開發(fā)環(huán)境

目前市面上的教程都是在windows下用eclipse+maven搞開發(fā),雖然java是一個平臺無關(guān)的語言,但是從1中我還是發(fā)現(xiàn)了2個問題:

一是運(yùn)行時需要winutil.exe需要自己在windows編譯

二是windows和linux的路徑表述是不同的

為了一次性永久解決這樣的跨平臺問題,我使用了帶桌面的centos7中安裝eclipse

使用中你會發(fā)現(xiàn)沒有hadoop小模塊的api程序都需要導(dǎo)不同的jar包,且又會有很多依賴,同一個項(xiàng)目下的package可能會導(dǎo)同樣的包,這樣就需要使用maven包管理工具。

因此請參考我的簡文:http://www.itdecent.cn/p/662a8291e0e3? ? ?在centos7中搭建eclipse+maven3.5開發(fā)環(huán)境


2.2.2 java代碼

測試代碼


2.2.3 maven的pom.xml

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容