Hadoop 使用筆記
1、單機(jī)部署
環(huán)境準(zhǔn)備
centos 7,作為系統(tǒng)環(huán)境
hadoop 版本使用hadoop-2.8.2
在安裝 Hadoop 前還需要做一些必備工作
1、 創(chuàng)建hadoop用戶
#這條命令創(chuàng)建了可以登陸的 hadoop 用戶,并使用 /bin/bash 作為 shell。
sudo useradd -m hadoop -s /bin/bash
#使用如下命令設(shè)置密碼,可簡(jiǎn)單設(shè)置為 hadoop,按提示輸入兩次密碼
sudo passwd hadoop
#hadoop 用戶增加sudo權(quán)限
vim /etc/sudoers
## 找到 Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL #增加此條記錄
2、java 環(huán)境安裝
yum 安裝
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
配置JAVA_HOME
[hadoop@aliyun-gitlab lib]$ which java
/usr/bin/java
[hadoop@aliyun-gitlab lib]$ ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 8 16:12 /usr/bin/java -> /etc/alternatives/java
[hadoop@aliyun-gitlab lib]$ ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Nov 8 16:12 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java
#通過上面命令查詢到openjdk的安裝路徑后,編輯~/.bash_profile文件中配置JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#文件編輯完成后,執(zhí)行該命令,使變量設(shè)置生效
source ~/.bash_profile
# 檢驗(yàn)變量值
echo $JAVA_HOME
java -version
$JAVA_HOME/bin/java -version # 與直接執(zhí)行 java -version 一樣
安裝 Hadoop 2
Hadoop 2 可以通過 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下載,一般選擇下載最新的穩(wěn)定版本,即下載 “stable” 下的 hadoop-2.x.y.tar.gz 這個(gè)格式的文件,這是編譯好的,另一個(gè)包含 src 的則是 Hadoop 源代碼,需要進(jìn)行編譯才可使用。
- 下載hadoop
wget http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-2.8.2.tar.gz
#解壓
tar -zxf hadoop-2.8.2.tar.gz
mv hadoop-2.8.2 hadoop
- Hadoop 解壓后即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會(huì)顯示 Hadoop 版本信息:
cd hadoop
./bin/hadoop version
#成功后的輸出
[hadoop@aliyun-gitlab hadoop]$ ./bin/hadoop version
Hadoop 2.8.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 66c47f2a01ad9637879e95f80c41f798373828fb
Compiled by jdu on 2017-10-19T20:39Z
Compiled with protoc 2.5.0
From source with checksum dce55e5afe30c210816b39b631a53b1d
This command was run using /home/hadoop/hadoop/share/hadoop/common/hadoop-common-2.8.2.jar
簡(jiǎn)單使用
Hadoop 默認(rèn)模式為非分布式模式,無需進(jìn)行其他配置即可運(yùn)行。非分布式即單 Java 進(jìn)程,方便進(jìn)行調(diào)試?,F(xiàn)在我們可以執(zhí)行例子來感受下 Hadoop 的運(yùn)行。Hadoop 附帶了豐富的例子(運(yùn)行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
- 在此我們選擇運(yùn)行 grep 例子,我們將 input 文件夾中的所有文件作為輸入,篩選當(dāng)中符合正則表達(dá)式 wing[a-z.]+ 的單詞并統(tǒng)計(jì)出現(xiàn)的次數(shù),最后輸出結(jié)果到 output 文件夾中。
cd /home/hadoop/hadoop
mkdir input
#往input 文件寫入測(cè)試文件(此處只簡(jiǎn)單舉例,所以文件較為簡(jiǎn)單)
[hadoop@aliyun-gitlab input]$ cat input/test.txt
pfc
hgg
skkj
pfcaaa
pfchgy
pfchgy
wingaaa
wingpfc
winghaha
#運(yùn)行計(jì)算
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'wing[a-z.]+'
#查看運(yùn)行結(jié)果
[hadoop@aliyun-gitlab hadoop]$ cat output/*
1 wingpfc
1 winghaha
1 wingaaa
#注意,Hadoop 默認(rèn)不會(huì)覆蓋結(jié)果文件,因此再次運(yùn)行上面實(shí)例會(huì)提示出錯(cuò),需要先將 ./output 刪除。
2、分布式集群搭建
準(zhǔn)備
三臺(tái)服務(wù)器配置,系統(tǒng):centos7.2
三臺(tái)服務(wù)器分配的IP地址:192.168.0.71/72/73
規(guī)劃:71用作主節(jié)點(diǎn)用作hadoop-master,其它三臺(tái)為數(shù)據(jù)節(jié)點(diǎn)72、73用作hadoop-salve1~2
jdk和生成保持一致使用1.8版本
hadoop-2.8.2版本,下載地址:http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-2.8.2.tar.gz
host配置和主機(jī)名
修改三臺(tái)服務(wù)器的hosts文件
sudo vim /etc/hosts
#添加以下三條記錄
192.168.0.71 hadoop-master
192.168.0.72 hadoop-slave1
192.168.0.73 hadoop-slave2
檢查防火墻配置,可先關(guān)掉。
查看防火墻狀態(tài)
systemctl status iptables
#使用firewalld的則使用
systemctl status firewalld
關(guān)閉防火墻
systemctl stop iptables
#使用firewalld的則使用
systemctl stop firewalld
檢查安全組端口是否開啟
免密登陸配置
- 下面以配置hadoop-master本機(jī)無密碼登錄為例進(jìn)行講解,用戶需參照下面步驟完成h-salve1~2兩臺(tái)子節(jié)點(diǎn)機(jī)器的本機(jī)無密碼登錄;
1)生產(chǎn)秘鑰
ssh-keygen -t rsa -C 'hadoop-master'
2)將公鑰追加到”authorized_keys”文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3)驗(yàn)證本機(jī)能無密碼訪問
#ssh 不是默認(rèn)22端口的需自行修改,如 ssh -p 12345 hadoop-master
ssh hadoop-master
最后,依次配置h-salve1~2無密碼訪問
hadoop-master本機(jī)無密碼登錄hadoop-slave1、hadoop-slave2無密碼登錄
配置hadoop-slave1~hadoop-slave2本機(jī)無密碼登錄hadoop-master
PS: 就是配置好各機(jī)器的互信關(guān)系而已,步驟基本差不多
配置hadoop-master的hadoop環(huán)境
1、hadoop-master上 解壓縮安裝包及創(chuàng)建基本目錄
安裝 Hadoop 2小節(jié),把hadoop mv 到 /usr/local/hadoop下
2、 配置hadoop-master的hadoop環(huán)境變量
#配置環(huán)境變量,修改配置文件 vim ~/.bash_profile
export HADOOP_HOME=/usr/local/hadoop
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HADOOP_HOME/bin
使得hadoop命令在當(dāng)前終端立即生效
source ~/.bash_profile
3、下面配置,文件都在:/usr/local/hadoop/etc/hadoop路徑下
3.1、配置core-site.xml
修改Hadoop核心配置文件/usr/local/hadoop/etc/hadoop/core-site.xml,通過fs.default.name指定NameNode的IP地址和端口號(hào),通過hadoop.tmp.dir指定hadoop數(shù)據(jù)存儲(chǔ)的臨時(shí)文件夾。
<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://hadoop-master:9000</value>
</property>
</configuration>
特別注意: 如沒有配置hadoop.tmp.dir參數(shù),此時(shí)系統(tǒng)默認(rèn)的臨時(shí)目錄為:/tmp/hadoo-hadoop。而這個(gè)目錄在每次重啟后都會(huì)被刪除,必須重新執(zhí)行format才行,否則會(huì)出錯(cuò)。
3.2、配置hdfs-site.xml:
修改HDFS核心配置文件/usr/local/hadoop/etc/hadoop/hdfs-site.xml,通過dfs.replication指定HDFS的備份因子為3,通過dfs.name.dir指定namenode節(jié)點(diǎn)的文件存儲(chǔ)目錄,通過dfs.data.dir指定datanode節(jié)點(diǎn)的文件存儲(chǔ)目錄。
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
3.3、配置mapred-site.xml
拷貝mapred-site.xml.template為mapred-site.xml,在進(jìn)行修改
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://hadoop-master:9001</value>
</property>
</configuration>
3.4、配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
</configuration>
3.5、配置masters文件
修改/usr/local/hadoop/etc/hadoop/masters文件,該文件指定namenode節(jié)點(diǎn)所在的服務(wù)器機(jī)器。刪除localhost,添加namenode節(jié)點(diǎn)的主機(jī)名hadoop-master;不建議使用IP地址,因?yàn)镮P地址可能會(huì)變化,但是主機(jī)名一般不會(huì)變化。
vim /usr/local/hadoop/etc/hadoop/masters
## 內(nèi)容
hadoop-master
3.6、配置slaves文件(Master主機(jī)特有)
修改/usr/local/hadoop/etc/hadoop/slaves文件,該文件指定哪些服務(wù)器節(jié)點(diǎn)是datanode節(jié)點(diǎn)。刪除locahost,添加所有datanode節(jié)點(diǎn)的主機(jī)名,如下所示。
vim /usr/local/hadoop/etc/hadoop/slaves
## 內(nèi)容
hadoop-slave1
hadoop-slave2
配置hadoop-slave的hadoop環(huán)境
下面以配置hadoop-slave1的hadoop為例進(jìn)行演示,用戶需參照以下步驟完成其他hadoop-slave2服務(wù)器的配置。
1、從hadoop-master復(fù)制hadoop目錄的文件到hadoop-slave1節(jié)點(diǎn)
#此處的ssh端口若不是默認(rèn)22,則需自行修改
scp -r /usr/local/hadoop hadoop-slave1:/usr/local/
登錄hadoop-slave1服務(wù)器,刪除slaves內(nèi)容
rm -f /usr/local/hadoop/etc/hadoop/slaves
2、配置環(huán)境變量,此步驟跟hadoop-master一樣
啟動(dòng)集群
1、格式化HDFS文件系統(tǒng)
進(jìn)入master的~/hadoop目錄,執(zhí)行以下操作
bin/hadoop namenode -format
#格式化namenode,第一次啟動(dòng)服務(wù)前執(zhí)行的操作,以后不需要執(zhí)行。
2、然后啟動(dòng)hadoop:
sbin/start-all.sh
成功啟動(dòng)后,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。
3、使用jps命令查看運(yùn)行情況
#master 執(zhí)行 jps查看運(yùn)行情況
[hadoop@aliyun-gitlab hadoop]$ jps
9922 Jps
27658 NameNode
27933 SecondaryNameNode
28110 ResourceManager
#slave 執(zhí)行 jps查看運(yùn)行情況
[hadoop@wing-ecs hadoop]$ jps
12647 NodeManager
12540 DataNode
13150 Jps
4、命令查看Hadoop集群的狀態(tài)
通過簡(jiǎn)單的jps命令雖然可以查看HDFS文件管理系統(tǒng)、MapReduce服務(wù)是否啟動(dòng)成功,但是無法查看到Hadoop整個(gè)集群的運(yùn)行狀態(tài)。我們可以通過 hadoop dfsadmin -report 進(jìn)行查看。用該命令可以快速定位出哪些節(jié)點(diǎn)掛掉了,HDFS的容量以及使用了多少,以及每個(gè)節(jié)點(diǎn)的硬盤使用情況。
[hadoop@aliyun-gitlab hadoop]$ hadoop dfsadmin -report
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
Configured Capacity: 147692552192 (137.55 GB)
Present Capacity: 91987980288 (85.67 GB)
DFS Remaining: 91987890176 (85.67 GB)
DFS Used: 90112 (88 KB)
DFS Used%: 0.00%
Under replicated blocks: 1
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (2):
Name: 120.25.85.120:50010 (hadoop-slave2)
Hostname: iZ94v1rbhw4Z
Decommission Status : Normal
Configured Capacity: 105553100800 (98.30 GB)
DFS Used: 45056 (44 KB)
Non DFS Used: 45131362304 (42.03 GB)
DFS Remaining: 55036317696 (51.26 GB)
DFS Used%: 0.00%
DFS Remaining%: 52.14%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Tue Nov 14 14:29:49 CST 2017
Name: 120.78.143.38:50010 (hadoop-slave1)
Hostname: wing-ecs
Decommission Status : Normal
Configured Capacity: 42139451392 (39.25 GB)
DFS Used: 45056 (44 KB)
Non DFS Used: 3023679488 (2.82 GB)
DFS Remaining: 36951572480 (34.41 GB)
DFS Used%: 0.00%
DFS Remaining%: 87.69%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Tue Nov 14 14:29:49 CST 2017
5、hadoop 重啟
sbin/stop-all.sh
sbin/start-all.sh