安裝準備工做java
準備5臺服務器,hadoop01部署namenode resourcemanager,hadoop02-hadoop03是datanode,hadoop04部署secondarynamenodenode
上傳hadoop-2.7.3.tar.gz /softlinux
虛擬機Java安裝完畢web
卸載原有的openjdk的版本shell
# java -version若是看到有openjdk的字樣就是說明是系統帶的openjdk版本編程
# rpm -qa|grep jdkubuntu
用相似以下的方法刪除上面的rpm包安全
#rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64bash
檢查是否還有jdk1.5的版本,有就刪除服務器
#rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
#解壓新下載的jdk的安裝包
配置環境變量
2.解壓hadoop
$tar -xzvf hadoop-2.7.3.tar.gz
3.配置環境變量
編輯/etc/profile,添加以下內容
export JAVA_HOME=/soft/jdk1.8.0_111
export HADOOP_HOME=/soft/hadoop-2.7.3
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
而且把以上的內容寫到/home/hadoop/.bashrc中
4.配置SSH免密碼登錄
$ssh-keygen -t rsa (四個回車)
執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
將公鑰拷貝到要免登錄的機器上
$cd /home/hadoop/.ssh
$cat id_rsa.pub >> ~/.ssh/authorized_keys
$chmod 600 authorized_keys
mkdir ./ssh
chmod 700 ~/.ssh cd ~/.ssh
ssh-keygen -t rsa
cd ~/.ssh
cat /root/.ssh/id_rsa.pub > authorized_keys
chmod 600 ~/.ssh/authorized_keys
scp authorized_keys userB:/root/.ssh/
注:A 爲管理主機,B爲被管理主機。
5.安裝pdsh工具
#tar -jxvf pdsh-2.29.tar.bz2
#cd pdsh-2.29
#./configure --with-ssh --with-rsh --with-mrsh --with-mqshell \
--with-qshell --with-dshgroups --with-machines=/etc/pdsh/machines
#make
#make install
查看pdsh的版本號已經可以使用的模塊信息
$pdsh -v
查看pdsh顯示當前全部加載的模塊信息
$pdsh -L
命令查看user001,user002,user003主機上的時間,經過SSH
$pdsh -w ssh:user00[1-3] "date"
-g參數制定主機組,此參數用來指定一組遠程主機,在編譯pdsh時能夠經過
「--with-dshgroups」參數來激活此選項,默承認以將一組主機列表寫入一個
文件中並放到本地主機的~/.dsh/group或/etc/dsh/group目錄下,這樣就可
以經過「-g」參數調用了。
$pdsh -R ssh -g userhosts "date"
其中「userhosts」是一個主機列表文件,能夠將此文件放在~/.dsh/group或
/etc/dsh/group目錄下
$pdcp -R ssh -w vm[2-5] -r ~/mpi ~/
$pdcp -R ssh -g hostname -r ~/mpi ~/
6.本地eclipse環境設置
(1).首先解壓hadoop-2.7.3.tar.gz ,建立_libs/_source/_test-source/_test-libs這四個文件夾
(2).進入hadoop-2.7.3目錄中,搜索jar包文件,先把搜索到的jar包文件所有複製到_libs文件夾下
(3).進入_libs文件夾下,搜索帶source文件名的包,搜索到後剪切所有放入_source文件夾下
(4).從_sources文件夾中搜索test-source的jar包,搜索到後剪切所有放入_test-source文件夾下
(5).注意上述四個文件夾要放在同一級的目錄下
(6).最後在_libs文件夾中搜索test的jar包,剪切後放入到新建的_test-libs包下
(7).打開eclipse,新建一個項目,配置buildpath目錄
(8).添加外部的jar包,找到_libs文件夾中全部的jar包,添加
(9).對於的源碼信息要關聯時,點擊Attach Source到_source文件夾中對應的包
7.注意配置文件的內容對於jar包的位置
(1).core-default.xml
...\_libs\hadoop-common-2.7.2.jar
(2).hdfs-default.xml
...\_libs\hadoop-hdfs.2.7.2.jar
(3).mapred-default.xml
...\_libs\hadoop-yarn-common-2.7.2.jar
(4).yarn-default.xml
...\_libs\hadoop-yarn-common-2.7.2.jar
(5).注意copy上面全部的內容到_conf文件夾中新建對於的同名的文件中
以便查找配置項進行配置
8.配置輔助名稱節點
從_conf文件中查找.xml文件結尾的內容中secondary字樣,找到配置輔助名稱節點的內容項
在_conf\hdfs-default.xml中,發現有dfs.namenode.secondary.http-address這個key字樣
修改hdfs-site.xml文件內容,增長以下內容
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop05:50090</value>
<description>
The secondary namenode http server address and port.
</description>
9.配置hadoop臨時目錄的參數
從_conf文件中查找.xml文件結尾的內容中local和hadoop.tmp.dir字樣,找到配置項內容的位置
在_conf\core-default.xml中,發現有<name>hadoop.tmp.dir</name>的字段
修改core-site.xml,添加以下的內容(具體目錄能夠本身定義,這裏暫時沒有改變)
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
10.配置namenode的數據存放目錄
同理在_conf\hdfs-default.xml中找到dfs.namenode.name.dir
修改hdfs-site.xml文件內容,增長以下內容
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
<description>Determines where on the local filesystem the DFS name node
should store the name table(fsp_w_picpath). If this is a comma-delimited list
of directories then the name table is replicated in all of the
directories, for redundancy. </description>
</property>
11.同理配置datanode的數據存放目錄
修改hdfs-site.xml文件內容,增長以下內容
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
12.同理配置secondarynamenode的數據目錄
修改hdfs-site.xml文件內容,增長以下內容
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
</property>
13.修改默認塊大小
修改hdfs-site.xml文件內容,增長以下內容
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
14.修改core-site.xml,添加以下信息
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01/</value>
</property>
</configuration>
15.修改hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
16.修改mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
17.修改yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
18.修改slaves
hadoop02
hadoop03
hadoop04
19.命令手動啓動namenode和datanode,其實hadoop-daemons.sh腳本是用到了hadoop-daemon.sh的腳本
該命令只能在namenode的機器上執行
$hadoop-daemon.sh start namenode //啓動namenode進程
$hadoop-daemon.sh stop namenode //關閉namenode進程
$hadoop-daemon.sh start datanode //在datanode節點上啓動該節點上的datanode進程
$hadoop-daemon.sh stop datanode
$hadoop-daemons.sh start datanode //能夠在任何namenode/datanode/secondarynamenode上執行
$hadoop-daemons.sh stop datanode
$hadoop-daemon.sh start secondarynamenode //只能在secondarynamenode上執行啓動進程
和該命令相似的有yarn-daemons.sh 和yarn-daemon.sh
20.查看節點信息位置
$hdfs getconf -namenodes //查看集羣中namenode是哪臺機器
$hdfs getconf -secondarynamenodes //查看集羣中secondarynamenode是哪臺機器
21.端口信息
HDFS中配置的namenode
rpc //8020
webui //50070
datanode
rpc //8032
webui //50075
secondarynamenode
webui //50090
historyServer
webui //19888
resourcemanager
webui //8088
nodemanager
webui //8042
linux系統中可用netstat -tuanlp這個命令來查看全部的內部端口、外部端口鏈接、
TCP/UDP的全部信息
22.修改日誌存放路徑
默認是在tar包目錄下面的log文件夾
修改tar包etc配置文件下的hadoop-env.sh文件夾
添加:
export HADOOP_LOG_DIR=/var/log/hadoop
查看分析日誌首先看的是.log文件, .out文件默認保留5個,會自動滾動覆蓋
23.四大模塊對於的配置文件
(1).common
hadoop-common-xxx.jar
core-site.xml
core-default.xml
(2).hdfs
hdfs-site.xml
hdfs-default.xml
(3).mapreduce
mapred-site.xml
mapred-default.xml
(4).yarn
yarn-site.xml
yarn-default.xml
24.Namenode和Datanode數據存放位置的說明
(1).Namenode的數據存放位置配置
在hdfs-default.xml中有以下參數能夠修改,能夠制定多個目錄,這樣就會在本機存在
多個目錄存放的同樣的namenode的鏡像文件數據,必定程度上保證了數據的安全性,並行寫
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
<description>Determines where on the local filesystem the DFS name node
should store the name table(fsp_w_picpath). If this is a comma-delimited list
of directories then the name table is replicated in all of the
directories, for redundancy. </description>
</property>
名稱配置多個目錄在於更可靠;
每一個目錄存放的內容都是相同的.
(2).Datanode的數據存放位置配置
數據節點配置多個目錄,不是副本;
每一個目錄存放的內容不一樣,用","號分割
在hdfs-default.xml中有以下參數能夠修改
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
<description>Determines where on the local filesystem an DFS data node
should store its blocks. If this is a comma-delimited
list of directories, then data will be stored in all named
directories, typically on different devices. The directories should be tagged
with corresponding storage types ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for HDFS
storage policies. The default storage type will be DISK if the directory does
not have a storage type tagged explicitly. Directories that do not exist will
be created if local filesystem permission allows.
</description>
</property>
(3).secondarynamenode數據存放位置
能夠存放多個目錄,存放的效果和存放namenode數據的多個目錄都是同樣的
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
<description>Determines where on the local filesystem the DFS secondary
name node should store the temporary p_w_picpaths to merge.
If this is a comma-delimited list of directories then the p_w_picpath is
replicated in all of the directories for redundancy.
</description>
</property>
25.Commission|Decommission服役和退役節點的配置以及節點refreshNodes
三個配置文件的關係:
salves文件規定的主機是啓動的時候容許啓動相應的datanode進行,可是不能保證是否
可以鏈接到namenode上。
真正保證可以鏈接到namenode上的配置文件是在hdfs-defaults.xml中的dfs.hosts這個參數值決定的,
這個值指向的是一個文件,文件中記錄了哪些主機容許鏈接到namenode上,若是爲空,全部的機器都是
被容許的。
在hdfs-defaults.xml中有個dfs.hosts.exclude參數,這個參數上配置的文件決定了排除哪些機器鏈接到
namenode的,也就是不容許鏈接到namenode上面的機器列表。
當include文件和exclude文件同時存在的時候:
include exclude 描述
no no 數據節點沒法鏈接到名稱節點
no yes 數據節點沒法鏈接到名稱節點
yes no 數據節點能夠鏈接到名稱節點
yes yes 數據節點能夠鏈接到名稱節點,但會退役
測試:
編輯配置文件
[hdfs-site.xml]
dfs.hosts=/soft/hadoop/etc/dfs-hosts-include.conf
dfs.hosts.exclude=/soft/hadoop/etc/dfs-hosts-exclude.conf
分發hdfs-site.xml文件到全部的節點
刷新節點,在namenode上面執行
$hdfs dfsadmin -refreshNodes
26.查看VERSION數據
clusterID=xxx (namenode==datanode)
storageID=xxx (datanode)
cTime:集羣建立時間
acl:訪問控制列表
layoutVersion:是一個負整數,描述HDFS的永久性的數據結構(佈局)版本
namespaceID:是文件系統的惟一的標識符,是文件系統首次格式化時設置的,任何datanode在註冊到namenode以前
都不知道namepaceID值,所以namenode可使用該屬性鑑別新建的datanode
27.安全模式
(1).namenode啓動時,合併p_w_picpath和edit成新的p_w_picpath,併產生新的edit log
(2).整個過程出於safe模式下,客戶端只能讀取
(3).namenode安全模式操做
$hdfs dfsadmin -safemode get //查看是什麼狀態
$hdfs dfsadmin -safemode enter //進入
$hdfs dfsadmin -safemode leave //離開
$hdfs dfsadmin -safemode wait //等待
(4).執行saveNamespace命令使得p_w_picpath文件和edit當即進行合併,生成新的p_w_picpath文件和edit日誌,可是2nn仍是老的
28.手動保存鏡像文件
$hdfs dfsadmin -fetchImage ~/ //保存鏡像至當前home目錄下
能夠在任何節點機器上執行,不要在安全模式下,至關於拷貝最新的p_w_picpath鏡像,就是namenode上最新的p_w_picpath文件
29.手動保存元數據
$hdfs dfsadmin -metasave xxx.meta
能夠在任何節點上面執行上面的命令,可是數據保存在namenode的log文件下
默認存放在{HADOOP_HOME}/logs/
30.文件系統健康檢查
$hdfs fsck /
查找HDFS某個文件的大小,塊的信息,所在節點的信息
$hdfs fsck /user/hadoop/xxxx.files -files -blocks -racks
webui查看數據節點上塊的信息:http://hadoop02:50075/blockScannerReport
31.啓動均衡器
$start-balancer.sh
啓動均衡器,讓集羣在數據存儲上更加平均,提升整個集羣的性能
32.HDFS命令
從本地上傳文件並刪除本地的文件
$hadoop fs -moveFromLocal hello.txt /usr/ubuntu/data/
刪除HDFS上面的文件
$hadoop fs -rm -R /usr/ubuntu/data/had*
查看hdfs上面文件的內容
$hadoop fs -cat /user/ubuntu/data/had*
查看目錄的統計信息,統計目錄數量/文件數/字節數
$hadoop fs -count /x/x/x/
追加HDFS上面的文件內容
$hadoop fs -appendToFile name.txt /user/ubuntu/data/hello.txt
33.快照
首先開啓快照
$hdfs dfsadmin -allowSnapshot /user/ubuntu/data
針對目錄進行snapshot,存放的快照文件在作快照目錄下面的.隱藏文件
$hadoop fs -createSnapshot /user/ubuntu/data snapshot-1
關閉快照屬性
$hdfs dfsadmin -disallowSnapshot /usr/ubuntu/data
34.回收站
(1).默認是0秒,意味着禁用回收站
(2).設置文件在回收站的駐留時間
[core-site.xml]
fs.trash.interval=1 //分鐘數計算
(3).經過shell命令刪除的文件,會進入trash
(4).每一個用戶都有本身的回收站(目錄)
$/usr/ubuntu/.Trash
(5).編程方式刪除不進入回收站,當即刪除,能夠調用
moveToTrash()方法,返回false,說明禁用回收站或者已經在站中
(6).恢復文件
將.Trash目錄的文件移動出來便可
hadoop fs -mv /user/ubuntu/.Trash/xx/xx/xx data/
(7).清空回收站
hadoop fs -expunge
(8).測試刪除回收站
hadoop fs -rm -R /user/ubuntu/.Trash
35.目錄配合和磁盤空間配額
$hdfs dfsadmin -setQuota 2 /user/ubuntu/data/day //指該目錄下能夠存在的文件數或目錄的數量
$hdfs dfsadmin -setSpaceQuota 20 /user/ubuntu/data/day //配置目錄的磁盤空間配額爲20字節