Local (Standalone) Model
MapReduce程序運行在本地,啟動jvm
啟動本地模式:
1、配置hadoop-env.sh配置文件中的java_home路徑
2、在hadoop安裝目錄下:mkdir input
3、在input目錄下創(chuàng)建任意文件
4、統(tǒng)計input文件夾下所有文件中的單詞的數(shù)量:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount input output
Pseudo-Distributed Mode
1、配置etc/hadoop/core-site.xml:
##配置namenode所在主機
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bxp:8020</value>
</property>
</configuration>
##配置文件臨時目錄
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/lib/hadoop-2.5.0-cdh5.3.6/data/tmp</value>
</property>
</configuration>
2、配置etc/hadoop/hdfs-site.xml:
##配置文件備份數(shù)量
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3、格式化文件系統(tǒng)
bin/hdfs namenode -format
4、啟動namenode
sbin/hadoop-daemon.sh start namenode
4、啟動datanode
sbin/hadoop-daemon.sh start datanode
5、瀏覽器訪問:http://bxp:50070,查看hdfs
6、命令行創(chuàng)建hdfs文件目錄:bin/hdfs dfs -mkdir -p /user/bxp/mapreduce/wordcount/input
7、命令行查看hdfs文件系統(tǒng)目錄結(jié)構(gòu):bin/hdfs dfs -ls -R /
8、上傳文件到hdfs文件系統(tǒng):bin/hdfs dfs -put input/test /user/bxp/mapreduce/wordcount/input(下載的命令為get,查看為cat)
9、運行
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /user/bxp/mapreduce/wordcount/input /user/bxp/mapreduce/wordcount/output
10、查看運行結(jié)果:
bin/hdfs dfs -cat /user/bxp/mapreduce/wordcount/output/part-r-00000
此時運行的結(jié)果和本地啟動時運行的結(jié)果相同,不同的是輸入的數(shù)據(jù)源一個是在本地,一個是在hdfs文件系統(tǒng)中。當(dāng)在etc/hadoop/core-site.xml中配置文件系統(tǒng)時,回去尋找文件系統(tǒng),當(dāng)沒有進行配置,默認會去尋找本地文件系統(tǒng)(file:///):
YARN on Single Node
1、在etc/hadoop/yarn-env.sh中配置JAVA_HOME
2、配置etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
</configuration>
3、在etc/hadoop/slaves文件中配datanode和nodemamager所在主機的主機名或ip(默認datanode和nodemanager在同一臺主機上)
localhost
4、啟動yarn
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
5、瀏覽器查看yarn的監(jiān)控界面:8088
6、接下來進行將mapreduce程序運行在yarn上的配置.
7、配置etc/hadoop/mapred-env.sh中的JAVA_HOME
8、重命名mapred-site.xml.template為mapred-site.xml并配置etc/hadoop/mapred-site.xml
##將mapreduce運行在yarn上,默認值是local
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
9、運行
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /user/bxp/mapreduce/wordcount/input /user/bxp/mapreduce/wordcount/output
10、查看運行結(jié)果:
bin/hdfs dfs -cat /user/bxp/mapreduce/wordcount/output/part-r-00000
此時的運行結(jié)果不變,不同的是之前的mapreduce程序運行在本地,此時的mapreduce程序運行在yarn上
Fully-Distributed Mode
啟動mapreduce歷史服務(wù)器
sbin/mr-jobhistory-daemon.sh start historyserver
配置yarn日志的聚集
聚集:應(yīng)用運行完成以后,將日志信息上傳到HDFS文件系統(tǒng)中
在etc/hdoop/yarn-site.xml中增加屬性
###配置日志聚集
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
###配置日志在文件系統(tǒng)中存放的秒數(shù)(604800為7天)
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
配置完成后需要將resourcemanager和mapreduce歷史任務(wù)進行重啟才會生效
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
Hadoop配置文件
- 默認配置文件,在share/hadoop四個模塊相對應(yīng)的jar包中
core-default.xml
hdfs-default.xml
yarn-default.xml
mapred-default.xml - 自定義配置文件,在etc/hadoop
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
每次啟動程序的時候,系統(tǒng)會首先加載jar包,讀取jar包中的默認配置,之后才會讀取用戶自定義配置,用戶自定義配置會覆蓋默認配置。
一般在配置的時候,會在官方文檔和默認配置文件中查找配置信息,默認配置中會有對配置屬性的描述。
配置HDFS垃圾回收時間(分鐘)
在core-site.xml配置文件中進行增加屬性
<property>
<name>fs.trash.interval</name>
<value>7*24*60</value>
</property>
hadoop啟動的三種方式
- 各個服務(wù)組建逐個啟動
- hdfs
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode - yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager - mapreduce
mr-jobhistory-daemon.sh start|stop historyserver - 各個模塊分開啟動
- hdfs
start-dfs.sh
stop-dfs.sh - yarn
start-yarn.sh
stop-yarn.sh - mapreduce
mr-historyserver-daemon.sh start|stop historyserver
分模塊啟動,他的啟動方式是:啟動命令在主結(jié)點上運行,然后通過ssh協(xié)議去鏈接自己和相關(guān)將要啟動的從結(jié)點,從而逐個啟動。使用ssh協(xié)議時每次都需要輸入密碼。所以需要配置ssh無密鑰登陸。
配置無密鑰登陸:(客戶端生成公鑰和私鑰,將公鑰給將要鏈接的機器)
1、客戶端生成密鑰。
進入到用戶的主目錄下的.ssh目錄中
使用命令:ssh-keygen -t rsa,回車4下
2、copy公鑰
使用命令ssh-copy-id hostname(將要拷貝到的機器的hostname)就會將公鑰拷貝到所有的主機名相同的主機上的.ssh目錄下authorized_key。 - 全部啟動
- start -all
- stop-all
此方式不推薦,此方式要求namenode和resourcemanager在相同的主機上,因為在實際的環(huán)境中,namenode和resourcemanager在不同的主機上。
細節(jié)回顧
- namenode所在主機通過etc/hadoop/core-site.xml中
<property>
<name>fs.defaultFS</name>
<value>hdfs://bxp:8020</value>
</property>
指定了HDFS文件系統(tǒng),其中主機代表的就是namenode所在的主機。
- slaves文件中指定的是datanode和noderesource所在的主機
- secondarynamenode結(jié)點通過在hdfs-site.xml中通過以下屬性進行指定,默認就是本機
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>0.0.0.0:50090</value>
</property>
- resourcemanager所在的主機,在yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
- MapReduce HistoryServer
在mapred-site.xml中,默認是本機
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
問題
每次運行bin/hdfs dfs都會出現(xiàn)警告WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable。原因是hadoop的lib/native本地庫和系統(tǒng)所使用的本地庫不對應(yīng),要想去掉警告,需要下載hadoop的源碼在本地進行編譯,并替換native即可。
編譯可以看源碼包下的BUILDING.txt文件