注: 如果使用虛擬機(jī)的話,請(qǐng)將網(wǎng)絡(luò)適配器設(shè)置為NAT并且將防火墻關(guān)閉并且將防火墻開(kāi)機(jī)自啟動(dòng)也一并關(guān)閉,selinux選擇disabled,
- 廣義和狹義
廣義: 以hadoop為主的生態(tài)圈
狹義: 專指hadoop
- Hadoop 2.x的組成
出現(xiàn)大數(shù)據(jù)組件原因: 對(duì)于mysql來(lái)說(shuō),mysql處理超過(guò)1億行的表效率差,需要將mysql數(shù)據(jù)同步到大數(shù)據(jù)平臺(tái)
一般使用HDFS存儲(chǔ)
HDFS: 分布式文件系統(tǒng)
mapreduce: 分布式計(jì)算(缺點(diǎn): 開(kāi)發(fā)難度高,計(jì)算慢, 被hive sql/ spark替代)
yarn: 資源(內(nèi)存, cpu) + 作業(yè)(job) 的調(diào)度管理系統(tǒng)
- Hadoop 2.x介紹
(1). Hadoop是Apache基金會(huì),特點(diǎn)是可靠,可伸縮,分布式的計(jì)算框架
(2). 企業(yè)一般選擇CDH/Ambari部署, 因?yàn)橐话悴粫?huì)只部署hadoop
(3). CDH代表什么:
cloudera對(duì)hadooop源碼進(jìn)行添加新功能或者修復(fù)bug之后,就變成CDH版本,在使用時(shí),跟apache版本沒(méi)有差別。
- 安裝Hadoop
預(yù)處理
(1) 設(shè)置/etc/selinux中SELINUX=disabled
(2) 設(shè)置/etc/hosts中
192.168.198.129 hadoop001
(3) 設(shè)置/etc/sysconfig/network
HOSTNAME=hadoop001
(4) 切換到root用戶,關(guān)閉防火墻
service iptables stop
(5) 禁止防火墻開(kāi)機(jī)自啟動(dòng)
chkconfig iptables off
(1) 新建hadoop用戶
useradd hadoop
(2) 給hadoop用戶賦予sudo權(quán)限
編輯/etc/sudoers文件
添加
hadoop ALL=(ALL) NOPASSWD: ALL
(3) 切換到hadoop用戶
su - hadoop
在hadoop的home directory下創(chuàng)建source software app三個(gè)文件夾
mkdir source software app
解壓tar文件夾到app文件夾
- Hadoop前置軟件
(1) java(推薦jdk1.7)
(2) ssh
- 配置文件
(1) 進(jìn)入剛才解壓好的hadoop文件夾,然后進(jìn)入當(dāng)前路徑下的etc/hadoop文件夾,修改hadoop-env.sh文件
修改1:
將export JAVA_HOME=${JAVA_HOME}
修改為export JAVA_HOME=/usr/java/jdk1.7.0_79
修改2:
添加 export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
(2) 測(cè)試修改
運(yùn)行$HADOOP_PREFIX/bin/hadoop,如果出現(xiàn)如下顯示,說(shuō)明配置成功
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
fs run a generic filesystem user client
version print the version
jar <jar> run a jar file
checknative [-a|-h] check native hadoop and compression libraries availability
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath prints the class path needed to get the
credential interact with credential providers
Hadoop jar and the required libraries
daemonlog get/set the log level for each daemon
trace view and modify Hadoop tracing settings
or
CLASSNAME run the class named CLASSNAME
Most commands print help when invoked w/o parameters.
- 啟動(dòng)Hadoop集群的三種模式
Local (Standalone) Mode: 單機(jī)模式
沒(méi)有進(jìn)程
Pseudo-Distributed Mode: 偽分布式
只有一臺(tái)機(jī)器,有進(jìn)程,用于學(xué)習(xí)
Fully-Distributed Mode: 分布式
生產(chǎn)中, 有進(jìn)程
- 以偽分布式啟動(dòng)
(1) 配置$HADOOP_PREFIX/etc/core-site.xml
?。。。。。。。。。?!注意
配置文件的字母大小寫(坑了我一中午)
配置$HADOOP_PREFIX/etc/hadoop/core-site.xml
在其內(nèi)部添加如下配置
<configuration>
<property>
<name>fs.defaultFS</name>
<!--hadoop代表的是機(jī)器名稱-->
<value>hdfs://hadoop001:9000</value>
</property>
</configuration>
(2) 配置$HADOOP_PREFIX/etc/hdfs-site.xml
在其內(nèi)部添加如下
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
(3) 配置無(wú)密碼訪問(wèn)
在terminal輸入如下命令
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa(生成一個(gè)key's randomart image)
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
此時(shí)會(huì)出現(xiàn)一個(gè)坑
-rw-rw-r--. 1 hadoop hadoop 358 Nov 37 25:65 authorized_keys
此時(shí)authorized_keys的權(quán)限為644,會(huì)出問(wèn)題
所以將其權(quán)限改為600
(4) 格式化文件系統(tǒng)
輸入 bin/hdfs namenode -format
(5) 啟動(dòng)dfs
開(kāi)始namenode進(jìn)程和datanode進(jìn)程
執(zhí)行$HADOOP_PREFIX/sbin/start-dfs.sh
啟動(dòng)之后,輸入jps顯示啟動(dòng)的dfs進(jìn)程
9757 NameNode
9854 DataNode
10050 SecondaryNameNode
10153 Jps
(6) 在web界面訪問(wèn)hdfs
在瀏覽器輸入$ip_address: 50070
(7) 在$HADOOP_PREFIX/etc/hadoop文件夾下
執(zhí)行 cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml下編輯
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(8) 在yarn-site中編輯
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle </value>
</property>
</configuration>
(9) 啟動(dòng)yarn
$HADOOP_PREFIX/sbin/start-yarn.sh
輸入jps,顯示如下
9757 NameNode
9854 DataNode
15734 ResourceManager
15822 NodeManager
10050 SecondaryNameNode
15852 Jps
(10) 打開(kāi)yarn的web界面
ip_address:8088
注意: 在iptables開(kāi)放端口
- 進(jìn)行Map-reduce job
(1) linux與HDFS
linux是文件系統(tǒng), HDFS是分布式文件系統(tǒng),HDFS是架在linux之上的,所以HDFS都是以如下形式開(kāi)頭
HDFS dfs -
之后再加linux命令
(1) 在HDFS上創(chuàng)建/user/$user_name文件夾
在$HADOOP_PREFIX目錄下執(zhí)行./bin/hdfs dfs -mkdir -p /user/$user_name
(2) 將linux上$HADOOP_PREFIX/etc/hadoop里的文件拷貝到hdsf文件夾input上
bin/hdfs dfs -put etc/hadoop input
注: 沒(méi)有指定默認(rèn)是放在HDFS中的/user/hadoop文件夾
(4) 運(yùn)行官網(wǎng)給的測(cè)試MapReduce
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar grep input output 'dfs[a-z.]+'
運(yùn)行輸出如下
INFO mapreduce.Job: map 0% reduce 0%
INFO mapreduce.Job: map 3% reduce 0%
INFO mapreduce.Job: map 7% reduce 0%
INFO mapreduce.Job: map 10% reduce 0%
INFO mapreduce.Job: map 13% reduce 0%
INFO mapreduce.Job: map 17% reduce 0%
INFO mapreduce.Job: map 20% reduce 0%
INFO mapreduce.Job: map 23% reduce 0%
INFO mapreduce.Job: map 27% reduce 0%
INFO mapreduce.Job: map 30% reduce 0%
INFO mapreduce.Job: map 33% reduce 0%
INFO mapreduce.Job: map 37% reduce 0%
INFO mapreduce.Job: map 40% reduce 0%
INFO mapreduce.Job: map 40% reduce 13%
INFO mapreduce.Job: map 43% reduce 13%
INFO mapreduce.Job: map 47% reduce 13%
INFO mapreduce.Job: map 53% reduce 13%
INFO mapreduce.Job: map 57% reduce 17%
INFO mapreduce.Job: map 57% reduce 19%
INFO mapreduce.Job: map 60% reduce 19%
INFO mapreduce.Job: map 63% reduce 20%
INFO mapreduce.Job: map 67% reduce 20%
INFO mapreduce.Job: map 70% reduce 22%
INFO mapreduce.Job: map 73% reduce 22%
INFO mapreduce.Job: map 73% reduce 24%
INFO mapreduce.Job: map 77% reduce 24%
INFO mapreduce.Job: map 77% reduce 26%
INFO mapreduce.Job: map 80% reduce 26%
INFO mapreduce.Job: map 83% reduce 26%
INFO mapreduce.Job: map 87% reduce 28%
INFO mapreduce.Job: map 90% reduce 28%
INFO mapreduce.Job: map 90% reduce 30%
INFO mapreduce.Job: map 93% reduce 30%
INFO mapreduce.Job: map 100% reduce 31%
INFO mapreduce.Job: map 100% reduce 100%
注:
(1) 其中map指的是map函數(shù)與reduce函數(shù),都為遞歸函數(shù)
(2) map函數(shù)還未完成,reduce函數(shù)就開(kāi)始運(yùn)行
(5) 將HDFS文件夾下載到linux文件夾
bin/hdfs dfs -get output output
- HDFS三個(gè)進(jìn)程全部以hadoop001啟動(dòng)
(1) 問(wèn)題發(fā)現(xiàn)
當(dāng)運(yùn)行stop-dfs.sh時(shí)輸出如下
Stopping namenodes on [hadoop001]
hadoop001: stopping namenode
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode
此時(shí)Secondary namenodes在0.0.0.0上,但是我們想要讓secondary namenode也在hadoop001上啟動(dòng)
(2) 設(shè)置
NN修改的是core-site.xml
DN修改的是slaves文件
SNN: 由于SNN是HDFS組件服務(wù)的進(jìn)程,所以去hdfs-default.xml中修改(可以從官網(wǎng)configuration側(cè)邊欄找到)
在hdfs-site.xml中添加
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop001:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>hadoop001:50091</value>
</property>
- JPS命令
(1) jps來(lái)源
/usr/java/jdk1.7.0_79/bin/jps
也就是說(shuō)jps來(lái)自于java
(2) root用戶看JPS, 會(huì)如下顯示
32573 Jps
31530 -- process information unavailable
31648 -- process information unavailable
31808 -- process information unavailable
此時(shí)并不知道上述進(jìn)程是否真的存在
對(duì)于process information unavailable的正確處理方式
a. 找到其進(jìn)程號(hào)
b. ps -ef | grep pid 確認(rèn)該進(jìn)程是否存在
if exsit:
可以知道哪個(gè)用戶運(yùn)行此進(jìn)程
su - 用戶, 切換到該用戶進(jìn)去查看
else if 不存在:
手動(dòng)刪除此文件夾
其殘留信息都保存在/tmp/hsperdata_hadoop文件夾下
如下顯示
-rw------- 1 hadoop hadoop 32768 Dec 3 04:30 31530
-rw------- 1 hadoop hadoop 32768 Dec 3 04:30 31648
-rw------- 1 hadoop hadoop 32768 Dec 3 04:29 31808
當(dāng)刪除某一個(gè)文件夾, 如刪除31530, 再執(zhí)行JPS顯示如下
32965 Jps
31648 -- process information unavailable
31808 -- process information unavailable
注: 未經(jīng)過(guò)ps -ef確認(rèn)該進(jìn)程存在就直接刪除是不好的,
因?yàn)榧词箘h除/tmp/hsperdata_hadoop下的文件,
該進(jìn)程仍然存在,但是基于jps的監(jiān)控等shell文件認(rèn)為該進(jìn)程消失,
從而采取一系列措施
12 ssh
(1) 端口號(hào)為22
(2) [hadoop@hadoop001 ~]$ ssh 192.168.110.120
代表以hadoop用戶去連接192.168.110.120的機(jī)器
(3) ssh root@192.168.110.120 date
連接云主機(jī)并將date結(jié)果返回給客戶端
(4) 兩個(gè)linux系統(tǒng)之間如何傳輸
a. scp
eg. scp test.md 192.168.110.120:/home/hadoop
將本地test.md傳到遠(yuǎn)程主機(jī)上
scp 192.168.110.120:/home/hadoop/test.md newTest.md 將育成主機(jī)上的文件傳回來(lái)
b. ssh多臺(tái)機(jī)器互相信任關(guān)系
假如云主機(jī)是生產(chǎn)機(jī)器,無(wú)法有密碼,想要互相傳輸文件就需要配置相互信任關(guān)系
配置相互信息關(guān)系的步驟
a. ssh-keygen
b. 此時(shí)在.ssh文件夾下會(huì)生成如下文件
-rw------- 1 hadoop hadoop 1675 id_rsa
-rw-r--r-- 1 hadoop hadoop 398 id_rsa.pub
c. cat id_rsa.pub >> authorized_keys
(注: chmod 700 -R ~/.ssh并且chmod 600 ~/.ssh/authorized_keys)
d. 將遠(yuǎn)程主機(jī)的id_rsa.pub文件scp到本機(jī)上
scp 192.168.110.120:/home/hadoop/id_rsa.pub id_rsa.pub1
e. cat id_rsa.pub1 >> authorized_keys
f. 在 /etc/hosts上配置多臺(tái)機(jī)器的ip和host的對(duì)應(yīng)關(guān)系(注意)
g. 將authorized_keys用scp命令傳輸?shù)搅硗獾闹鳈C(jī)
- hadoop目錄
drwxr-xr-x 2 hadoop hadoop 4096 Mar 23 2016 bin 命令都保存與此文件夾
drwxr-xr-x 3 hadoop hadoop 4096 Mar 23 2016 sbin 啟動(dòng)腳本和停止腳本都保存在此文件夾
drwxr-xr-x 6 hadoop hadoop 4096 Mar 23 2016 etc 配置文件都保存與此文件夾 其他大數(shù)據(jù)組件有可能以config conf命令此類文件夾
drwxr-xr-x 3 hadoop hadoop 4096 Mar 23 2016 lib 存儲(chǔ)jar包
drwxr-xr-x 2 hadoop hadoop 4096 Mar 23 2016 bin-mapreduce1
drwxr-xr-x 3 hadoop hadoop 4096 Mar 23 2016 cloudera
drwxr-xr-x 5 hadoop hadoop 4096 Mar 23 2016 examples
drwxr-xr-x 3 hadoop hadoop 4096 Mar 23 2016 examples-mapreduce1
drwxr-xr-x 2 hadoop hadoop 4096 Mar 23 2016 include
drwxr-xr-x 2 hadoop hadoop 4096 Mar 23 2016 libexec
-rw-r--r-- 1 hadoop hadoop 17087 Mar 23 2016 LICENSE.txt
drwxrwxr-x 3 hadoop hadoop 4096 Dec 17 06:45 logs
-rw-r--r-- 1 hadoop hadoop 101 Mar 23 2016 NOTICE.txt
drwxrwxr-x 2 hadoop hadoop 4096 Dec 2 06:50 output
-rw-r--r-- 1 hadoop hadoop 1366 Mar 23 2016 README.txt
drwxr-xr-x 4 hadoop hadoop 4096 Mar 23 2016 share
drwxr-xr-x 17 hadoop hadoop 4096 Mar 23 2016 src