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,我是沒有替換也能正常執行,可換可不換。
下載地址:

https://download.csdn.net/download/a_bang/10769552

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的安裝路徑即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章