溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hadoop/hdfs的示例分析

發(fā)布時間:2021-11-24 14:25:39 來源:億速云 閱讀:156 作者:小新 欄目:大數(shù)據(jù)

這篇文章給大家分享的是有關(guān)hadoop/hdfs的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

hadoop/hdfs

首先hadoop是apache基金會用java語言實現(xiàn)的開源軟件框架,實現(xiàn)在大量計算機(jī)組成的集群中對海量數(shù)據(jù)進(jìn)行分布式計算。

hadoop/hdfs和mfs都是分布式文件系統(tǒng),二者的比較如下

1、hdfs和mfs都是類似goolefs的實現(xiàn)方式,即一個master+多個chunkserver構(gòu)成的集群

2、都存在master單點故障問題

3、都支持在線擴(kuò)容

4、都是處理海量數(shù)據(jù)的,但對海量小文件處理乏力

差異:

1、hadoop基于java實現(xiàn),mfs基于c++實現(xiàn)

2、mfs提供的快照功能

3、

所以,首先要保證java平臺能夠正常運行,下載安裝jdk原碼薄,一般情況下將其解壓放至/usr/local然后創(chuàng)建軟連接。

hadoop單機(jī)模式:

[root@server1 local]# ln -s jdk1.7.0_79/ java

進(jìn)入/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

***如果是配置文件錯誤導(dǎo)致無法使用系統(tǒng)命令,那么需要使用絕對路徑來調(diào)用命令

編寫一個java小程序,測試java環(huán)境的正確性:

[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環(huán)境配置完成。

hadoop/hdfs安裝。

[root@server1 hadoop]# tar -xf hadoop-2.7.3.tar.gz -C /usr/local/

創(chuàng)建軟連接:

[root@server1 local]# ln -s hadoop-2.7.3/ hadoop

默認(rèn)情況下hadoop是運行在非分布式模式,在這種情況下,可以進(jìn)行debug。

嘗試使用hdfs對數(shù)據(jù)進(jìn)行統(tǒng)計:

[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下,使用網(wǎng)頁查看,以便修改配置文件:

[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也可以使用主機(jī)名,但最好要有解析。

</configuration>

[root@server1 hadoop]# vim hdfs-site.xml 

<configuration>

<property>

        <name>dfs.replication</name>

                <value>1</value>//分片數(shù)量,單機(jī)模式將其配置為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進(jìn)行多次登陸,所以,設(shè)置ssh輸入密碼登陸。

[root@server1 hadoop]# ssh-keygen //一路回車

[root@server1 hadoop]# ssh-copy-id  172.25.33.1//將密鑰分發(fā)給172.25.33.1,即剛才在core-site中設(shè)置的IP

使用ssh 172.25.33.1可以無密碼訪問即為成功

格式化namenode 節(jié)點

[root@server1 hadoop]# bin/hdfs namenode -format

啟動hdfs

[root@server1 hadoop]# sbin/start-dfs.sh 

使用jps查看本節(jié)點的資源信息

[root@server1 hadoop]# jps

2918 NameNode

3011 DataNode

3293 Jps

3184 SecondaryNameNode

此時可以通過網(wǎng)頁的50070訪問到關(guān)于hdfs的信息

***如果發(fā)現(xiàn)無法訪問,并提示not found,檢查本地的50070是否打開,然后清理/tmp/下的所有臨時文件,再清空瀏覽器的緩存,再次訪問。

創(chuàng)建hdfs目錄,以便于執(zhí)行mapreduce工作。 

bin/hdfs dfs -mkdir /user

bin/hdfs dfs -mkdir /user/root

***如果在這里沒有創(chuàng)建hdfs目錄,那么可能會出現(xiàn)沒有這個目錄的報錯。

項分布式系統(tǒng)中放一些東西

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.]+'

檢測輸出的結(jié)果,

[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

或直接執(zhí)行:

[root@server1 hadoop]# bin/hdfs dfs -cat output/* 

同時也可以在瀏覽器中查看結(jié)果是否成功

使用bin/hdfs dfs 回車,會發(fā)現(xiàn)好多可以執(zhí)行的命令。

分布式hdfs

停掉bin/stop-dfs.sh

啟動三臺虛擬機(jī):

為三臺虛擬機(jī)創(chuàng)建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 實現(xiàn)/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文件,添加要共享的主機(jī)IP 

172.25.33.3

172.25.33.4

啟動nfs

service nfs start

并檢查rpcbind and rpcidmapd 的狀態(tài)

如果二者的狀態(tài)不在運行,那么,nfs可能無法啟動

將二者體起來

在server1上執(zhí)行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用戶設(shè)置免密碼登陸

為每個hadoop設(shè)置密碼

切換到hadoop用戶,生成密鑰:

ssh-keygen 

然后將其分發(fā)出去:

ssh-copy-id 172.25.33.2/3/4

為每臺機(jī)器添加java環(huán)境變量

vim /etc/profile

source /etc/profile

將/home/hadoop目錄中文件的屬主屬組改為hadoop

編輯[root@server1 hadoop]# vim hdfs-site.xml 

將value 值改為2.

使用hadoop格式化,啟動hdfs

使用jps查看發(fā)現(xiàn)

[hadoop@server1 hadoop]$ jps

17846 Jps

17737 SecondaryNameNode

17545 NameNode

在本地沒有了datanode,在3,4上看,發(fā)現(xiàn)數(shù)據(jù)節(jié)點已經(jīng)傳過來了。

jps

[hadoop@server3 ~]$ jps

3005 DataNode

3110 Jps

此時可能有各種各樣的原因?qū)е赂鞣N錯誤,因此,如果出現(xiàn)某個節(jié)點無法啟動,可以在hadoop/對應(yīng)目錄下有l(wèi)og/下邊有各種日志,方便派錯哦。

此次錯誤主要是namenode無法啟動,經(jīng)過派錯發(fā)現(xiàn),50070端口被java已經(jīng)占用,所以,果斷一個killall - 9 java,弄死他,然后在從新格式化,啟動,即OK ~

創(chuàng)建hdfs執(zhí)行目錄:

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的資源管理器,他的設(shè)計思想時將jobTracker拆分成了兩個獨立的服務(wù),一個是全劇的資源管理器,ResourceManager和每個應(yīng)用程序特有的ApplicationMaster

ResourceManager負(fù)責(zé)整個系統(tǒng)的資源分配和管理,而AM負(fù)責(zé)單個應(yīng)用程序的管理

其總體上仍然是M/S結(jié)構(gòu)。

hdfs資源遷移:

對新機(jī)器做根目錄共享和掛在,啟動datanode節(jié)點

[hadoop@server5 hadoop]$ sbin/hadoop-daemon.sh start datanode

在5上同樣要有hosts解析,同時要有sshkey免密碼鑰匙

在server1上執(zhí)行bin/hdfs dfsadmin -report可以看到server5在節(jié)點中。

在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的資源進(jìn)行操作。

刷新資源節(jié)點:

[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -refreshNodes

它會提示成功,但是,實際進(jìn)行的資源轉(zhuǎn)移正在進(jìn)行。

使用[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report

查看資源變化狀態(tài)。

當(dāng)資源進(jìn)行后,使用

[hadoop@server3 hadoop]$ sbin/hadoop-daemon.sh stop datanode

停掉該節(jié)點的資源。

使用bin/hdfs dfsadmin -report就會發(fā)現(xiàn),資源3已經(jīng)停止了。

使用jps已經(jīng)沒有資源信息了。

感謝各位的閱讀!關(guān)于“hadoop/hdfs的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI