Hadoop2.7.5環境搭建

csdnmrliu發表於2018-10-09

已編譯好的hadoop2.7.5(支援snappy)的安裝包:

伺服器環境為騰訊雲-Centos6.8,安裝hadoop單機模式,root使用者下安裝

注:hostname千萬不要包含下劃線 單機配置localhost

1. 配置主機名

騰訊雲不建議修改hostname,因騰訊雲伺服器預設hostname帶有下劃線則使用localhost。

 

2. 配置主機名和ip對映關係 hosts

vim /etc/hosts
#註釋127.0.0.1 hostname
ip hostname

3. 關閉防火牆

service iptables stop
chkconfig iptables off

4. 配置SSH免密碼登入

使用 ssh-keygen 命令生成公鑰和私鑰,這裡要注意的是可以對私鑰進行加密保護以增強安全性。

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

上傳到伺服器  

scp -r ~/.ssh/id_dsa.pub $hostname:/root/

目標機器將上傳的公鑰新增到自己的信任列表

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

5. 安裝依賴庫

yum -y install svn ncurses-devel gcc*
yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl-devel

6. 配置maven環境

 

7. 安裝protocolbuf

7.1 下載安裝包

下載地址: https://github.com/google/protobuf/releases/tag/v2.5.0

wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz

7.2 解壓

tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0

7.3 安裝

(1)./configure --prefix=/usr/local/protobuf

(2)make

(3)make check

(4)make install

  2-4步用一個命令代替 make && make check && make install

7.4 設定環境變數

vim /etc/profile

#protoc setting
export PROTOC_HOME=/usr/local/protobuf
export PATH=$PATH:$PROTOC_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PROTOC_HOME/lib

#重新整理環境變數

source /etc/profile

7.5. 軟連結

ln -s /usr/local/protobuf/bin/protoc /usr/bin/protoc

輸入 protoc --version 有下面輸出結果則安裝並配置正確

 

8. 安裝findbugs

8.1 下載安裝包

下載地址:https://sourceforge.net/projects/findbugs/files/findbugs/

wget https://jaist.dl.sourceforge.net/project/findbugs/findbugs/1.3.9/findbugs-1.3.9.tar.gz

8.2 解壓縮

tar -zxvf findbugs-1.3.9.tar.gz -C /usr/local/

8.3 配置環境變數

vim /etc/profile

#findbugs settings

export FINDBUGS_HOME=/usr/local/findbugs-1.3.9

export PATH=$PATH:$FINDBUGS_HOME/bin

#重新整理環境變數

source /etc/profile

輸入findbugs -version,有下面輸出結果則安裝並配置正確。

 

9. 安裝 ant

yum -y install ant
ant -version

10. 編譯安裝snappy

# 用root使用者執行以下命令

10.1 下載安裝包

wget http://pkgs.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.1.tar.gz/8887e3b7253b22a31f5486bca3cbc1c2/snappy-1.1.1.tar.gz

10.2 解壓

tar -zxvf snappy-1.1.1.tar.gz

10.3 安裝

cd snappy-1.1.1/

./configure

make && make install

# 檢視snappy庫檔案

ls -lh /usr/local/lib |grep snappy

 

11. 編譯Hadoop

11.1 下載原始碼包

wget http://archive.apache.org/dist/hadoop/common/hadoop-2.7.5/hadoop-2.7.5-src.tar.gz

11.2 解壓

tar -zxvf hadoop-2.7.5-src.tar.gz

cd hadoop-2.7.5-src/

mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

執行成功後,hadoop-dist/target/hadoop-2.7.5.tar.gz即為新生成的二進位制安裝包。

 

12. 編譯hadoop-snappy(可選,在安裝hadoop後支援snappy庫時進行這一步)

已編譯好的包下載連結:https://pan.baidu.com/s/1-8vTwkIVOrXeL8xOp1O6nA 密碼:5slj

12.1 下載原始碼包

git clone https://github.com/electrum/hadoop-snappy.git

12.2 編譯

mvn package -Dsnappy.prefix=/usr/local

13. 安裝Hadoop

13.1 解壓縮編譯好的hadoop包

tar -zxvf hadoop-2.7.5-snappy.tar.gz -C /usr/local/

13.2 將編譯好的hadoop-snappy動態庫複製到$HADOOP_HOME/lib/native/ 目錄下

(若不是原始碼編譯hadoop支援snappy時,執行這一步操作)

cp /resources/hadoop-snappy/target/hadoop-snappy-0.0.1-SNAPSHOT-tar/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/* /usr/local/hadoop-2.7.5/lib/native/

13.3 配置環境變數

vim /etc/profile
#追加下面配置
#hadoop stand-alone settings
export HADOOP_HOME=/usr/local/hadoop-2.7.5
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin

#重新整理環境變數
source /etc/profile

13.4 配置hadoop(配置檔案在$HADOOP_HOME/etc/hadoop目錄下)

13.4.1 hadoop-env.sh

#配置JAVA_HOME
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/local/jdk1.8.0_131

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native/
export HADOOP_LOG_DIR=/data/hadoop/logs/standalone
export YARN_LOG_DIR=$HADOOP_LOG_DIR
export HADOOP_MAPRED_LOG_DIR=$HADOOP_LOG_DIR

13.4.2 core-site.xml

	<!-- 用來指定hdfs的老大(NameNode)的地址 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://localhost:9000</value>
	</property>
	  <!-- 用來指定Hadoop執行時產生檔案的存放目錄 -->
	<property>
		<name>hadoop.tmp.dir</name>
			<value>/data/hadoop/tmp</value>
	</property>
	<property>
		<name>io.compression.codecs</name>
		<value>org.apache.hadoop.io.compress.GzipCodec,
			   org.apache.hadoop.io.compress.DefaultCodec,
			   org.apache.hadoop.io.compress.BZip2Codec,
			   org.apache.hadoop.io.compress.SnappyCodec
		</value>
	</property>
	<property>
		<name>hadoop.http.staticuser.user</name>
		<value>localhost</value>
	</property>

13.4.3 hdfs-site.xml

	<!-- 指定HDFS儲存資料副本數量 -->
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
	<!-- namenode上儲存hdfs名字空間後設資料 -->
	<property>
		<name>dfs.name.dir</name>
		<value>/data/hadoop/namenode</value>
	</property>
	<!-- datanode上資料塊的物理儲存位置 -->
	<property>
		<name>dfs.data.dir</name>
		<value>/data/hadoop/datanode</value>
	</property>
	<!-- 用於免密登入 -->
	<property>
		<name>dfs.permissions.enabled</name>
		<value>false</value>
	</property>
	<!-- 預設為true,namenode連線datanode時,會進行host解析查詢 -->
	<property>
		<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
		<value>true</value>
	</property>
	<property>
		<name>dfs.namenode.hosts</name>
		<value>localhost</value>
		<description>localhost對應DataNode所在伺服器主機名,可配置多個,用逗號隔開</description>
	</property>

13.4.4 mapred-site.xml

mv mapred-site.xml.template mapred-site.xml

替換配置檔案中的hostname, vi mapred-site.xml

:1,$s/mace/$hostname/g
        <property>
                <name>mapreduce.map.output.compress</name>
                <value>true</value>
        </property>
        <property>
                <name>mapreduce.map.output.compress.codec</name>
                <value>org.apache.hadoop.io.compress.SnappyCodec</value>
        </property>
        <!-- 告訴hadoop以後MR執行在yarn上 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapred.job.tracker</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>localhost:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>localhost:19888</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.done-dir</name>
                <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.intermediate-done-dir</name>
                <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.staging-dir</name>
                <value>/tmp/hadoop-yarn/staging</value>
        </property>

13.4.5 slaves

配置hostname,單機為一個(localhost),叢集為多行

13.4.6 yarn-site.xml


    <!-- NodeManager獲取資料的方式是shuffle-->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<!-- 日誌聚集 -->
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>
	<!-- 日誌資訊儲存在檔案系統上的最長時間(一週)  秒為單位-->
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>604800</value>
	</property>
	<!-- 應用程式完成之後 NodeManager 的 DeletionService 刪除應用程式的本地化檔案和日誌目錄之前的時間(秒數)。要診斷 YARN 應用程式問題,請將此屬性的值設為足夠大(例如,設為 600 秒,即 10 分鐘)以允許檢查這些目錄 -->
	<property>
		<name>yarn.nodemanager.delete.debug-delay-sec</name>
		<value>604800</value>
	</property>
	<!-- 日誌聚合目錄 -->
	<property>
		<name>yarn.nodemanager.remote-app-log-dir</name>
		<value>/var/log/hadoop-yarn/apps</value>
	</property>
	<property>
		<name>yarn.nodemanager.local-dirs</name>
		<value>/data/hadoop/logs/yar/local</value>
	</property>
	<property>
		<name>yarn.nodemanager.log-dirs</name>
		<value>/data/hadoop/logs/yar/log</value>
	</property>
	<property>
		<name>yarn.log.server.url</name>
		<value>http://localhost:19888/jobhistory/logs</value>
	</property>
	<!-- 是否啟動一個執行緒檢查每個任務正使用的實體記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true。 -->
	<property>
		<name>yarn.nodemanager.pmem-check-enabled</name>
		<value>false</value>
	</property>
	<!-- 是否啟動一個執行緒檢查每個任務正使用的虛擬記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true -->
	<property>
		<name>yarn.nodemanager.vmem-check-enabled</name>
		<value>false</value>
	</property>

13.4.7 yarn-env.sh

vim yarn-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_172

13.4 格式化namenode

cd /usr/local/hadoop-2.7.5
./bin/hdfs namenode -format

13.5 驗證是否安裝成功

hadoop version
hadoop checknative -a

14. 啟動與停止HDFS服務

#進入hadoop安裝目錄
cd $HADOOP_HOME
#啟動
./sbin/start-dfs.sh
#停止
./sbin/stop-dfs.sh

15. 啟動與停止yarn服務

#進入hadoop安裝目錄
cd $HADOOP_HOME
#啟動
./sbin/start-yarn.sh
#停止
./sbin/stop-yarn.sh

16. 啟動與停止jobhistory服務

#進入hadoop安裝目錄
cd $HADOOP_HOME
#啟動
./sbin/mr-jobhistory-daemon.sh start historyserver
#停止
./sbin/mr-jobhistory-daemon.sh stop historyserver

hadoop dfsadmin -report

17. UI介面

yarn http://ip:8088/cluster/cluster

namenode http://ip:50070

18. 提交wordcount作業測試環境