1. Hadoop常用組件:
1. hadoop commons :hadoop基礎(chǔ)模塊。
2. HDFS:存儲數(shù)據(jù)(讀-寫),一次寫入、多次讀取。(1)namenode :元數(shù)據(jù)存儲的位置。(2)datanode: 存儲數(shù)據(jù)。
3. MapReduce:是一種計(jì)算模型,設(shè)計(jì)思想是“分而治之”。map:拆分階段。reduce:合并階段。
4. Yarn:資源管理器,管理cpu、內(nèi)存、虛擬代碼。包括ResourceManager 和 NodeManager。
2.偽分布式模式環(huán)境搭建:
2.1 ?Linux環(huán)境準(zhǔn)備:
根據(jù)上一篇文章的方法,在虛擬機(jī)安裝Linux CentOS 6,本節(jié)從之前安裝的操作系統(tǒng)開始繼續(xù)。
1. 修改計(jì)算機(jī)主機(jī)名(需要用root用戶):
修改配置文件:
#vi /etc/sysconfig/network
找到以“HOSTNAME=”開頭的那一行,注意這里不要使用下劃線。
修改成“HOSTNAME=hadoop-namenode.ipma.com”。
2. 增加普通用戶(不使用root用戶來使用hadoop):
增加用戶:
#useradd natty
#echo 123456|passwd --stdin natty
(1)passwd的man手冊,--stdin選項(xiàng):(--stdin : This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.)
(2)刪除用戶的命令(#userdel natty)。
3. 虛擬機(jī)IP地址修改為靜態(tài)IP
(1)關(guān)閉VMWare的DHCP:

(2)NAT設(shè)置:

安裝后的虛擬機(jī)的IP默認(rèn)是動(dòng)態(tài)獲取的,需要改成靜態(tài)IP(企業(yè)服務(wù)器都是靜態(tài)IP的,服務(wù)器IP地址不能經(jīng)常改變),有以下兩種方法來調(diào)整:圖形界面、修改配置文件。設(shè)置的IP,可以首先通過ifconfig命令查看當(dāng)前的IP,再將這個(gè)IP設(shè)置為靜態(tài)IP。
(3)保證物理機(jī)與虛擬機(jī)能夠互聯(lián),設(shè)置VMNET8網(wǎng)卡與虛擬機(jī)的靜態(tài)IP在同一個(gè)網(wǎng)段。

(4)調(diào)取圖形界面:
#setup --console

(5)修改配置文件:
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
例如下面的配置單:
BOOTPROTO=none
IPADDR=192.168.8.128
NETMASK=255.255.255.0
GATEWAY=192.168.8.2
DNS1=192.168.8.2
DNS2=8.8.8.8
4. 關(guān)閉防火墻和selinux:
(1)關(guān)閉防火墻:
關(guān)閉防火墻服務(wù)(只在當(dāng)前Session內(nèi)有效,系統(tǒng)重啟后又恢復(fù)):
#service iptables stop
想要重啟后生效:
#chkconfig iptables off
(2)關(guān)閉selinux:
修改配置文件:
#vi /etc/sysconfig/selinux
添加配置: ?SELINUX=disabled
5. 配置hosts文件:
這部分完成之前配置的靜態(tài)IP和主機(jī)名的映射(IP在前,主機(jī)名在后)。修改下邊文件:
#vi /etc/hosts
增加下面的內(nèi)容:
192.168.8.168 ? ? ? ? ?hadoop-namenode.ipma.com
在/etc/hosts文件中,不要保留127.0.0.1的配置。
6. 重啟主機(jī):
完成上邊所有的配置后,重啟主機(jī)以生效配置:
#reboot
7. 生成目錄結(jié)構(gòu):
對于目錄結(jié)構(gòu),不同的人有不同的使用習(xí)慣。不一定非要按照這里規(guī)定的目錄結(jié)構(gòu)開發(fā),可以自行設(shè)定。
(1)在/opt下生成2個(gè)目錄,兩個(gè)目錄的作用:
softwares:存放軟件的安裝包(壓縮包)的目錄。需要把各種軟件上傳到這個(gè)目錄,例如jdk,hadoop,hbase安裝壓縮包等等。
modules:軟件的安裝目錄(解壓后目錄)。
#mkdir /opt/softwares
#mkdir /opt/modules
將這2個(gè)目錄的 ?“所屬用戶和所屬用戶組” ?修改為 natty(為了方便,直接將目錄/opt 的權(quán)限 修改):
# chown -R natty:natty /opt/
2.2 ?安裝JDK
1. 解壓壓縮文件(使用natty用戶):
$tar zxf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
2. 環(huán)境變量設(shè)定(使用root用戶):
#vi /etc/profile
增加如下內(nèi)容:
## JAVA HOME
JAVA_HOME=/opt/modules/jdk1.7.0_67
PATH=$PATH:$JAVA_HOME/bin
3. 立即生效環(huán)境變量(使用natty用戶):
$source /etc/profile
4. 刪除系統(tǒng)中已經(jīng)默認(rèn)安裝的jdk:
因?yàn)閖dk十分常用,所以很多Linux操作系統(tǒng)已經(jīng)默認(rèn)安裝了,需要將這些默認(rèn)安裝的版本刪除。
首先,先查詢系統(tǒng)中已經(jīng)安裝了哪些 java的rpm包:
#rpm -qa | grep java
根據(jù)查詢結(jié)果,我的版本的操作系統(tǒng)需要?jiǎng)h除的安裝包:
# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64
# rpm -e --nodeps tzdata-java-2012j-1.el6.noarch
# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.x86_64
PS : 卸載rpm軟件包,使用命令rpm -e 。 ?
--nodeps選項(xiàng)的官方man文檔:
--nodes ?: ?Don’t check dependencies before uninstalling the packages.
2.3 ?hadoop安裝和配置:
1. 解壓壓縮包(使用natty用戶):
$ tar zxvf hadoop-2.5.0.tar.gz -C /opt/modules/
2. 修改配置文件。
修改目錄 /opt/modules/hadoop-2.5.0/etc/hadoop ?的幾個(gè)文件:
(1)在下邊3個(gè)文件中添加JAVA_HOME環(huán)境變量:
hadoop-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_67
yarn-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_67
mapred-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_67
(2)修改core-site.xml 和 hdfs-site.xml :
core-site.xml:
<property>
? ? ? ? ? <name>fs.defaultFS</name>
? ? ? ? ?<value>hdfs://hadoop-namenode.ipma.com:8020</value>
</property>
配置項(xiàng) fs.defaultFS的官方解釋:
The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem

hdfs-site.xml:
<property>
? ? ? ? ? ?<name>dfs.replication</name>
? ? ? ? ? ?<value>1</value>
</property>
HDFS采用冗余存儲,一般分布式集群設(shè)定的副本數(shù)是3,但是因?yàn)檫@里配置的偽分布式,只包含一個(gè)節(jié)點(diǎn),所以設(shè)置為1.
3. 啟動(dòng)HDFS:
Hadoop在安裝和基本配置完成后,第一次啟動(dòng)HDFS時(shí),需要做一次格式化,格式化后HDFS才可以使用。
格式化HDFS:
$ bin/hdfs namenode -format
啟動(dòng)namenode和datanode:
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
查看啟動(dòng)的java進(jìn)程:
$ jps
4. HDFS的簡單測試:
在格式化HDFS,并啟動(dòng)了namenode和datanode以后,我們做一個(gè)簡單的測試來驗(yàn)證HDFS是否生效。在這里,我們將Linux中的一個(gè)文件上傳到HDFS,并在HDFS查看文件的內(nèi)容:
$ bin/hdfs dfs -mkdir /input
$ bin/hdfs dfs -put /etc/yum.conf /input
$ bin/hdfs dfs -ls /input
$ bin/hdfs dfs -cat /input/yum.conf
-put是很常用的選項(xiàng),從linux上傳文件到hdfs。
2.4 Yarn相關(guān)配置
1. yarn和mapred配置:
在目錄 /opt/modules/hadoop-2.5.0/etc/hadoop ?中修改Yarn和MapReduce的配置文件:
mapred-site.xml :
<property>
? ? ? ? ? ?<name>mapreduce.framework.name</name>
? ? ? ? ? ?<value>yarn</value>
</property>
配置mapreduce的運(yùn)行框架為“yarn”。
yarn-site.xml:
<property>
? ? ? ? ? ? ? ?<name>yarn.nodemanager.aux-services</name>
? ? ? ? ? ? ? ?<value>mapreduce_shuffle</value>
</property>
2. 啟動(dòng)yarn相關(guān)服務(wù):
啟動(dòng)ResourceManager 和 NodeManager:
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/yarn-daemon.sh start nodemanager
啟動(dòng)了服務(wù)后,可以在瀏覽器中管理:
http://192.168.17.128:50070/
http://192.168.17.128:8088/
3. MapReduce測試:
下面以WordCount程序測試 MapReduce調(diào)用。
在hadoop的安裝目錄下,有一個(gè)jar包存放一些自帶的mapreduce程序的jar包。
文件目錄位置是:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar。
查看該jar包的內(nèi)程序類:
$jar tvf hadoop-mapreduce-examples-2.4.1.jar
執(zhí)行wordcount mapreduce程序:
$bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /user/input /output/01
4. 日志查看
在運(yùn)行過程中,如果出現(xiàn)錯(cuò)誤,可以查看相關(guān)日志來找出錯(cuò)點(diǎn)。日志所在位置:
$HADOOP_HOME/logs
在logs目錄下,有兩類日志,分別是 *.log 和 *.out兩類日志。
例如 ?hadoop-[linux用戶名]-[hadoop角色]-[主機(jī)名].log[out]
這兩種日志的作用:
.log:通過log4j記錄的,記錄大部分應(yīng)用程序的日志信息
.out:記錄標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤日志,少量記錄
5. dfs常用的命令:
hdfs常用的命令和Linux命令類似,有少部分有差異,下面列舉幾個(gè)常用的命令:
dfs -put [localsrc] [dst] ? 從Linux系統(tǒng)上傳文件到hdfs上。
dfs -du [dst] ? 查看空間大小使用情況。
dfs -chmod ?分配權(quán)限
2.5 其他hadoop配置:
1. xml文件配置:
hdfs-site.xml:
<property>
? ? ? ? ? ? ? <name>dfs.namenode.http-address</name>
? ? ? ? ? ? ? <value>hadoop-namenode.ipma.com:50070</value>
</property>
The address and the base port where the dfs namenode web ui will listen on.
core-site.xml:
<property>
? ? ? ? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? ? ? ? <value>/opt/modules/hadoop-2.5.0/data</value>
</property>
A base for other temporary directories.
yarn-site.xml:
<property>
? ? ? ? ? ? ? <name>yarn.resourcemanager.hostname</name>
? ? ? ? ? ? ? ?<value>hadoop-namenode.ipma.com</value>
</property>
配置ResourceManager。
2. 啟動(dòng)日志聚合:
(1)增加配置:
yarn-site.xml:
<property>
? ? ? ? ? ? ? <name>yarn.log-aggregation-enable</name>
? ? ? ? ? ? ? <value>true</value>
</property>
<property>
? ? ? ? ? ? ? <name>yarn.log-aggregation.retain-seconds</name>
? ? ? ? ? ? ? <value>86400</value>
</property>
mapred-site.xml
<property>
? ? ? ? ? ? ? <name>mapreduce.jobhistory.webapp.address</name>
? ? ? ? ? ? ? <value>hadoop-namenode.ipma.com:19888</value>
</property>
(2)啟動(dòng)服務(wù):
$ sbin/mr-jobhistory-daemon.sh start historyserver