1. 程式人生 > >hadoop開發環境搭建

hadoop開發環境搭建

作業系統 :Ubuntu 15.04
開發工具 : Eclipse 4.4
hadoop版本:hadoop 2.6.1

  1. 安裝hadoop
    1.將hadoop的壓縮包解壓,推薦在home/使用者名稱/下,用usr/lib的話,會出現許可權問題,導致eclipse連線不上的情況出現,這裡選擇在home/使用者名稱/下建立

    這裡寫圖片描述
    2.解壓完成後就需要配置環境變量了
    在命令列中輸入sudo gedit /etc/environment開啟環境變數
    輸入如下內容
    HADOOP_HOME=/home/pengchen/hadoop
    並在path的末尾,新增上之前解壓的hadoop地址
    /home/pengchen/hadoop/bin:/home/pengchen/hadoop/sbin
    最後在命令列中輸入source /etc/environment使配置生效
    3.配置SSH無密碼登陸
    當然先安裝ssh
    於命令列輸入sudo apt-get install ssh ,安裝完成後就是配置了
    配置無密碼登陸本機:
    在當前使用者目錄下即/home/使用者名稱/下新建隱藏檔案.ssh,輸入命令:
    mkdir .ssh
    接下來,輸入命令:
    ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
    這個命令會在.ssh資料夾下建立兩個檔案id_dsa及id_dsa.pub,這是一 對私鑰和公鑰,然後把id_dsa.pub(公鑰)追加到授權的key裡面去,輸入命令:
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    驗證ssh已安裝成功及無密碼登陸本機,輸入命令:
    ssh -version
    顯示結果:
    Bad escape character ‘rsion’.
    這樣顯示代表ssh已經安裝成功。
    登陸ssh,輸入命令:
    ssh localhost
    第一次登陸可能會詢問是否繼續連結,輸入yes即可,以後登陸直接登進去。

顯示結果:

Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-15-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

287 packages can be updated.
0 updates are security updates.

Last login: Tue Oct 27 22:52:04 2015 from localhost

4.安裝JDK
先去官網下載JDK,linux用
之後再usr/lib下新建一個資料夾,不建也行,直接將JDK解壓到usr/lib下即可
之後就是配置環境變量了,和hadoop的環境變數一樣

JAVA_HOME=/usr/lib/java_1.8.0/jdk1.8.0_65 解壓位置
/usr/lib/java_1.8.0/jdk1.8.0_65/bin,在path後輸入
最後輸入 source /etc/environment使配置生效

5.配置linux的jdk,輸入以下命令,會讓選用哪個jdk,選擇即將在編譯外掛中使用的jdk,一定要選對,否則後面可能跑不起來,注,下面的命令只針對當前使用者,切換後別的使用者就會失效

                              #安裝目錄           #jdk中的java目錄
update-alternatives --install /usr/bin/java java /usr/java/bin/java 300
# update-alternatives --install /usr/bin/java java /usr/java/bin/javac 300 # sudo update-alternatives --config java

6.配置hadoop
1.單機模式,不需要任何配置,即可馬上執行
2.偽分佈模式
在使用者目錄下新建一個hadoop_tmp資料夾,用來存放之後的一些執行資訊,下面出現的目錄都可以按照需要修改,不過得保證該目錄存在

修改core-site.xml


<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    <final>true</final>
  </property>

  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/pengchen/hadoop_tmp</value>
  </property>
</configuration>

修改hdfs-site.xml:


<configuration>
        <property>
      <name>dfs.namenode.name.dir</name>
      <value>/home/pengchen/hadoop/dfs/namenode</value>
      <final>true</final>
    </property>      
     <property>
       <name>dfs.datanode.data.dir</name>
       <value>/home/pengchen/hadoop/dfs/datanode</value>
      <final>true</final>
    </property>
    <property>
      <name>dfs.http.address</name>
      <value>localhost:50070</value>
       <description>
         The address and the base port where the dfs namenode web ui will listen on.
If the port is 0 then the server will start on a free port.
      </description>
    </property>
    <property>
      <name>dfs.replication</name>
      <value>1</value>
    </property>
    <property>
      <name>dfs.permissions</name>
      <value>false</value>
    </property>
</configuration>

修改mapred-site.xml


<configuration>
        <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
    </property>
    <property>
      <name>mapred.job.tracker</name>
      <value>hdfs://localhost:9001</value>
    </property>
        <property>  
          <name>mapred.system.dir</name>  
          <value>file:/home/pengchen/hadoop/mapred/system</value>  
          <final>true</final>  
        </property>  

        <property>  
          <name>mapred.local.dir</name>  
          <value>file:/home/pengchen/hadoop/mapred/local</value>  
          <final>true</final>  
        </property> 
</configuration>

修改yarn-site.xml:


<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>shuffle service that needs to be set for Map Reduce to run</description>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>localhost</value>
    <description>hostname of Resource Manager</description>
  </property>
</configuration>

7.以上步驟完成後,就是啟動hadoop了
cd到hadoop的安裝目錄下
首先是格式化hadoop

./bin/hdfs namenode -format

等待格式化完成後,啟動

./sbin/start-all.sh

等待命令列輸入完成後,輸入jps,如果出現下面的顯示,就代表執行成功了

pengchen@ubuntu:~/hadoop$ jps
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar 
3403 NodeManager
3433 Jps
3123 SecondaryNameNode
2920 DataNode
2801 NameNode
3278 ResourceManager

7.web登陸
在hadoop啟動狀態下,於瀏覽器輸入localhost:50070即可登入web介面
這裡寫圖片描述

  1. 編譯hadoop用eclipse外掛
    1.首先毫無疑問是安裝eclipse,於命令列輸入
umake ide eclipse

第一次可能會提示安裝umake,按照提示安裝即可,之後,再輸入一遍上面的指令,速度可能很慢,耐心等待即可,安裝地址會再輸入指令後顯示出來,不滿意可以修改

2.安裝完成後,開啟eclipse,並新建一個專案,將之前下載的eclipse外掛的原始碼拖到該專案下
這裡寫圖片描述
3.開啟src/contrib下的build-contrib.xml輸入以下內容,涉及到目錄的請按照自己的安裝目錄填寫,版本資訊一樣,一定要填對,否則編譯的東西可能不能用,不同的環境可能造成外掛出現問題,務必保證環境一致

 <property name="jdk.home" value="/usr/lib/java_1.8.0/jdk1.8.0_65" />
        <property name="hadoop.version" value="2.6.1" />
        <property name="jackson.version" value="1.9.13" />
        <property name="hadoop.home" value="/home/pengchen/hadoop" />
        <property name="eclipse.version" value="4.4" />
        <property name="eclipse.home" value="/home/pengchen/tools/ide/eclipse" />
        <property name="root" value="${basedir}" />
        <property file="${root}/build.properties" />
        <property name="name" value="${ant.project.name}" />
        <property name="src.dir" location="${root}/src" />
        <property name="build.contrib.dir" location="${root}/build/contrib" />
        <property name="build.dir" location="${build.contrib.dir}/${name}" />
        <property name="build.classes" location="${build.dir}/classes" />
        <property name="javac.deprecation" value="off" />
        <property name="javac.debug" value="on" />
        <property name="build.encoding" value="UTF-8" /> 

新增完成後,選到build.xml檔案,選run as ant file,等待完成

完成後將外掛放在eclipse安裝目錄的plugin資料夾下,重啟eclipse,如果成功載入外掛,就會在介面上顯示一個小像圖,如下圖,如果沒成功,就跳轉到eclipse安裝目錄用eclipse -clean啟動一下試試,如果還不行,就刪除eclipse安裝目錄下的configuration/org.eclipse.update資料夾試試
這裡寫圖片描述

成功後接下來是配置,選擇windows/preference,選擇hadoop選項,將之前的安裝目錄填上即可
這裡寫圖片描述

選擇新建專案-map/reduce project,之後hadoop外掛會自行把hadoop下的庫都導進去,之後,應該會在projectExplorer中看到多出一個DFS LOCATION選項,這裡就是用來配置需要連線的hadoop地址
這裡寫圖片描述
選擇Map/Reduce Locations選項卡,並右鍵點選,新建一個location
會彈出如下對話方塊:
這裡寫圖片描述
填上名字,左邊對應mapred-site.xml中填寫的資訊,右邊對應core-site.xml中填寫的資訊,之後點選確定即可
這樣在dfs location中顯示出連結的資訊,最開始時,如果沒有命令列配置過輸入輸出目錄的話,就是空的,不要在意自行填上輸入輸出資料夾,命令列,或者eclipse都行

這裡寫圖片描述

這樣開發環境就搭建完成了
ps:一些簡單的命令列

1.檢視檔案列表,dir對應目錄
hadoop fs -ls dir
2.從本地上傳至hdfs

hadoop fs -copyFromLocal input/hello.txt /input/hello.txt
3.從hdfs下載至本地

hadoop fs -copyToLocal /input/hello.txt input/hello.copy.txt
4.建立資料夾

hadoop fs -mkdir testDir
5.檢視hdfs檔案列表

hadoop fs -lsr /testDir

6.檢視結果
hadoop fs -cat /resultDir
7.執行jar,目錄對應自己本地環境的目錄,輸入輸出目錄同理
  hadoop jar /usr/local/hadoop2.4.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.0.jar wordcount input output
8.停止hadoop
.sbin/stop-all.sh

注意事項:
1.不要多次輸入格式化命令會導致datanode起不來,解決方法是hadoop安裝目錄下的dfs資料夾下的datanode和namenode資料夾,再次格式化,並啟動hadoop
2.如果在執行程式時發現log4j未打log,解決方法是將hadoop安裝目錄下etc/log4j.properties拖入到對應的專案/src資料夾下即可解決log問題
3.如果出現hadoop顯示無法連線,或者無法顯示問題,可能是對應的編譯外掛的環境與執行環境不一致導致的,請換用一致環境,即可解決,自己windows編譯的放在linux下死活通不過,換了linux一次ok,所以保持一致環境可以保證成功