Hadoop編譯安裝指南(centos 7)
1 hadoop編譯
1.1 爲什麼需要編譯?
我們都知道hadoop使用JAVA語言來編寫的,而官方提供的是.java文件,我們需要編譯成能夠被JVM可執行的.class文件。才能夠再JVM上運行,才能夠正常安裝。
1.2我們需要準備哪些工具?
1.2.1 protobuf
1.2.1.1 protobuf簡介
protobuf是由google公司貢獻的開源序列化框架,類似與XML和JSON數據表示語言。而protobuf最大的特點就是基於二進制,因此效率會比XML高得多。而hadoop中的RPC實現是基於protobuf的,所以我們在編譯時需要預先安裝protobuf。
protobuf開源網址爲:https://github.com/google/protobuf
protobuf各個版本的zip包:https://github.com/google/protobuf/releases
1.2.1.2 protobuf編譯安裝
根據上述提供的網址下載protobuf的預編譯包。本次下載的版本是protobuf-2.5.0.tar.gz(在文件夾中提供,由於官網不支持2.5.0版本的下載,而hadoop2.7.3版本要求必須爲2.5.0)。
具體安裝步驟如下:
1、安裝protobuf所需的依賴包
yuminstall autoconf automake libtool curl make g++ gcc-c++ unzip
2、將下載的protobuf包放到cenos7服務器中。
3、解壓壓縮包tarzxvf protobuf-2.5.0.tar.gz
4、進入到protobuf目錄cd protobuf-2.5.0
5、從github下載的souce包需要先直行腳本autogen.sh,下載一些相關文件
./ autogen.sh
6、直行編譯安裝
1)./configure
2)make
3)make check
4)sudo make install
5)sudo ldconfig # refresh shared library cache
安裝完成之後,可以使用protoc –version查看版本號。
1.2.2 maven
1.2.2.1 maven簡介
Maven是一個項目管理和綜合工具。Maven提供了開發人員構建一個完整的生命週期框架。開發團隊可以自動完成項目的基礎工具建設,Maven使用標準的目錄結構和默認構建生命週期。
在多個開發團隊環境時,Maven可以設置按標準在非常短的時間裏完成配置工作。由於大部分項目的設置都很簡單,並且可重複使用,Maven讓開發人員的工作更輕鬆,同時創建報表,檢查,構建和測試自動化設置。
概括地說,Maven簡化和標準化項目建設過程。處理編譯,分配,文檔,團隊協作和其他任務的無縫連接。 Maven增加可重用性並負責建立相關的任務。
1.2.2.2 maven安裝
maven的安裝可以直接使用yum install maven命令安裝。
安裝完成之後可以通過mvn–version命令去查看是否正常安裝。
1.3 編譯hadoop
做好上述準備工作之後(自動安裝的maven的時候會安裝jdk和ant,如果手動安裝,請注意安裝這兩個工具),我們就可以去編譯Hadoop了。hadoop編譯需要的各個工具的版本,在BUILDING.txt文件中會有詳細說明。(2.7.3版本中,ProtocolBuffer要求必須爲2.5.0)
首先我們需要從apache官網下載hadoop的源碼包。在此我下載的版本是hadoop-2.7.3-src.tar.gz。
hadoop源碼下載連接:http://hadoop.apache.org/releases.html#Download
具體編譯過程如下:
1、將源碼包上傳到服務器上。
2、解壓文件包tar zxvf hadoop-2.7.3-src.tar.gz
3、進入源碼包cd hadoop-2.7.3-src
4、運行編譯命令mvn package -Pdist -DskipTests –Dtar
經過漫長的等待之後,編譯成功後會顯示以下信息:
從提示信息我們可以看到編譯好的hadoop壓縮包存放的目錄,直接取出使用。大功告成!
2 hadoop安裝(分佈式)
2.1 環境說明
1、系統環境:centos 7
2、java版本:jdk 1.8
3、hadoop版本:2.7.3
2.2 節點配置
Master: 192.168.1.10 (hadoopmaster)
Hadoopslave: 192.168.1.11(hadoopslave1)
Hadoopslave: 192.168.1.12(hadoopslave2)
2.3 安裝步驟
2.3.1 安裝jdk
1、下載安裝包,本次下載的是:jdk-8u111-linux-x64.tar.gz下載地址爲:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2、創建文件夾 mkdir /usr/local/java
3、將安裝包上傳至目錄/usr/local/java
4、解壓安裝包tar zxvf jdk-8u111-linux-x64.tar.gz
5、配置環境變量在/etc/profile文件的末尾添加
JAVA_HOME=/usr/local/java/jdk1.8.0_111
JRE_HOME=/usr/local/java/jdk1.8.0_111/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
PATH=$PATH:$JAVA_HOME/bin
6、讓環境變量及時生效source /etc/profile
7、查看java版本信息 java –version
2.3.2 添加用戶
新建一個hadoop用戶,用於管理和維護hadoop相關的操作。
useradd -m hadoop -s /bin/bash
修改用戶登陸密碼
passwd hadoop
連續兩次輸入密碼
添加用戶完成!
2.3.3 ssh免密登陸
1、切換到hadoop用戶
2、在192.168.1.10機器(master)中執行命令
①cd ~/.ssh (進入用戶目錄下的隱藏文件.ssh,若沒有該目錄,請先執行一次ssh localhost)
②ssh-keygen-t rsa (用rsa生成密鑰)
③cpid_rsa.pub authorized_keys(把公鑰複製一份,並改名爲authorized_keys,這步執行完,應該ssh localhost可以無密碼登錄本機了,可能第一次要密碼)
④scp authorized_keys [email protected]:/home/hadoop/.ssh(把重命名後的公鑰通過ssh提供的遠程複製文件複製到從機slave1上面)
⑤chmod 600authorized_keys (更改公鑰的權限,也需要在從機slave1中執行同樣代碼)
⑥ssh 192.168.1.11(可以遠程無密碼登錄slave1這臺機子了,注意是ssh不是sudo ssh。)
3、如果有其他的子節點,則直行相同的操作
2.3.4 安裝hadoop
1、上傳編譯好的hadoop包,並解壓tar zxvf hadoop-2.7.3.tar.gz
2、修改解壓後的文件夾名稱mv hadoop-2.7.3 hadoop
3、修改文件夾權限chown -R hadoop:hadoop hadoop
4、修改hadoop的JAVA_HOME :vi etc/hadoop/hadoop-env.sh將JAVA_HOME修改爲絕對路徑
5、查看hadoop版本./bin/hadoop version
6、增加hadoop環境變量 vi ~/.bashrc
# Hadoop EnvironmentVariables
exportHADOOP_HOME=/hadoop/hadoop
exportHADOOP_INSTALL=$HADOOP_HOME
exportHADOOP_MAPRED_HOME=$HADOOP_HOME
exportHADOOP_COMMON_HOME=$HADOOP_HOME
exportHADOOP_HDFS_HOME=$HADOOP_HOME
exportYARN_HOME=$HADOOP_HOME
exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
exportPATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
7、使環境變量即時生效source ~/.bashrc
8、測試環境變量是否生效 hadoop verison
2.3.5 配置hadoop集羣
搭建集羣需要修改hadoop/etc/hadoop下面的共五個配置文件,更多高級選項設置,可以參見官網說明。這裏僅設置了一些必要的設置。
1、slave文件
該文件是配置葉子節點。默認文件只有一行localhsot,這裏一行代表一個葉子節點。根據我們的節點配置安排,我們再次配置如下:
2、core-site.xml文件
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.10:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/hadoop/hadoop/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
</configuration>
3、hdfs-site.xml文件
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.1.10:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/hadoop/hadoop/tmp/dfs/data</value>
</property>
</configuration>
4、mapred-site.xml 文件
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.1.10:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.1.10:19888</value>
</property>
</configuration>
5、 yarn-site.xml文件
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.1.10</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
6、將配置好的hadoop拷貝到葉子節點的服務器中
①將文件夾壓縮tar-zcf /hadoop/hadoop.master.tar.gz /hadoop/hadoop
②將壓縮文件拷貝到葉子節點服務器
scphadoop.master.tar.gz [email protected]:/hadoop
scphadoop.master.tar.gz [email protected]:/hadoop
③在葉子節點服務器中解壓文件夾 tar zxvf hadoop.master.tar.gz
④修改文件夾權限chown-R hadoop:hadoop hadoop
⑤設置hadoop環境變量(參考2.3.4 第六點)
7、增加主機名靜態查詢表 vi /etc/hosts所有服務器都需要
192.168.1.10hadoop.master
192.168.1.11 hadoop.slave1
192.168.1.12 hadoop.slave2
8、初始化hdfs:hdfsnamenode –format
2.4 啓動hadoop
經過上述準備我們的hadoop集羣就搭建完成了。接下來我們可以來到mater主服務器來啓動hadoop。
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.shstart historyserver
然後我們可以通過jps命令查看各個服務器的啓動進程。
主服務器(master)下可以看到如下進程:
葉子節點的服務器可以看到如下進程:
我們也可以通過 Web 頁面看到查看 DataNode 和 NameNode 的狀態:
2.5 關閉hadoop集羣
關閉集羣也是在主服務器(master)上執行命令:
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.shstop historyserver