您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關hadoop/hdfs的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
hadoop/hdfs
首先hadoop是apache基金會用java語言實現的開源軟件框架,實現在大量計算機組成的集群中對海量數據進行分布式計算。
hadoop/hdfs和mfs都是分布式文件系統,二者的比較如下
1、hdfs和mfs都是類似goolefs的實現方式,即一個master+多個chunkserver構成的集群
2、都存在master單點故障問題
3、都支持在線擴容
4、都是處理海量數據的,但對海量小文件處理乏力
差異:
1、hadoop基于java實現,mfs基于c++實現
2、mfs提供的快照功能
3、
所以,首先要保證java平臺能夠正常運行,下載安裝jdk原碼薄,一般情況下將其解壓放至/usr/local然后創建軟連接。
hadoop單機模式:
[root@server1 local]# ln -s jdk1.7.0_79/ java
進入/etc/profile下修改java路徑(java_home,classpath,path)。
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source使配置文件生效。
[root@server1 java]# source /etc/profile
查看配置是否正確
[root@server1 java]# echo $JAVA_HOME
/usr/local/java
[root@server1 java]# echo $CLASSPATH
.:/usr/local/java/lib:/usr/local/java/jre/lib
[root@server1 java]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/bin
***如果是配置文件錯誤導致無法使用系統命令,那么需要使用絕對路徑來調用命令
編寫一個java小程序,測試java環境的正確性:
[root@server1 java]# cat test.java
class test
{
public static void main (String args[]){
System.out.println("hello world ");
}
}
[root@server1 java]# !jav
javac test.java
[root@server1 java]# java test
hello world
至此,java環境配置完成。
hadoop/hdfs安裝。
[root@server1 hadoop]# tar -xf hadoop-2.7.3.tar.gz -C /usr/local/
創建軟連接:
[root@server1 local]# ln -s hadoop-2.7.3/ hadoop
默認情況下hadoop是運行在非分布式模式,在這種情況下,可以進行debug。
嘗試使用hdfs對數據進行統計:
[root@server1 hadoop]# pwd
/usr/local/hadoop
$mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
$ cat output/*
[root@server1 hadoop]# cat output/*
1dfsadmin
1dfs.replication
hdfs偽分布模式
很多hadoop配置的模版在share/doc中都有,所以將其移到/var/www/html下,使用網頁查看,以便修改配置文件:
[root@server1 doc]# cp hadoop/ /var/www/html/ -r
[root@server1 hadoop]# pwd
/usr/local/hadoop/etc/hadoop
[root@server1 hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.25.33.1:9000</value>
</property>namenode IP也可以使用主機名,但最好要有解析。
</configuration>
[root@server1 hadoop]# vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>//分片數量,單機模式將其配置為1.
</property>
</configuration>
[root@server1 hadoop]# vim hadoop-env.sh
24 # The java implementation to use.
25 export JAVA_HOME=/usr/local/java
在啟動hdfs時會使用ssh進行多次登陸,所以,設置ssh輸入密碼登陸。
[root@server1 hadoop]# ssh-keygen //一路回車
[root@server1 hadoop]# ssh-copy-id 172.25.33.1//將密鑰分發給172.25.33.1,即剛才在core-site中設置的IP
使用ssh 172.25.33.1可以無密碼訪問即為成功
格式化namenode 節點
[root@server1 hadoop]# bin/hdfs namenode -format
啟動hdfs
[root@server1 hadoop]# sbin/start-dfs.sh
使用jps查看本節點的資源信息
[root@server1 hadoop]# jps
2918 NameNode
3011 DataNode
3293 Jps
3184 SecondaryNameNode
此時可以通過網頁的50070訪問到關于hdfs的信息
***如果發現無法訪問,并提示not found,檢查本地的50070是否打開,然后清理/tmp/下的所有臨時文件,再清空瀏覽器的緩存,再次訪問。
創建hdfs目錄,以便于執行mapreduce工作。
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/root
***如果在這里沒有創建hdfs目錄,那么可能會出現沒有這個目錄的報錯。
項分布式系統中放一些東西
bin/hdfs dfs -put etc/hadoop/ input
運行mapreduce的一些測試方法:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
檢測輸出的結果,
[root@server1 hadoop]# bin/hdfs dfs -get output output
[root@server1 hadoop]# cat output/*
6dfs.audit.logger
4dfs.class
3dfs.server.namenode.
2dfs.period
2dfs.audit.log.maxfilesize
2dfs.audit.log.maxbackupindex
1dfsmetrics.log
1dfsadmin
1dfs.servers
1dfs.replication
1dfs.file
或直接執行:
[root@server1 hadoop]# bin/hdfs dfs -cat output/*
同時也可以在瀏覽器中查看結果是否成功
使用bin/hdfs dfs 回車,會發現好多可以執行的命令。
分布式hdfs
停掉bin/stop-dfs.sh
啟動三臺虛擬機:
為三臺虛擬機創建hadoop用戶,uid=1000
mv hadoop-2.7.3/ /home/hadoop/
vim /etc/profile
export JAVA_HOME=/home/hadoop/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
改變/home/hadoop/下的所有文件的所屬主和所屬組均為hadoop
在2,3,4上均安裝nfs-utils 實現/home/hadoop目錄共享
修改配置文件,將/home/hadoop共享出去
vim /etc/exports
/home/hadoop 172.25.33.0/24(rw,anonuid=1000,anongid=1000)
為server1添加slaves
[root@server1 hadoop]# pwd
/home/hadoop/hadoop/etc/hadoop
編輯slaves文件,添加要共享的主機IP
172.25.33.3
172.25.33.4
啟動nfs
service nfs start
并檢查rpcbind and rpcidmapd 的狀態
如果二者的狀態不在運行,那么,nfs可能無法啟動
將二者體起來
在server1上執行showmount -e來查看自己的共享
使用exports -v 輸出自己的共享
exportfs -v
/shared 172.25.33.2/24(rw,wdelay,root_squash,no_subtree_check)
/var/www/html/upload
172.25.33.2/24(rw,wdelay,root_squash,no_subtree_check)
/home/hadoop 172.25.33.0/24(rw,wdelay,root_squash,no_subtree_check,anonuid=1000,anongid=1000)
在server2,3,4上掛在/home/hadoop /home/hadoop
為2,3,4的hadoop用戶設置免密碼登陸
為每個hadoop設置密碼
切換到hadoop用戶,生成密鑰:
ssh-keygen
然后將其分發出去:
ssh-copy-id 172.25.33.2/3/4
為每臺機器添加java環境變量
vim /etc/profile
source /etc/profile
將/home/hadoop目錄中文件的屬主屬組改為hadoop
編輯[root@server1 hadoop]# vim hdfs-site.xml
將value 值改為2.
使用hadoop格式化,啟動hdfs
使用jps查看發現
[hadoop@server1 hadoop]$ jps
17846 Jps
17737 SecondaryNameNode
17545 NameNode
在本地沒有了datanode,在3,4上看,發現數據節點已經傳過來了。
jps
[hadoop@server3 ~]$ jps
3005 DataNode
3110 Jps
此時可能有各種各樣的原因導致各種錯誤,因此,如果出現某個節點無法啟動,可以在hadoop/對應目錄下有log/下邊有各種日志,方便派錯哦。
此次錯誤主要是namenode無法啟動,經過派錯發現,50070端口被java已經占用,所以,果斷一個killall - 9 java,弄死他,然后在從新格式化,啟動,即OK ~
創建hdfs執行目錄:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop
bin/hdfs dfs -put etc/hadoop/ input
bin/hdfs dfs -cat input/*
在瀏覽器中同樣可以看到
使用bin/hdfs dfsadmin -report可以查看資源輸出和占用情況。
啟動資源管理器:
yarn
yarn是hadoop的資源管理器,他的設計思想時將jobTracker拆分成了兩個獨立的服務,一個是全劇的資源管理器,ResourceManager和每個應用程序特有的ApplicationMaster
ResourceManager負責整個系統的資源分配和管理,而AM負責單個應用程序的管理
其總體上仍然是M/S結構。
hdfs資源遷移:
對新機器做根目錄共享和掛在,啟動datanode節點
[hadoop@server5 hadoop]$ sbin/hadoop-daemon.sh start datanode
在5上同樣要有hosts解析,同時要有sshkey免密碼鑰匙
在server1上執行bin/hdfs dfsadmin -report可以看到server5在節點中。
在server1上,添加datanode控制文件:
vim hdfs.site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop/etc/hadoop/exludes</value>
</property>
</configuration>
添加控制資源信息
[hadoop@server1 hadoop]$ vim /home/hadoop/hadoop/etc/hadoop/exludes
172.25.33.3//對server3的資源進行操作。
刷新資源節點:
[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -refreshNodes
它會提示成功,但是,實際進行的資源轉移正在進行。
使用[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report
查看資源變化狀態。
當資源進行后,使用
[hadoop@server3 hadoop]$ sbin/hadoop-daemon.sh stop datanode
停掉該節點的資源。
使用bin/hdfs dfsadmin -report就會發現,資源3已經停止了。
使用jps已經沒有資源信息了。
感謝各位的閱讀!關于“hadoop/hdfs的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。