1. 程式人生 > >Spark入門實戰系列--2.Spark編譯與部署(中)--Hadoop編譯安裝

Spark入門實戰系列--2.Spark編譯與部署(中)--Hadoop編譯安裝

二進制包 1.10 不能 mapr 修復 att 機器 mave end

【註】該系列文章以及使用到安裝包/測試數據 能夠在《[傾情大奉送–Spark入門實戰系列] (http://blog.csdn.net/yirenboy/article/details/47291765)》獲取

1 編譯Hadooop

1.1 搭建好開發環境

1.1.1 安裝並設置maven

1.下載maven安裝包。建議安裝3.0以上版本號,本次安裝選擇的是maven3.0.5的二進制包,下載地址例如以下
http://mirror.bit.edu.cn/apache/maven/maven-3/
技術分享

2.使用ssh工具把maven包上傳到/home/hadoop/upload文件夾
技術分享

3.解壓縮apache-maven-3.0.5-bin.tar.gz包

$tar -zxvf apache-maven-3.0.5-bin.tar.gz

技術分享

4.把apache-maven-3.0.5文件夾移到/usr/local文件夾下

$sudo mv apache-maven-3.0.5 /usr/local

技術分享

5.在/etc/profile配置文件裏增加例如以下設置

export PATH=$JAVA_HOME/bin:/usr/local/apache-maven-3.0.5/bin:$PATH

技術分享

6.編輯/etc/profile文件並驗證配置是否成功:

$source /etc/profile
$mvn
-version

技術分享

1.1.2 以root用戶使用yum安裝svn

#yum install svn

技術分享

技術分享

1.1.3 以root用戶使用yum安裝autoconf automake libtool cmake

#yum install autoconf automake libtool cmake

技術分享

技術分享

1.1.4 以root用戶使用yum安裝ncurses-devel

#yum install ncurses-devel

技術分享

1.1.5 以root用戶使用yum安裝openssl-devel

#yum install openssl-devel

技術分享

技術分享

1.1.6 以root用戶使用yum安裝gcc**

#yum install gcc*

技術分享

技術分享

1.1.7 安裝並設置protobuf

註:該程序包須要在gcc安裝完成後才幹安裝。否則提示無法找到gcc編譯器。
1.下載protobuf安裝包
下載鏈接為: https://code.google.com/p/protobuf/downloads/list
技術分享

2.使用ssh工具把protobuf-2.5.0.tar.gz包上傳到/home/hadoop/Downloads文件夾
技術分享

3.解壓安裝包

$tar -zxvf protobuf-2.5.0.tar.gz

技術分享

技術分享

4.把protobuf-2.5.0文件夾轉移到/usr/local文件夾下

$sudo mv protobuf-2.5.0 /usr/local

技術分享

5.進行文件夾執行命令
進入文件夾以root用戶執行例如以下命令:

#./configure
#make
#make check
#make install

技術分享

技術分享

6.驗證是否成功安裝
執行成功之後,通過例如以下方式來驗證是否成功安裝

#protoc

技術分享

1.2 編譯Hadoop

1.2.1 下載Hadoop源碼 Release2.2.0

通過SVN獲取Hadoop2.2.0源碼。在/home/hadoop/Downloads文件夾下命令:

$svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0

獲取時間較長,大小約75.3M
技術分享

1.2.2 編譯Hadoop源碼

:) 因為hadoop2.2.0在svn中pom.xml有點問題,會造成編譯中出錯。可先參考3.2修復該問題。在Hadoop源碼的根文件夾執行例如以下命令:
$mvn package -Pdist,native -DskipTests –Dtar
(註意:這行命令須要手工輸入,假設復制執行會報異常!)
技術分享

耗費的時間較長。總共花費了32分鐘。在編譯過程須要聯網,從網絡中下載所須要的資料。
技術分享

技術分享

1.2.3 驗證編譯是否成功

到 hadoop-dist/target/hadoop-2.2.0/lib/native 文件夾中查看libhadoop.so.1.0.0屬性:

$file ./libhadoop.so.1.0.0

該文件為ELF 64-bit LSB則表示文件成功編譯為64位
技術分享

在hadoop-dist/target文件夾中已經打包好了hadoop-2.2.0.tar.gz,該文件作為Hadoop2.X 64位安裝包。
技術分享

2 安裝Hadoop

2.1 配置準備

2.1.1 上傳並解壓Hadoop安裝包

1.在Apache站點上提供Hadoop2.X安裝包僅僅支持32位操作系統安裝,在64位server安裝會出現4.1的錯誤異常。我們使用上一步驟編譯好的hadoop-2.2.0.tar.gz文件作為安裝包(也能夠從網上下載native文件夾或者打包好的64位hadoop安裝包),使用” Spark編譯與部署(上)”中1. 3.1介紹的工具上傳到/home/hadoop/upload 文件夾下
技術分享

2.在主節點上解壓縮

$cd /home/hadoop/upload/
$tar -xzf hadoop-2.2.0.tar.gz

技術分享

3.把hadoop-2.2.0文件夾移到/app/hadoop文件夾下

$ mv hadoop-2.2.0 /app/hadoop
$ls /app/hadoop

技術分享

2.1.2 在Hadoop文件夾下創建子文件夾

hadoop用戶在/app/hadoop/hadoop-2.2.0文件夾下創建tmp、name和data文件夾

$cd /app/hadoop/hadoop-2.2.0/
$mkdir tmp
$mkdir name
$mkdir data
$ll

技術分享

2.1.3 配置hadoop-env.sh

1.打開配置文件hadoop-env.sh

$cd /app/hadoop/hadoop-2.2.0/etc/hadoop
$sudo vi hadoop-env.sh

技術分享

2.增加配置內容,設置JAVA_HOME和PATH路徑

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55
export PATH=$PATH:/app/hadoop/hadoop-2.2.0/bin

技術分享

3.編譯配置文件hadoop-env.sh,並確認生效

$source hadoop-env.sh
$hadoop version

技術分享

2.1.4 配置yarn-env.sh

1.在/app/hadoop/hadoop-2.2.0/etc/hadoop打開配置文件yarn-env.sh

$cd /app/hadoop/hadoop-2.2.0/etc/hadoop
$sudo vi yarn-env.sh

技術分享

2.增加配置內容,設置JAVA_HOME路徑

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

技術分享

3.編譯配置文件yarn-env.sh,並確認生效

$source yarn-env.sh

技術分享

2.1.5 配置core-site.xml

1.使用例如以下命令打開core-site.xml配置文件

$sudo vi core-site.xml

技術分享

2.在配置文件裏,依照例如以下內容進行配置

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://hadoop1:9000</value>
  </property>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/app/hadoop/hadoop-2.2.0/tmp</value>
    <description>Abase for other temporary directories.</description>
  </property>
  <property>
    <name>hadoop.proxyuser.hduser.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.hduser.groups</name>
    <value>*</value>
  </property>
</configuration>

技術分享

2.1.6 配置hdfs-site.xml

1.使用例如以下命令打開hdfs-site.xml配置文件

$sudo vi hdfs-site.xml

技術分享

2.在配置文件裏,依照例如以下內容進行配置

<configuration>
  <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>hadoop1:9001</value>
  </property>
  <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/app/hadoop/hadoop-2.2.0/name</value>
  </property>
  <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/app/hadoop/hadoop-2.2.0/data</value>
  </property>
  <property>
   <name>dfs.replication</name>
   <value>2</value>
  </property>
  <property>
   <name>dfs.webhdfs.enabled</name>
   <value>true</value>
  </property>
</configuration>

技術分享

2.1.7 配置mapred-site.xml

1.默認情況下不存在mapred-site.xml文件,能夠從模板拷貝一份

$cp mapred-site.xml.template mapred-site.xml

技術分享

2.使用例如以下命令打開mapred-site.xml配置文件

$sudo vi mapred-site.xml

技術分享

3.在配置文件裏,依照例如以下內容進行配置

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop1:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop1:19888</value>
  </property>
</configuration>

技術分享

2.1.8 配置yarn-site.xml

1.使用例如以下命令打開yarn-site.xml配置文件

$sudo vi yarn-site.xml

技術分享

2.在配置文件裏。依照例如以下內容進行配置

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>hadoop1:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop1:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop1:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop1:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop1:8088</value>
  </property>
</configuration>

技術分享

2.1.9 配置Slaves文件

使用$sudo vi slaves打開從節點配置文件,在文件裏增加

hadoop1
hadoop2
hadoop3

技術分享

2.1.10 向各節點分發Hadoop程序

1.確認hadoop2和hadoop3節點/app/hadoop所屬組和用戶均為hadoop,然後進入hadoop1機器/app/hadoop文件夾,使用例如以下命令把hadoop文件夾拷貝到hadoop2和hadoop3機器

$cd /app/hadoop
$scp -r hadoop-2.2.0 hadoop@hadoop2:/app/hadoop/
$scp -r hadoop-2.2.0 hadoop@hadoop3:/app/hadoop/

技術分享

技術分享

2.在從節點查看是否復制成功

技術分享

2.2 啟動部署

2.2.1 格式化NameNode

$cd /app/hadoop/hadoop-2.2.0/
$./bin/hdfs namenode -format

技術分享

技術分享

2.2.2 啟動HDFS

$cd /app/hadoop/hadoop-2.2.0/sbin
$./start-dfs.sh

技術分享

假設server操作系統為32位時,出現故障3.1異常,能夠參考解決

2.2.3 驗證HDFS啟動

此時在hadoop1上面執行的進程有:NameNode、SecondaryNameNode和DataNode
技術分享

hadoop2和hadoop3上面執行的進程有:NameNode和DataNode
技術分享

2.2.4 啟動YARN

$cd /app/hadoop/hadoop-2.2.0/sbin 
$./start-yarn.sh

技術分享

2.2.5 驗證YARN啟動

此時在hadoop1上執行的進程有:NameNode、SecondaryNameNode、DataNode、NodeManager和ResourceManager
技術分享

hadoop2和hadoop3上面執行的進程有:NameNode、DataNode和NodeManager
技術分享

技術分享

3 問題解決

3.1 CentOS 64bit安裝Hadoop2.2.0中出現文件編譯位數異常

在安裝hadoop2.2.0過程中出現例如以下異常:Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
技術分享

通過分析是因為lib/native文件夾中有些文件是在32位編譯,無法適應CentOS 64位環境造成
技術分享

有兩種辦法解決:

  • 又一次編譯hadoop,然後又一次部署
  • 臨時辦法是改動配置,忽略有問題的文件

技術分享

3.2 編譯Hadoop2.2.0出現代碼異常

眼下的2.2.0 的Source Code 壓縮包解壓出來的code有個bug 須要patch後才幹編譯。否則編譯hadoop-auth 會提示以下錯誤:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:
[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[88,11] error: cannot access AbstractLifeCycle
[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found
[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[96,29] error: cannot access LifeCycle
[ERROR] class file for org.mortbay.component.LifeCycle not found

技術分享

直接改動hadoop-common-project/hadoop-auth/pom.xml。事實上就是少了一個包。增加一個dependency:

<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <scope>test</scope>
</dependency>

技術分享

技術分享

3.3 安裝Hadoop2.2.0出現不能找到/etc/hadoop文件夾異常

在安裝過程中啟動HDFS出現例如以下錯誤:

2015-01-14 22:55:16,076 WARN  [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable]
Error: Cannot find configuration directory: /etc/hadoop
Error: Cannot find configuration directory: /etc/hadoop

技術分享

127.0.0.1 localhost
改為
192.168.0.61 localhost
技術分享

重新啟動機器就可以

Spark入門實戰系列--2.Spark編譯與部署(中)--Hadoop編譯安裝