1. 程式人生 > >intellij idea本地配置連線遠端hadoop叢集開發

intellij idea本地配置連線遠端hadoop叢集開發

自己研究大資料一年多了,雖然技術上有很多提高,但是有個問題就是一直沒法使用本地聯調叢集,每次都是寫完打包放到叢集執行。最近發現可以本地直接連線遠端聯調,大大提高了開發效率,分享一下。

1、下載hadoop,配置到本地環境變數中,路徑中最好不要有空格或下劃線
環境變數:
Snipaste_2018-11-07_09-59-20.png-26.4kB

2、修改專案的pom.xml

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>${hadoop.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>${hadoop.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>${hadoop.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
    <version>${hadoop.version}</version>
</dependency>
<dependency>
    <groupId>commons-cli</groupId>
    <artifactId>commons-cli</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>${hadoop.version}</version>
</dependency>

3、把叢集中core-site.xml和hdfs-site.xml兩個檔案拿下來,放到專案中resources目錄下

4、設定Intellij idea中執行變數:
Snipaste_2018-11-07_10-01-54.png-71.2kB
這裡的working directory設定為hadoop的安裝地址。至於上面的Program arguments,這是設定執行時傳遞的引數,可以傳值,直接編寫到程式中也可以。
這個地方遇到了坑,網上都是設定的單機IP地址加埠,比如hdfs://192.168.xx.xx:9000/...這種樣式的,我也一直測試但都是報不能連線9000埠。還一直以為自己哪裡配錯了。但是後來想明白了,既然是連線操作hdfs,那應該是8020埠,換了之後果然連通了。**如果這裡用的是IP地址加埠,那resources中core-site.xml中也要使用同樣的。**我這裡使用的是叢集名稱的方式,resources中core-site.xml中也要使用同樣的方式。如果兩個不一樣,會報錯誤。不建議使用IP的方式,假如配置使用的IP在啟動的時候是standby角色的namenode,執行的時候會報不能寫的錯誤,所以最好是使用hdfs://叢集服務名

這種方式。

5、這個時候執行會報錯:Unable to load native-hadoop library for your platform… using builtin-Java classes where applicable,需要下載hadoop.dll,然後替換掉本地hadoop中bin目錄下的檔案。至於winutils.exe,我是沒有替換也能正常執行,可換可不換。
下載地址:

6、執行繼續報錯
org.apache.hadoop.security.AccessControlException: Permission denied: user=ZhOu, access=WRITE, inode="/app":root:supergroup:drwxr-xr-x

,很明顯是使用者許可權問題,網上找了一下,有很多解決方案,有興趣的可以研究研究。這裡提供一個簡單的方案,就是不校驗許可權:修改hdfs-site.xml,本地和叢集都要修改,然後叢集還要重啟namenode。

<property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>

7、做到這裡,就可以正常執行了。不需要每次打包放到線上執行了。Spark專案也是一樣的做法,只是把working directory設定為spark的安裝路徑即可。