單機部署參考Hadoop安裝——單機
集群部署
在每臺主機配置好java環(huán)境,將hadoop安裝到每臺主機的
/usr/local/hadoop
目錄下长搀。修改每臺主機Hadoop目錄下
etc/hadoop/hadoop-env.sh
中的JAVA_HOME
# set to the root of your Java installation
export JAVA_HOME=/usr/local/jdk
- 修改每臺主機的主機名,并修改DNS
#分別對應(yīng)每臺主機修改主機名鸡典,執(zhí)行如下命令 $ hostname master #在10.0.30.70主機上執(zhí)行 $ hostname slave1 #10.0.30.64 $ hostname slave2 #10.0.30.65
#將三個主機上的/etc/hosts 文件修改成如下內(nèi)容 10.0.30.70 master 10.0.30.64 slave1 10.0.30.65 slave2
- 設(shè)置各主機之間免密登錄源请,參考Linux 下 的ssh免密登錄
- 在各主機下目錄下
/usr/local/hadoop/
,創(chuàng)建hdfs的存儲目錄tmp/dfs/data
和tmp/dfs/name
彻况,其中data目錄用于存儲hdfs的datanode數(shù)據(jù)谁尸,name目錄用于存儲hdfs的namnode數(shù)據(jù) -
配置文件
Nameode和ResourceManger的文件配置,即在master的/usr/local/hadoop/etc/hadoop/
目錄下
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
hdfs-site.xml纽甘,其中配置了namenode的存儲位置良蛮,如果只作為namenode,data.dir不起作用悍赢,可不配置决瞳。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
mapred-site.xml,配置hadoop的mapreduce框架
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml左权,配置yarn皮胡,ResourceManger
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
slaves,從節(jié)點配置赏迟,即配置datanode
slave1
slave2
上述為datanode的文件配置,配置slave1和slave2的文幾乎相同锌杀,將 core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml
復(fù)制到slave1和slave2的配置文件中糕再。
在master下執(zhí)行hdfs格式化
hadoop namenode -format
啟動hdfs
./sbin/start-dfs.sh
亿鲜, 之后通過jps
命令可以查看hadoop的進程啟動yarn
./sbin/start-yarn.sh
啟動job History Server
./sbin/mr-jobhistory-daemon.sh start historyserver
master和slave上的進程:
- 在master下運行示例:
hadoop fs -mkdir /input # 在hdfs上創(chuàng)建目錄
hadoop fs -ls / # 顯示hdfs上目錄/下文件
hadoop fs -put input/*.xml /input #將 input/*.xml 上傳到 hdfs上的/input文件夾下
hadoop fs -ls /input #顯示hdfs上目錄下/input下文件
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep /input /output 'd[a-z.]+' #運行example 輸入為hdfs上的/input 輸出在hdfs上的/output
hadoop fs -cat /output/* #輸出結(jié)果
hadoop fs -get /output ./output #將hdfs上的 結(jié)果/output下載到 ./output
cat output/* #輸出結(jié)果11
- WebUI:ResourceManager - http://localhost:8088/
WebUI:NameNode - http://localhost:50070/
WebUI:MapReduce JobHistory Server-http://10.0.30.70:19888/jobhistory
安裝過程中遇到的問題
datanode 進程未啟動漩蟆,hdfs初始化的原因妓蛮,查看datanode和namenode的存儲路徑下的
/current/VERSION
中的clusterID蛤克,將datanode的設(shè)成和namenode的一致期間有一個問題构挤,進程都能啟動,單機情況下可以正常運行示例唐础,集群之后運行時卡在 map(0%) reduce(0%)一膨,然后報錯... connection refused豹绪,from localhost.domian to ...
找了好久原因申眼,最后發(fā)現(xiàn)是主機名沒有設(shè)置豺型,默認的主機名localhost.localdomain對應(yīng)的ip是127.0.0.1姻氨,hadoop某個地方根據(jù)主機名獲取域名ip,即127.0.0.1前联,單機情況下可以訪問似嗤,但集群下127.0.0.1無法對外提供訪問烁落,所以報錯connection refused,設(shè)置主機名灯萍,并在etc/hosts
中將主機名對應(yīng)本機的ip旦棉,注釋掉localhost.localdomain
即可報錯
hdfs.DFSClient:Exception in createBlockOutputStream [Java].net.NoRouteToHostException:No route to host
绑洛,原因是未關(guān)閉防火墻童本,執(zhí)行:service iptables stop
各主機之間時間同步巾陕,若時間不同步運行示例時也會出現(xiàn)異常
service ntpd stop #若報錯the NTP socket is in use, exiting鄙煤,則執(zhí)行
ntpdate ntp.api.bz