win10操作虛擬機器中hadoop IntelliJ IDEA直接執行程式碼(不需要打jar包)
IntelliJ IDEA 2018.2.3 (Ultimate Edition)+Maven
VMware中CentOS6.5
Hadoop2.7.1
上課的時候老師使用的是Eclipse編譯器,使用了 eclipse-hadoop的外掛。可以直接在eclipse裡執行,省去了先生成jar再發送的虛擬機器中執行的過程。
由於編譯器IDEA沒有這種外掛所以自己在網上找了一些帖子,對編譯器進行配置,達到的效果是可以直接在IDEA中執行MapperReducer等程式碼並檢視程式碼報錯,但是不可以看到hdfs上的資料夾結構(可以在裡瀏覽器使用虛擬機器ip50070埠檢視),也不可以檢視檔案內容,只是免去了一直生成jar包的繁瑣過程
如果大家有可以在idea中視覺化檔案結構的方法或者其他補充歡迎在下面留言
下面介紹一下操作流程和我遇到的錯誤:
操作流程
下載對應的Hadoop包
在win10環境變數中新增hadoop包所在的路徑(winutils.exe一定要在,其他不確定必不必要)
環境變數怎麼找?開啟windows的設定然後搜尋環境變數,之後在高階設定中開啟就可以看到了。
找到之後,在使用者或者系統環境變數中新增HOME_HADOOP(名字可以自己起)
然後在Path中新增%HADOOP_HOME%\bin
注意這裡\bin是因為我的winutils.exe和hadoop.dll檔案在hadoop所在路徑的\bin目錄下。這個路徑要能找到winutils.exe和hadoop.dll檔案就可以了。
然後把hadoop.dll檔案複製到C:\Windows\System32下(需要管理員許可權),然後重啟電腦,因為修改了環境變數要給系統一個重新認識自己的過程。
在Maven專案的POM檔案中新增hadoop和junit的dependencies如下
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version >4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>2.7.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-common</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
之後直接在IDEA執行Driver裡的main方法就可以啦。
這是我的一個簡單例子。
個人理解是需要為IDEA指明hadoop呼叫的地方,它只要找得到就可以在win下執行hadoop,再在程式碼中指明虛擬機器中hadoop的ip地址就可以正常操作了。
常見錯誤
1.沒有列印日誌檔案直接結束執行
方法:在專案properties包下新增log4j.properties
下面是我的log4j.properties裡的內容
###\u8BBE\u7F6E ###
log4j.rootLogger = info,stdout
###\u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
2.空指標異常
估計是環境變數或者系統裡的hadoop.dll沒有被識別到。確認hadoop.dll在C:\Windows\System32下並且環境變數裡的路徑可以找到windows本機hadoop的路徑之後重啟電腦