1.Hadoop
廣義:以hadoop軟件為主的生態(tài)圈
狹義:hadoop軟件
hadoop 1.x
hdfs 存儲(chǔ)數(shù)據(jù)
mapreduce 分布式計(jì)算以及任務(wù)調(diào)度
hadoop 2.x
hdfs? 存儲(chǔ)數(shù)據(jù) 分布式文件系統(tǒng)
mapreduce 分布式計(jì)算 開發(fā)難度高、計(jì)算慢(使用磁盤shuffle) 生產(chǎn)使用hive/spark
yarn 資源+job調(diào)度管理系統(tǒng)
在部署hadoop的過程中换棚,一般不使用源碼部署式镐,使用CDH、ambari固蚤、hdp部署
CDH的hadoop與Apache的 Hadoop的區(qū)別:CDH修復(fù)Hadoop的bug娘汞。
2.安裝部署hadoop
添加hadoop用戶
[root@i-8ejfksrr ~]# useradd hadoop
配置hadoop的無密碼登陸
[root@i-8ejfksrr ~]# cat /etc/sudoers |grep hadoop
[root@i-8ejfksrr ~]# vim /etc/sudoers
在文件中添加:hadoop? ALL=(ALL)? ? ? NOPASSWD: ALL
修改主機(jī)名稱
[root@i-8ejfksrr ~]# vim /etc/hosts
修改內(nèi)容為:127.0.1.1? ? ? hadoop001
[root@i-8ejfksrr ~]# vim /etc/sysconfig/network
修改內(nèi)容如下:
NETWORKING=yes
HOSTNAME=hadoop001
登陸hadoop用戶:
[root@hadoop001 ~]# su - hadoop
創(chuàng)建存放hadoop文件的目錄
[hadoop@hadoop001 ~]$ mkdir app
下載hadoop文件
[root@hadoop001 app]# wget http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz
解壓文件:
[hadoop@hadoop001 app]$ tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz
移動(dòng)到hadoop內(nèi)部修改環(huán)境變量文件
[hadoop@hadoop001 app]$ cd hadoop-2.6.0-cdh5.7.0/etc/hadoop
[hadoop@hadoop001 hadoop]$ vim hadoop-env.sh
添加的內(nèi)容如下:
export JAVA_HOME=/usr/java/jdk1.8.0_181 (java一定要配置,在jps時(shí)會(huì)出現(xiàn)錯(cuò)誤)
export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
啟動(dòng)hadoop 有三種模式
Local (Standalone) Mode: 單機(jī) 沒有進(jìn)程? 不用
Pseudo-Distributed Mode: 偽分布式 1臺(tái)機(jī)器 進(jìn)程? 學(xué)習(xí)
Fully-Distributed Mode: 分布式 進(jìn)程? 生產(chǎn)
修改core-site.xml文件
[hadoop@hadoop001 hadoop]$ vim core-site.xml
<configuration>
? ? <property>
? ? ? ? <name>fs.defaultFS</name>
? ? ? ? <value>hdfs://hadoop001:9000</value> <!--hadoop@hadoop001為主機(jī)名-->
? ? </property>
</configuration>
修改配置文件設(shè)置文本的復(fù)制數(shù)量
[hadoop@hadoop001 hadoop]$ vim hdfs-site.xml
修改內(nèi)容如下:
<configuration>
? ? <property>
? ? ? ? <name>dfs.replication</name>
? ? ? ? <value>1</value>
? ? </property>
</configuration>
設(shè)置無密碼登陸
如果有.ssh 文件要先刪除
[hadoop@hadoop001 ~]$ rm -rf .ssh/
[hadoop@hadoop001 ~]$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
添加信任
[hadoop@hadoop001 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
修改文件權(quán)限
[hadoop@hadoop001 .ssh]$ ls
[hadoop@hadoop001 .ssh]$ chmod 600 authorized_keys
下載相關(guān)軟件:
[hadoop@hadoop001 app]$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
[hadoop@hadoop001 app]$ wget http://prdownloads.sourceforge.net/findbugs/findbugs-3.0.1.tar.gz
[hadoop@hadoop001 app]$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz
解壓文件修改配置夕玩,添加環(huán)境變量
[hadoop@hadoop001 ~]# vim .bash_profile
export MVN_HOME=/home/hadoop/app/apache-maven-3.5.4
export PROTOC_HOME=/home/hadoop/app/protobuf-3.6.1
export FINDBUGS_HOME=/home/hadoop/app/findbugs-3.0.1
export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
export PATH=$HADOOP_PREFIX/bin:$JAVA_HOME/bin:$PATH
登陸hadoop001
[hadoop@hadoop001 ~]$ ssh hadoop001
切換到相應(yīng)目錄:
[hadoop@hadoop001 ~]$ cd ~/app/hadoop-2.6.0-cdh5.7.0/
格式化namenode
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs --format
啟動(dòng)dfs
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ sbin/start-dfs.sh
使用jps查看啟動(dòng)的進(jìn)程
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ jps
5953 NameNode
6227 SecondaryNameNode
6777 Jps
6074 DataNode
通過頁面查看自己部署是否成功: http://ip:50070
可以看到界面你弦,就表示已經(jīng)安裝完成惊豺。
修改yarn的配置文件
修改etc/hadoop/mapred-site.xml
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ vi etc/hadoop/mapred-site.xml
修改的內(nèi)容如下:
<configuration>
? ? <property>
? ? ? ? <name>mapreduce.framework.name</name>
? ? ? ? <value>yarn</value>
? ? </property>
</configuration>
修改etc/hadoop/yarn-site.xml:
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ vi etc/hadoop/yarn-site.xml
修改內(nèi)容如下:
<configuration>
? ? <property>
? ? ? ? <name>yarn.nodemanager.aux-services</name>
? ? ? ? <value>mapreduce_shuffle</value>
? ? </property>
</configuration>
啟動(dòng)yarn
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$? sbin/start-yarn.sh
查看yarn是否啟動(dòng)成功:
http://ip:8088/
3.jps命令解析
jps命令的位置:
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ which jps
/usr/java/jdk1.8.0_181/bin/jps
使用hadoop用戶查看jps
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ jps
16188 DataNode
16379 SecondaryNameNode
16566 Jps
16094 NameNode
使用其他用戶(root)查找jps
[root@hadoop001 ~]$ jps
16188 process information unavailable
16379 process information unavailable
16566 Jps
16094 process information unavailable
出現(xiàn)process information unavailable的處理方法
1.查找進(jìn)程號(hào) pid
2.ps -ef|grep pip 查看當(dāng)前進(jìn)程是否存在
3.假如不存在,清空殘留信息
rm -f /tmp/hsperfdata_${user}/pid文件
4.假如存在禽作,可以看到進(jìn)程屬于的用戶尸昧,切換到相應(yīng)的用戶
假如刪除rm -f /tmp/hsperfdata_${user}/pid文件
? 進(jìn)程不掛,但是jps命令不顯示了旷偿,所依賴的腳本都會(huì)有問題
相關(guān)介紹
1.數(shù)據(jù)塊大小
dfs.blocksize 默認(rèn)值為134217728字節(jié)(128M)
在存儲(chǔ)的時(shí)候烹俗,一個(gè)數(shù)據(jù)大小為128M,這個(gè)可以根據(jù)具體情況修改
需要修改hdfs-default.xml,如下:
<configuration>
? ? <property>
? ? ? ? <name>dfs.blocksize</name>
? ? ? ? <value>134217728</value>
? ? </property>
</configuration>
如果存儲(chǔ)260M的文件,假設(shè)每個(gè)文件的副本數(shù)為3,文件大小為128M萍程,實(shí)際的存儲(chǔ)空間為780M幢妄,數(shù)據(jù)塊的大小為6個(gè)。
2.HDFS架構(gòu)設(shè)計(jì)
主從架構(gòu):一個(gè)主節(jié)點(diǎn)(NameNode,NN)和多個(gè)從數(shù)據(jù)節(jié)點(diǎn)(DataNode,DN),還有一個(gè)備份節(jié)點(diǎn)(SecondaryNameNode,SNN)
NameNode(NN)
含義:文件系統(tǒng)的命令空間
包含:
1.存儲(chǔ)文件名稱
2.存儲(chǔ)文件目錄結(jié)構(gòu)
3.文件屬性(文件創(chuàng)建時(shí)間茫负,文件的權(quán)限磁浇,文件的副本數(shù))
4.文件與數(shù)據(jù)塊之間的對(duì)應(yīng)關(guān)系,在讀寫文件時(shí)朽褪,查找那個(gè)DN節(jié)點(diǎn),這個(gè)映射關(guān)系通過blockmap存儲(chǔ)
NameNode節(jié)點(diǎn)不會(huì)持久化存儲(chǔ)blockmap(映射關(guān)系),集群在啟動(dòng)時(shí)和運(yùn)行時(shí)无虚,DataNode發(fā)送blockreport給NameNode,以此NameNode在內(nèi)存中動(dòng)態(tài)存儲(chǔ)blockmap缔赠。
作用:
1.管理文件系統(tǒng)的命名空間,維護(hù)文件系統(tǒng)樹友题,以兩種文件永久保存在磁盤嗤堰。
2.命名空間鏡像文件fsimage
3.編輯日志editlog
屬性:
1.設(shè)置檢查點(diǎn)的目錄:
<configuration>
? ? <property>
? ? ? ? <name>dfs.namenode.checkpoint.dir</name>
? ? ? ? <value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
? ? </property>
</configuration>
2.設(shè)置檢查點(diǎn)操作目錄:
<configuration>
? ? <property>
? ? ? ? <name>dfs.namenode.checkpoint.edits.dir</name>
? ? ? ? <value>${dfs.namenode.checkpoint.dir}</value>
? ? </property>
</configuration>
3.設(shè)置檢查點(diǎn)檢查的周期
<configuration>
? ? <property>
? ? ? ? <name>dfs.namenode.checkpoint.check.period</name>
? ? ? ? <value>60</value>? <!--默認(rèn)為60s,可以根據(jù)需要設(shè)置-->
? ? </property>
</configuration>
SecondaryNameNode
為了存儲(chǔ)fsimage+editlog,并且定期合并fsimage(鏡像)+editlog(操作日志),形成新的fsimage,將結(jié)果推送給NameNode,作為一個(gè)檢查點(diǎn)(checkpoint)
DataNode
存儲(chǔ)數(shù)據(jù)塊和數(shù)據(jù)塊的校驗(yàn)和
DataNodeN與NameNode的底層通信使用netty,DataNode向NameNode每3秒發(fā)送一個(gè)心跳包,表明自己還存活,并且每10秒發(fā)送一個(gè)blockreport到NameNode
副本存放策略
Hadoop的默認(rèn)布局策略是在運(yùn)行客戶端的節(jié)點(diǎn)上存放第一個(gè)副本(如果客戶端在集群之外,就隨機(jī)選擇一個(gè)節(jié)點(diǎn),不過系統(tǒng)會(huì)避免選擇哪些存儲(chǔ)太慢或者太忙的節(jié)點(diǎn))。第二個(gè)副本放在與第一個(gè)不同且隨機(jī)選擇的機(jī)架節(jié)點(diǎn)上度宦。第三個(gè)副本與第二個(gè)副本放在同一個(gè)機(jī)架上踢匣,且隨機(jī)選擇另外一個(gè)節(jié)點(diǎn)。