1. 準備工作 1.1. 軟體準備 1、安裝VMWare 2、在VMWare上安裝CentOS6.5 3、安裝XShell5,用來遠程登錄系統 4、通過rpm -qa | grep ssh 檢查cent os 是否安裝了ssh server和ssh client ,然後使用ssh localhost ...
1. 準備工作
1.1. 軟體準備
1、安裝VMWare
2、在VMWare上安裝CentOS6.5
3、安裝XShell5,用來遠程登錄系統
4、通過rpm -qa | grep ssh 檢查cent os 是否安裝了ssh server和ssh client ,然後使用ssh localhost測試一下SSH是否可用。
如果沒有安裝那麼使用下麵的命令安裝:
yum install openssh-clients
yum install openssh-server
yum install openssh-clients
yum install openssh-server
5、使用XShell遠程登錄伺服器,接下來的操作就在XShell上通過命令行來執行了。虛擬機中的伺服器可以過ifconfig這個命令來獲取分配的ip地址(這個地址可能隨著虛擬機的重啟會發生變化)。
1.2. 創建hadoop用戶
當前虛擬機中沒有安裝任何軟體,那麼我們的目的是搭建一個Hadoop單機模式,那麼首先需要在集群中建立一個hadoop用戶,用來啟動Hadoop的進程,這樣避免使用root用戶啟動進程,這也是比較規範的伺服器用戶管理,所以下麵先創建hadoop用戶:
useradd -m hadoop -s /bin/bash
passwd hadoop #為hadoop用戶設置密碼
useradd -m hadoop -s /bin/bash
passwd hadoop #為hadoop用戶設置密碼
接下來的安裝過程中會涉及到root用戶和hadoop用戶的切換,請大家註意!!!
1.3. 配置SSH無密碼訪問
在準備工作中我們已經安裝配置了SSH客戶端和伺服器,集群和單節點模式都需要到SSH,Hadoop中namenode需要啟動集群中的所有機器的Hadoop守護進程,而這個過程需要通過SSH登錄來實現。而Hadoop並沒有提供SSH輸入密碼的登錄形式,因此為了保證可以順利登錄每台機器,需要將所有機器配置為namenode可以無密碼登錄它們。實際中配置失敗也可以運行,但是每次輸入密碼是非常麻煩的,所以我們需要配置SSH的無密碼訪問(註意無密碼訪問是為hadoop用戶配置的,故以下操作需要在hadoop用戶下完成):
1. 首先我們需要進入/home/hadoop/.ssh目錄下,如果這個目錄不存在,需要執行一下ssh localhost 這樣就會生成這個目錄。
2. 執行以下命令,創建密鑰並且將密鑰加入授權:
cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t dsa # 會有提示,都按回車就可以
cat id_dsa.pub >> authorized_keys # 加入授權
chmod 600 ./authorized_keys # 修改文件許可權,如果不改,無法通過,原因好像是cent os的許可權驗證比較嚴格
cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost
ssh-keygen -t dsa # 會有提示,都按回車就可以
cat id_dsa.pub >> authorized_keys # 加入授權
chmod 600 ./authorized_keys # 修改文件許可權,如果不改,無法通過,原因好像是cent os的許可權驗證比較嚴格
3. 切換到hdoop用戶,接下來,輸入ssh localhost測試一下無密碼登錄,直接enter就可以,無需密碼
1.4. 安裝JAVA環境
將jdk安裝包複製到/tmp目錄,然後解壓到/usr/java目錄中
tar zxvf jdk-8u131-linux-x64.tar.gz -C /usr/java
解壓完成後發現生成了jdk目錄
[root@cluster02 tmp]# cd /usr/java/
[root@cluster02 java]# ls
jdk1.8.0_131
[root@cluster02 java]#
修改/etc/profile配置java路徑
JAVA_HOME=/usr/java/jdk1.8.0_131
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH
2. 單機模式安裝
1) 通過xftp將本地hadoop安裝包和mds文件發送到伺服器/home/hadoop目錄下,然後驗證tar包的完整性;若文件不完整則這兩個值一般差別很大,可以簡單對比下前幾個字元跟後幾個字元是否相等即可,如下圖所示,如果兩個值不一樣,請務必重新下載。
<span style="font-size:18px;">cat hadoop-2.6.0.tar.gz.mds | grep 'MD5'
md5sum hadoop-2.6.0.tar.gz | tr "a-z" "A-Z"</span>
<span style="font-size:18px;">cat hadoop-2.6.0.tar.gz.mds | grep 'MD5'
md5sum hadoop-2.6.0.tar.gz | tr "a-z" "A-Z"</span>
Hadoop下載地址:
http://archive.apache.org/dist/hadoop/core/
2) 使用root賬號,進入/home/hadoop目錄下,解壓安裝文件到/usr/local/hadoop下
tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local
tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local
3) 修改許可權
mv hadoop-2.6.0/ hadoop/ #更改文件夾名稱
chown -R hadoop:hadoop ./hadoop #修改許可權
mv hadoop-2.6.0/ hadoop/ #更改文件夾名稱
chown -R hadoop:hadoop ./hadoop #修改許可權
4) 驗證單機模式是否安裝成功,進入/usr/local/hadoop/bin目錄下,執行./hadoop -version
5) 執行一個小例子
Hadoop 預設模式為非分散式模式,無需進行其他配置即可運行。非分散式即單 Java 進程,方便進行調試。
現在我們可以執行例子來感受下 Hadoop 的運行。Hadoop 附帶了豐富的例子(運行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
在此我們選擇運行 grep 例子,我們將 input 文件夾中的所有文件作為輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞並統計出現的次數,最後輸出結果到 output 文件夾中。
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 將配置文件作為輸入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看運行結果
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 將配置文件作為輸入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看運行結果
6) 為了便於Hadoop的操作,我們在為hadoop用戶添加環境變數,讓用戶可以在任何地方執行hadoop命令,我們修改~/.bashrc文件配置,在最後添加以下命令,並且使生效(source ~/.bashrc):
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
3. 偽分散式安裝
前提:已經安裝完成單機模式。
偽分散式只需要在單機模式的基礎上改兩個配置文件並且格式化namenode即可。
vim /usr/local/hadoop/etc/hadoop/core-site.xml
<property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://host1:9000</value> </property>
Hdfs-site.xml
<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property>
(偽分散式不啟動 YARN 也可以,一般不會影響程式執行)
有的讀者可能會疑惑,怎麼啟動 Hadoop 後,見不到書上所說的 JobTracker 和 TaskTracker,這是因為新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也稱為 YARN,Yet Another Resource Negotiator)。
YARN 是從 MapReduce 中分離出來的,負責資源管理與任務調度。YARN 運行於 MapReduce 之上,提供了高可用性、高擴展性,YARN 的更多介紹在此不展開,有興趣的可查閱相關資料。
上述通過 ./sbin/start-dfs.sh 啟動 Hadoop,僅僅是啟動了 MapReduce 環境,我們可以啟動 YARN ,讓 YARN 來負責資源管理與任務調度。
首先修改配置文件 mapred-site.xml,這邊需要先進行重命名:
-
mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
然後再進行編輯,同樣使用 gedit 編輯會比較方便些 gedit ./etc/hadoop/mapred-site.xml :
-
<configuration> <property> <name>mapred.job.tracker</name> <value>http://hadoop01:9001</value> </property> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
接著修改配置文件 yarn-site.xml:
-
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
分別修改/usr/local/hadoop/etc/hadoop下的hadoop-env.sh和yarn-env.sh:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85.x86_64
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
格式化namenode:
hdfs namenode -format
成功的話,會看到 successfully formatted 的提示,且倒數第5行的提示如下,Exitting with status 0 表示成功,若為 Exitting with status 1 則是出錯。若出錯,請仔細檢查之前步驟。
start-all.sh #啟動hdfs
start-all.sh #啟動hdfs
jps
必須看到namenode和datanode都啟動了才行!!!!
本地的偽分散式環境搭建完成!!!