成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

hadoop配置與wordcount

_Zhao / 1215人閱讀

摘要:谷歌好久解決不了。這個(gè)悲傷的故事告訴我們,出了問(wèn)題先去看看文件定位錯(cuò)誤,大家的錯(cuò)誤千奇百怪,谷歌不是萬(wàn)能的。由此可見(jiàn)這樣的配置只是僅僅能夠作為熟悉分布式環(huán)境用途,根本達(dá)不到能夠解決問(wèn)題的條件。

hadoop配置與wordcount

參考的博客大多都是hadoop2.x和低版本的java之上的,配置過(guò)程寫出來(lái)看似很簡(jiǎn)單,看別人的博客也感覺(jué)步驟都差不多,但是自己配置時(shí)候出了很多問(wèn)題:datanode啟動(dòng)不了,網(wǎng)頁(yè)不能正常顯示,datanode莫名死掉,resourcemanager啟動(dòng)不了,nodemanager啟動(dòng)不了,mapreduce過(guò)程中無(wú)法連接到slave等等。這個(gè)過(guò)程看博客看日志折騰了許多時(shí)間才弄好,記錄一下。

我是在虛擬機(jī)中安裝了四個(gè)linux系統(tǒng)作為節(jié)點(diǎn),所需環(huán)境相同,因此這里先配置一臺(tái),然后用虛擬機(jī)自帶的功能直接復(fù)制得到其他三臺(tái)。

環(huán)境:

Macos , Parallels Desktop

Linux 16.04

Jdk 1.8.0

Hadoop 3.2.0

Java 環(huán)境配置

在oracle官網(wǎng)下載最新的jdk壓縮文件,復(fù)制到安裝的目標(biāo)目錄下解壓:

sudo tar -zxvf jdk-12_linux-x64_bin.tar.gz
sudo rm jdk-12_linux-x64_bin.tar.gz

然后配置環(huán)境變量??梢詫懺趡/.bashrc或者/etc/profile中,其中~/.bashrc是在用戶的主目錄下,只對(duì)當(dāng)前用戶生效,/etc/profile是所有用戶的環(huán)境變量。

vim /etc/profile

在末尾加入jdk的環(huán)境變量

JAVA_HOME=/usr/lib/jdk-12
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

之后source /etc/profile生效,java —version檢查是否配置正確。

在后面啟動(dòng)resourcemanager時(shí)候出現(xiàn)了問(wèn)題,更換成了jdk8,過(guò)程同上。

ssh 免密鑰連接

接著安裝hadoop,過(guò)程放在下一部分,安裝好了之后復(fù)制生成三個(gè)相同環(huán)境的虛擬機(jī)。我用的是parallels,相比于其他的比較穩(wěn)定易用。

接著就是分布式的部分了。純的分布式是很難實(shí)現(xiàn)的,hadoop仍然是用一個(gè)master來(lái)集中式地管理數(shù)據(jù)節(jié)點(diǎn),master并不存儲(chǔ)數(shù)據(jù),而是將數(shù)據(jù)存儲(chǔ)在datanode之中,這里命名為slave1, slave2, slave3三個(gè)datanode,網(wǎng)絡(luò)連接均為橋接。因此master需要能免密鑰登陸到slave。添加節(jié)點(diǎn)的ip地址(為了在ip變化時(shí)候不用再重新配置,可以配置靜態(tài)ip):

vim /etc/hosts
192.168.31.26   master
192.168.31.136  slave1
192.168.31.47   slave2
192.168.31.122  slave3

vim /etc/hostname
master # 分別配置slave1, slave2, slave3

ping slave1 # 測(cè)試

安裝ssh,這個(gè)在ubuntu官方的源里面很慢,我試圖換到國(guó)內(nèi)的清華和阿里云等的源,但里面是沒(méi)有的,也可能是有不同的版本之類的原因吧。懶得去管的話直接耐心等待就好了。

sudo apt-get install ssh

然后生成公鑰和私鑰:

ssh-keygen -t rsa

這里默認(rèn)路徑是用戶主目錄下.ssh,一路回車就好了。

使每臺(tái)主機(jī)能夠免密鑰連接自己:

cp .id_rsa.pub authorized_keys

接著為了使master能夠免密鑰連接到slave,將master的公鑰追加到每個(gè)slave的authorized_keys中。


然后測(cè)試是否能夠正常連接:

ssh slave1
安裝配置hadoop

從官網(wǎng)下載hadoop3.2,解壓到/usr/lib/。并且將讀權(quán)限分配給hadoop用戶

cd /usr/lib
sudo tar –xzvf hadoop-3.2.0.tar.gz
chown –R hadoop:hadoop hadoop #將文件夾"hadoop"讀權(quán)限分配給hadoop普通用戶
sudo rm -rf hadoop-3.2.0.tar.gz

添加環(huán)境變量:

HADOOP_HOME=/usr/lib/hadoop-3.2.0
PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_HOME PATH

接著是最重要的配置hadoop部分,分別配置HADOOP_HOME/etc/hadoop/下的以下幾個(gè)文件:

hadoop-env.sh

export JAVA_HOME=/usr/lib/jdk1.8.0_201

core-site.xml


    
        hadoop.tmp.dir
        /usr/lib/hadoop-3.2.0/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://master:9000
    

hdfs-site.xml


    
        dfs.replication
        3
    
    
      dfs.name.dir
      /usr/lib/hadoop-3.2.0/hdfs/name
    
    
      dfs.data.dir
      /usr/lib/hadoop-3.2.0/hdfs/data
    

yarn-site.xml


    
      yarn.resourcemanager.address
      master:8032
    
    
      yarn.resourcemanager.scheduler.address
      master:8030
    
    
      yarn.resourcemanager.resource-tracker.address
      master:8031
    
    
      yarn.resourcemanager.admin.address
      master:8033
    
    
      yarn.resourcemanager.webapp.address
      master:8088
    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
        yarn.nodemanager.aux-services.mapreduce.shuffle.class
        org.apache.hadoop.mapred.ShuffleHandler
    

mapred-site.xml


    
        mapreduce.framework.name
        yarn
    
        
        mapred.job.tracker
        master:49001
    
    
        mapred.local.dir
        /usr/lib/hadoop-3.2.0/var
    

        
                yarn.app.mapreduce.am.env
                HADOOP_MAPRED_HOME=$HADOOP_HOME
        
        
                mapreduce.map.env
                HADOOP_MAPRED_HOME=$HADOOP_HOME
        
        
                mapreduce.reduce.env
                HADOOP_MAPRED_HOME=$HADOOP_HOME
        

workers

slave1
slave2
slave3

這些做完之后就配置完了,接著將整個(gè)文件夾復(fù)制到其他三臺(tái)主機(jī)就完成了。

啟動(dòng)

格式化namenode

hdfs namenode -format # 前提是已經(jīng)將HADOOP_HOME添加到環(huán)境變量中

如果看到如上INFO說(shuō)明這一步成功了。然后運(yùn)行start腳本:

./sbin/start-all.sh # 在hadoop 2.x版本放在./bin/下面

jps查看Java進(jìn)程,master應(yīng)該包含NameNode, SecondaryNameNode, ResourceManager,slave應(yīng)該包含DataNode, NodeManager。這里很常見(jiàn)的問(wèn)題包括沒(méi)有datanodes,沒(méi)有訪問(wèn)權(quán)限,resouecemanager不能啟動(dòng)等,一些原因我寫在下面了,大部分都是配置出了問(wèn)題,查看log文件就能找到原因。

通過(guò)master:9870可以網(wǎng)頁(yè)查看集群狀態(tài)。

WordCount示例程序

wordcount可以說(shuō)是hadoop學(xué)習(xí)過(guò)程中的"hello world",網(wǎng)上可以找到源碼,也可以自己寫,我這里直接用了官方$HADOOP_HOME/share/hadoop/mapreduce/下的示例程序。

先將輸入文件傳到dfs中,我這里是自己寫了兩個(gè)含有"hadoop", "hello", "world"單詞的txt文件。然后運(yùn)行示例程序:

hdfs dfs -mkdir /in
hdfs dfs -put ~/Desktop/file*.txt /in
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /in /out

這里可以看到mapreduce分為map和reduce過(guò)程。mapreduce分為map,shuffle,reduce過(guò)程,先將大任務(wù)分到各個(gè)節(jié)點(diǎn)分別計(jì)算,然后shuffle是按照一定的規(guī)則將不同的key值分到不同的節(jié)點(diǎn)做整合,然后提交任務(wù)再reduce整合。查看結(jié)果:

hdfs dfs -cat /out/part-r-00000

至此hadoop集群環(huán)境才能說(shuō)是正確安裝了。接下來(lái)就是修改wordcount代碼自己玩了,上手后就可以自己寫了。

一些遇到的問(wèn)題

復(fù)制配置好的文件夾時(shí)候不小心復(fù)制錯(cuò)了,復(fù)制成了之前一次配置失敗時(shí)候用過(guò)的文件夾,導(dǎo)致datanode啟動(dòng)一直失敗,但是全程無(wú)提示。谷歌好久解決不了。后來(lái)看datanode的log文件找到錯(cuò)誤的地方,是core-site.xml出了問(wèn)題,修改之后重新格式化,啟動(dòng)成功。

這個(gè)悲傷的故事告訴我們,出了問(wèn)題先去看看log文件定位錯(cuò)誤,大家的錯(cuò)誤千奇百怪,谷歌不是萬(wàn)能的。

沒(méi)有resourcemanager和nodemanager:查看日志找到原因?yàn)閏lassNoFound(javax.XXXXXXX)。發(fā)現(xiàn)是由于java9以上的一些限制,默認(rèn)禁用了javax的API,參考博客得到解決辦法有兩個(gè):

yarn-env.sh中添加(但是我試過(guò)不可行,由于本人不會(huì)java,因此放棄深究)

export YARN_RESOURCEMANAGER_OPTS="--add-modules=ALL-SYSTEM"
export YARN_NODEMANAGER_OPTS="--add-modules=ALL-SYSTEM"

更換為jdk8

第一次運(yùn)行wordcount程序時(shí)候?qū)?HADOOP_HOME/etc/hadoop整個(gè)文件夾全傳入作為輸入,結(jié)果出錯(cuò),根據(jù)log發(fā)現(xiàn)是內(nèi)存不足,我的每個(gè)虛擬機(jī)只開(kāi)了1G的內(nèi)存。由此可見(jiàn)這樣的配置只是僅僅能夠作為熟悉hadoop分布式環(huán)境用途,根本達(dá)不到能夠解決問(wèn)題的條件。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74125.html

相關(guān)文章

  • hadoop運(yùn)行第一個(gè)實(shí)例wordcount

    摘要:引語(yǔ)這幾周事情比較多,兩周沒(méi)寫博客了,這周總算把的實(shí)例給運(yùn)行起來(lái),然后跑了一下官方的例子用于統(tǒng)計(jì)文件中單詞出現(xiàn)的次數(shù)。接下來(lái)是我成功運(yùn)行實(shí)例的記錄。 引語(yǔ): 這幾周事情比較多,兩周沒(méi)寫博客了,這周總算把hadoop的實(shí)例給運(yùn)行起來(lái),然后跑了一下官方的wordcount例子(用于統(tǒng)計(jì)文件中單詞出現(xiàn)的次數(shù))。接下來(lái)是我成功運(yùn)行實(shí)例的記錄。運(yùn)行的前提是安裝配置好hadoop(可以參考我上一篇...

    light 評(píng)論0 收藏0
  • Hadoop的“Hello world”---WordCount

    摘要:運(yùn)行程序運(yùn)行你的根目錄運(yùn)行這條命令后,會(huì)啟動(dòng)一個(gè)來(lái)運(yùn)行程序,而且會(huì)在集群上創(chuàng)建一個(gè)文件夾,將結(jié)果存在其中。 在安裝并配置好Hadoop環(huán)境之后,需要運(yùn)行一個(gè)實(shí)例來(lái)驗(yàn)證配置是否正確,Hadoop就提供了一個(gè)簡(jiǎn)單的wordcount程序,其實(shí)就是統(tǒng)計(jì)單詞個(gè)數(shù)的程序,這個(gè)程序可以算是Hadoop中的Hello World了。 MapReduce 原理 MapReduce其實(shí)就是采用分而治之的...

    sunnyxd 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<