實(shí)驗(yàn)題目:面向分布式存儲(chǔ)和計(jì)算的Hadoop部署厦瓢,具體包括:配置和部署Hadoop編程環(huán)境,完成實(shí)驗(yàn)環(huán)境及實(shí)驗(yàn)工具的熟悉
這里使用自己租用的年費(fèi)阿里云服務(wù)器來搭建偽分布式Hadoop
主要參考了官方安裝教程
阿里云ECS服務(wù)器提供各種版本的Linux系統(tǒng)目养,這里我選擇使用的是CentOS-7.3.1611的版本
我們?cè)诎惭bHadoop前還需要做一些準(zhǔn)備工作
一、創(chuàng)建hadoop用戶
一般來說毒嫡,阿里云默認(rèn)登錄是使用root賬號(hào)癌蚁,所以需要增加一個(gè)名為 hadoop 的用戶
$ su # 如何不是root用戶登錄,切換到root用戶 $ useradd -m hadoop -s /bin/bash # 創(chuàng)建新用戶hadoop
第二條命令創(chuàng)建了可以登陸的 hadoop 用戶兜畸,并使用 /bin/bash
作為shell
接著使用如下命令修改密碼努释,按提示輸入兩次密碼,可簡(jiǎn)單的設(shè)為 “hadoop”(密碼隨意指定咬摇,若提示“無效的密碼伐蒂,過于簡(jiǎn)單”則再次輸入確認(rèn)就行):
$ passwd hadoop
可為 hadoop 用戶增加管理員權(quán)限,方便部署肛鹏,避免一些對(duì)新手來說比較棘手的權(quán)限問題逸邦,執(zhí)行:
$ visudo
如下圖,找到 root ALL=(ALL) ALL
這行(應(yīng)該在第98行在扰,可以先按一下鍵盤上的 ESC 鍵缕减,然后輸入 :98
(按一下冒號(hào),接著輸入98芒珠,再按回車鍵)桥狡,可以直接跳到第98行 ),然后在這行下面增加一行內(nèi)容:hadoop ALL=(ALL) ALL
(當(dāng)中的間隔為tab)皱卓,如下圖所示:
二裹芝、安裝SSH、配置SSH無密碼登陸
集群娜汁、單節(jié)點(diǎn)模式都需要用到 SSH 登陸(類似于遠(yuǎn)程登陸嫂易,你可以登錄某臺(tái) Linux 主機(jī),并且在上面運(yùn)行命令)存炮,一般情況下炬搭,CentOS 默認(rèn)已安裝了 SSH client、SSH server穆桂,打開終端執(zhí)行如下命令進(jìn)行檢驗(yàn):
$ rpm -qa | grep ssh
如果像我一樣能看到這里已經(jīng)安裝好了server和clients就表明已經(jīng)配置成功了
如果沒有的話宫盔,那就執(zhí)行以下的命令使用yum
進(jìn)行安裝
$ sudo yum install openssh-clients $ sudo yum install openssh-server
接著執(zhí)行如下命令測(cè)試一下 SSH 是否可用:
$ ssh localhost
但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸比較方便享完。
首先輸入 exit 退出剛才的 ssh灼芭,就回到了我們?cè)鹊慕K端窗口,然后利用 ssh-keygen 生成密鑰般又,并將密鑰加入到授權(quán)中:
$ exit # 退出剛才的 ssh localhost $ cd ~/.ssh/ # 若沒有該目錄彼绷,請(qǐng)先執(zhí)行一次ssh localhost $ ssh-keygen -t rsa # 會(huì)有提示,都按回車就可以 $ cat id_rsa.pub >> authorized_keys # 加入授權(quán) $ chmod 600 ./authorized_keys # 修改文件權(quán)限
安裝Java環(huán)境
Java 環(huán)境可選擇 Oracle 的 JDK茴迁,或是 OpenJDK寄悯,現(xiàn)在一般 Linux 系統(tǒng)默認(rèn)安裝的基本是 OpenJDK,如 CentOS 6.4 就默認(rèn)安裝了 OpenJDK 1.7堕义。按 http://wiki.apache.org/hadoop/HadoopJavaVersions 中說的猜旬,Hadoop 在 OpenJDK 1.7 下運(yùn)行是沒問題的。需要注意的是倦卖,CentOS 6.4 中默認(rèn)安裝的只是 Java JRE洒擦,而不是 JDK,為了開發(fā)方便怕膛,我們還是需要通過 yum 進(jìn)行安裝 JDK熟嫩,安裝過程中會(huì)讓輸入 [y/N],輸入 y 即可:
$ sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
通過上述命令安裝 OpenJDK褐捻,默認(rèn)安裝位置為 /usr/lib/jvm/java-1.7.0-openjdk(該路徑可以通過執(zhí)行 rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'
命令確定掸茅,執(zhí)行后會(huì)輸出一個(gè)路徑,除去路徑末尾的 “/bin/javac”柠逞,剩下的就是正確的路徑了)倦蚪。OpenJDK 安裝后就可以直接使用 java、javac 等命令了边苹。
接著需要配置一下 JAVA_HOME 環(huán)境變量陵且,為方便,我們?cè)?~/.bashrc
中進(jìn)行設(shè)置:
$ vim ~/.bashrc
在文件最后面添加如下單獨(dú)一行(指向 JDK 的安裝位置)个束,并保存:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk
接著還需要讓該環(huán)境變量生效慕购,執(zhí)行如下代碼:
$ source ~/.bashrc # 使變量設(shè)置生效
設(shè)置好后我們來檢驗(yàn)一下是否設(shè)置正確:
$ echo $JAVA_HOME # 檢驗(yàn)變量值 $ java -version $ $JAVA_HOME/bin/java -version # 與直接執(zhí)行 java -version 一樣
如果設(shè)置正確的話,$JAVA_HOME/bin/java -version 會(huì)輸出 java 的版本信息茬底,且和 java -version 的輸出結(jié)果一樣沪悲,由于我之前已經(jīng)安裝過其他版本的java,所以我的結(jié)果如下圖所示:
這樣阱表,Hadoop 所需的 Java 運(yùn)行環(huán)境就安裝好了殿如。
安裝Hadoop
(1)下載Hadoop
使用wget訪問國(guó)內(nèi)的清華源下載的速度超級(jí)無敵快
$ wget https://mirrors.tuna.tsinghua.edu.cn apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz
(2)解壓
wget默認(rèn)下載到登陸路徑~也就是/home/user贡珊,linux下安裝路徑一般是/usr/local
,所以我們有
$ sudo tar -zxf ~/hadoop-2.9.2.tar.gz -C /usr/local
我們需要修改hadoop-2.9.2的權(quán)限,因?yàn)閔adoop-2.9.2文件默認(rèn)擁有者是root
$ cd /usr/local/ #進(jìn)入用戶安裝目錄 $ sudo chown -R hadoop ./hadoop-2.9.2 # 修改文件權(quán)限(hadoop-2.9.2默認(rèn)擁有者是root涉馁,這里我們讓hadoop也成為擁有者)
(3)檢查是否安裝成功
輸入如下命令來檢查 Hadoop 是否可用门岔,成功則會(huì)顯示 Hadoop 版本信息
$ cd /usr/local/hadoop-2.9.2 $ ./bin/hadoop version # 查看hadoop版本信息,成功顯示則安裝成功
(4)修改具體版本的hadoop-2.9.2
為hadoop
$ sudo mv ./hadoop-2.9.2/ ./hadoop
sudo chown -R hadoop:hadoop ./hadoop # 修改文件權(quán)限
三烤送、Hadoop單機(jī)配置(非分布式)
非分布式即單 Java 進(jìn)程寒随,方便進(jìn)行調(diào)試
默認(rèn)就是,無需配置帮坚!我們可以運(yùn)行運(yùn)行g(shù)rep例子
我們將 input 文件夾中的所有文件作為輸入妻往,篩選當(dāng)中符合正則表達(dá)式 dfs[a-z.]+
的單詞并統(tǒng)計(jì)出現(xiàn)的次數(shù),最后輸出結(jié)果到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/* # 查看運(yùn)行結(jié)果
程序執(zhí)行成功的輸出信息
四试和、偽分布式
Hadoop 可以在單節(jié)點(diǎn)上以偽分布式的方式運(yùn)行讯泣,Hadoop 進(jìn)程以分離的 Java 進(jìn)程來運(yùn)行,節(jié)點(diǎn)既作為 NameNode 也作為 DataNode阅悍,同時(shí)判帮,讀取的是 HDFS 中的文件
在設(shè)置 Hadoop 偽分布式配置前,我們還需要設(shè)置 HADOOP 環(huán)境變量溉箕,執(zhí)行如下命令在 ~/.bashrc 中設(shè)置
$ vim ~/.bashrc
# Hadoop Environment Variables 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
保存后晦墙,不要忘記執(zhí)行如下命令使配置生效:
$ source ~/.bashrc
這些變量在啟動(dòng) Hadoop 進(jìn)程時(shí)需要用到,不設(shè)置的話可能會(huì)報(bào)錯(cuò)(這些變量也可以通過修改 ./etc/hadoop/hadoop-env.sh 實(shí)現(xiàn))
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/
中肴茄,偽分布式需要修改2個(gè)配置文件 core-site.xml
和 hdfs-site.xml
晌畅。Hadoop的配置文件是 xml 格式,每個(gè)配置以聲明 property
的 name
和 value
的方式來實(shí)現(xiàn)
修改 ./ect/hadoop/core-site.xml
$ vim ./etc/hadoop/core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
同樣的寡痰,修改配置文件 hdfs-site.xml:
$ vim ./etc/hadoop/hdfs-site.xml
<configuration> <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> </configuration>
配置完成后抗楔,執(zhí)行 NameNode 的格式化:
$ ./bin/hdfs namenode -format
接著開啟 NaneNode 和 DataNode 守護(hù)進(jìn)程:
$ ./sbin/start-dfs.sh
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN
提示可以忽略,并不會(huì)影響正常使用
啟動(dòng)完成后拦坠,可以通過命令 jps 來判斷是否成功啟動(dòng)连躏,若成功啟動(dòng)則會(huì)列出如下進(jìn)程: “NameNode”、”DataNode”和SecondaryNameNode(如果 SecondaryNameNode 沒有啟動(dòng)贞滨,請(qǐng)運(yùn)行
sbin/stop-dfs.sh
關(guān)閉進(jìn)程入热,然后再次嘗試啟動(dòng)嘗試)。如果沒有NameNode
或 DataNode
晓铆,那就是配置不成功勺良,請(qǐng)仔細(xì)檢查之前步驟,或通過查看啟動(dòng)日志排查原因骄噪。檢測(cè)是否成功啟動(dòng):
$ jps