本文詳細記錄了OneCoder通過自己的Mac環境,在開發服務器(CentOS 6.5)上搭建Hadoop的詳細過程。因為事無巨細,所以可能會”跑題”。
ssh連接免密碼配置
由於配置過程中需要頻繁的進行ssh連接到開發服務器執行命令以及通過scp命令向服務器拷貝文件等依賴ssh連接的操作。所以,配置本地環境跟服務器之間的ssh免密碼連接可以有效的提升工作效率。
由於我本機已經生成過公鑰,所以我只需將已有的公鑰拷貝到服務器即可。推薦使用ssh-copy-id命令,簡單又不會出錯。手動copy 再append的公鑰文件尾,容易因為操作問題,造成無法正確識別公鑰。
註:如果你沒有生成過公鑰,可通過ssh-keygen命令生成公鑰。走默認配置即可。
在我的mac上,居然還沒有安裝ssh-copy-id命令。通過brew 命令安裝即可。
brew install ssh-copy-id
然後copy公鑰到指定主機
ssh-copy-id [email protected]
其中, [email protected]改為你需要訪問的服務器的 用戶名@IP。根據提示輸入一次密碼。成功後,所有基於ssh的命令你只需要通過用戶名@IP 即可直接訪問服務器。
新用戶、用戶組創建
為了更好的權限控制,養成良好的linux使用習慣,我們首先創建一個管理和使用hadoop集群的用戶(組)dps-hadoop。這也是hadoop集群管理所需要的環境配置。
groupadd dps-hadoopuseradd -d /home/dps-hadoop -g dps-hadoop dps-hadoop
考慮到難免需要使用sudo提權的情況,給該用戶配置到sudo名單下, 修改/etc/sudoers文件。
vim /etc/sudoers
新增一行記錄:
dps-hadoop ALL=(ALL) ALL
此後,我們均使用dps-hadoop用戶進行操作。
配置本地DNS服務器
之前我介紹了如何用Docker搭建本地的DNS服務器,這裏終於派上用處。如果你沒有本地DNS服務器,那麽你修改/etc/hosts文件也可以。對於CentOS,臨時生效的配置文件在
/etc/resolv.conf
你可以看到該文件開頭提示你,該文件是自動生成的。重啟網絡服務會覆蓋,永久配置修改
/etc/sysconfig/Network-scripts/ifcfg-eth0
修改其中的
DNS1=172.20.2.24
其中ifcfg-eth0,改為你自己的網卡名即可。
安裝JDK
Hadoop是Java開發的,自然需要依賴jre運行。我采用了比較本的方法,現在Oracle官網下載jdk-8u77到本地,再通過scp命令拷貝到服務器的方式。進入jdk所在文件夾執行
scp jdk-8u77-linux-x64.rpm [email protected]:~/download
其實通過wget也可以下載,但是網上給出的命令
wget --no-cookie --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F" http://download.oracle.com/otn-pub/java/jdk/7u10-b18/jdk-7u10-linux-i586.rpm
我試了多次均未成功。我自己有個笨方法,就是先通過瀏覽器獲取下載獲取到真正的下載地址
然後再通過wget下載:
wget http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.rpm?AuthParam=1460511903_6b2f8345927b3fc4f961fbcaba6a01b3
下載後,你可能需要進行一次重命名,將多余的?AuthParam後綴去掉。
mv jdk-8u77-linux-x64.rpm?AuthParam=1460511903_6b2f8345927b3fc4f961fbcaba6a01b3 jdk-8u77-linux-x64.rpm
最後,安裝jdk
rpm -i jdk-8u77-linux-x64.rpm
配置JAVA_HOME
修改dps-hadoop用戶自己的環境變量配置文件。
vim ~/.bashrc
註意:網上提到了配置環境變量的方式有很多,粗暴的就是直接配置在/etc/environment或/etc/profile等全局配置文件中,對所有用戶生效。不推薦這種做法。對於用戶級的變量也有兩個~/.bash_profile和~/.bashrc,區別請自行研究。如果你想通過執行start-dfs.sh等腳本,遠程起停hadoop集群,那麽請配置在~/.bashrc中,否則hadoop會找不到你配置的環境變量。
例如:Error: JAVA_HOME is not set and could not be found.
添加
export JAVA_HOME="/usr/java/jdk1.8.0_77"
不建議配置到/etc/environment 下,因為會對所有用戶生效。
安裝Hadoop 2.6.4
根據官網介紹,Hadoop項目實際包含以下模塊:
Hadoop Common: The common utilities that support the other Hadoop modules.
Hadoop Distributed File system (HDFS?): A distributed file system that provides high-throughput access to application data.
Hadoop YARN: A framework for job scheduling and cluster resource management.
Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
首先,直接通過wget,從鏡像站下載。
wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz
解壓到用戶目錄
tar -xvzf hadoop-2.6.4.tar.gz -C ~/
配置HADOOP_HOME,同樣修改~/.bashrc文件。增加
export HADOOP_HOME="/home/dps-hadoop/hadoop-2.6.4"
在其他節點重復上述所有配置操作。
添加用戶
配置dps-hadoop用戶,從master到各slave節點間的ssh免密碼訪問。
修改DNS服務器地址
安裝JDK
下載解壓Hadoop
配置Hadoop環境變量
配置集群
從模塊角度理解,配置hadoop集群應包括HDFS、YARN和MapReduce這三部分配置。
HDFS配置
不考慮調優,僅從功能可運行上來理解,HDFS配置需要分別配置namenode、datanode的ip和端口號。數據備份份數。數據存放地址。因此配置如下:
namenode
core-site.xml
<configuration><property><name>hadoop.tmp.dir</name><value>/home/dps-hadoop/tmpdata</value> </property></configuration>hdfs-site.xml<configuration><property> <name>fs.default.name</name> <value>hdfs://master:54000/</value></property><property><name>dfs.namenode.name.dir</name><value>/home/dps-hadoop//namedata</value> </property><property><name>dfs.replication</name><value>2</value> </property></configuration>
Datanode
core-site.xml
<configuration><property><name>hadoop.tmp.dir</name><value>/home/dps-hadoop/tmpdata</value> </property></configuration>
hdfs-site.xml
<configuration><property> <name>fs.default.name</name> <value>hdfs://master:54000/</value></property><property><name>dfs.datanode.data.dir</name><value>/home/dps-hadoop/datadir</value> </property></configuration>
這裏只有core-site.xml裏的hadoop.tmp.dir的配置是我們之前沒有提到的。該配置是修改臨時文件的存儲路徑,避免因為系統重啟造成的臨時文件的丟失,從而導致集群不可能用的情況出現。
啟動HDFS集群
跟使用硬盤一樣,HDFS使用前也需要格式化
bin/hdfs namenode -format
然後啟動
sbin/start-dfs.sh
通過控制臺,可查看HDFS集群狀態
http://172.20.2.14:50070/
一個插曲
啟動時候發現一個WARN日誌。
16/04/19 13:59:18 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
無法加載本地庫。從stackoverflow上答案來看,主要有三種可能。
沒有指定java.library.path環境變量。
本地庫跟系統不兼容。(64位系統,提供的是32位的本地庫)
GLIBC版本不兼容
通過file命令查看
file lib/native/*
已經是64位的本地庫。
修改log4j.properties 打開本地加載的debug級別
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
再次啟動發現問題
16/04/19 14:27:00 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /home/dps-hadoop/hadoop-2.6.4/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14’ not found (required by /home/dps-hadoop/hadoop-2.6.4/lib/native/libhadoop.so.1.0.0)
通過
ldd --version
發現我本地環境的版本是2.12的。這個不升級系統版本很難解決。把log 改成ERROR,暫時眼不見心不煩吧。
YARN配置
在YARN裏,主節點稱為ResourceManager,從節點稱為NodeManager。根據理解,需要告知NodeManager, ResouceManager的通信地址。 對於ResourceManager來說,所以的從節點已經配置在slaves中了。因此,配置如下:
NodeManager
yarn-site.xml
<configuration><property><name>yarn.resourcemanager.hostname</name><value>master</value></property></configuration>
啟動yarn,主節點執行
.sbin/start-yarn.sh
MapReduce JobHistoryServer
對於MapReduce,默認無需特殊配置。Hadoop提供了一個管理任務執行歷史的服務JobHistoryServer。按需啟動即可。
mr-jobhistory-daemon.sh stop historyserver
至此,一個基本的Hadoop集群已經啟動完成。
集群管理環境 WebUI地址
Hadoop默認提供了查看集群狀態的Web服務,在主節點上啟動。默認端口如下。
HDFS集群管理,默認端口50070。http://master:50070/
ResourceManager管理,默認端口8088http://master:8088/
JobHistory 默認端口19888http://master:19888
Tags: 用戶名 服務器 管理所 用戶組 Linux
文章來源: