#修訂記錄:20200112 填yarn-site.xml和mapred-site.xml的坑,解決spark無法在Hadoop上運行的問題,以及啓動jobHistoryServer的配置
上一篇文章已經做好了環境準備。終於可以開始安裝HADOOP了。
注意!這裏我們要切換回root用戶了
第一步,下載
在這個網址找到你想安裝的版本:http://www.apache.org/dyn/closer.cgi/hadoop/common
可以選擇它推薦的下載鏡像,然後選擇好下載地址。
這裏我選擇的是2.10.0版本:
$ curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
選最大的那個,大概300多M
第二步,解壓
Hadoop作爲一種服務,我們把它放到 /srv 目錄下面是比較合適的,命令如下:
# 解壓
$ tar -xzf hadoop-2.10.0.tar.gz
# 轉移
$ sudo mv hadoop-2.10.0 /srv/
# 把owner變成hadoop
$ sudo chown -R hadoop:hadoop /srv/hadoop-2.10.0
# 設置權限
$ sudo chmod g+w -R /srv/hadoop-2.10.0
# 創建一個symlink
$ sudo ln -s /srv/hadoop-2.10.0 /srv/hadoop
第三步,配置環境變量
注意這裏我們配置的是hadoop用戶的環境變量,root用戶可以給別的用戶配環境變量,所以可以不切換用戶,當然也可以切換
$ sudo vim /home/hadoop/.bashrc
將下面內容添加到hadoop用戶的環境變量
export HADOOP_HOME=/srv/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
# 設置JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
然後設置student用戶的環境變量,可以新建一個文件.bash_aliases
$ sudo vim /home/student/.bash_aliases
將以下內容添加到這個文件當中
export HADOOP_HOME=/srv/hadoop
export HADOOP_STREAMING=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.10.0.jar
export PATH=$PATH:$HADOOP_HOME/bin
# 設置JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# 有用的別名
alias ..="cd .."
alias ...="cd ../.."
alias hfs="hadoop fs"
alias hls="hsf -ls"
使配置生效:重啓也可以
source /home/student/.bash_aliases
source /home/hadoop/.bashrc
檢查是否配置成功,運行命令:
沒有出現錯誤就可以了
$ hadoop version
第四步hadoop配置
- 編輯hadoop-env.sh
$ sudo vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
修改使用Java實現
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 編輯core-site.xml
$ sudo vim $HADOOP_HOME/etc/hadoop/core-site.xml
將<configuration></configuration>
替換成:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/app/hadoop/data</value>
</property>
</configuration>`
- 編輯mapred-site.xml
$ sudo cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
$ sudo vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
將<configuration></configuration>
替換成:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
#add20200112 for historyserver & spark mapred
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/tmp/hadoop-yarn/staging</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1500</value>
<description>每個Map任務的物理內存限制</description>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3000</value>
<description>每個Reduce任務的物理內存限制</description>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1200m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2600m</value>
</property>
</configuration>
- 編輯hdfs-site.xml
$ sudo vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
將<configuration></configuration>
替換成:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>`
- 編輯yarn-site.xml
$ sudo vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
將<configuration></configuration>
替換成:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>localhost:8030</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>localhost:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>localhost:8050</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>localhost:8050</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>localhost:8050</value>
</property>
# add 20200112
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>22528</value>
<discription>每個節點可用內存,單位MB</discription>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1500</value>
<discription>單個任務可申請最少內存,默認1024MB</discription>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
<discription>單個任務可申請最大內存,默認8192MB</discription>
</property>
</configuration>`
目前爲止,Hadoop的爲分佈式環境配置已經完成。
第五步,格式化NameNode
給NameNode保存文件的地方新建文件夾,然後初始化:
$ sudo mkdir -p /var/app/hadoop/data
$ sudo chown hadoop:hadoop -R /var/app/hadoop
$ sudo su hadoop
$ hadoop namenode -format
沒有報錯就可以了
第六步,啓動Hadoop
$ $HADOOP_HOME/sbin/start-dfs.sh
$ $HADOOP_HOME/sbin/start-yarn.sh
這時兩個守護進程都啓動了。如果遇到SSH問題就輸入y
使用jps命令查看正在運行的進程
$ jps
你此時看到的進程列表應該有:
(這裏如果看不到JPS,就按照提示再裝一個高版本的java,但是之前的配置文件都不要改)
Jps
ResourceManager
SecondaryNameNode
NodeManager
NameNode
Hadoop 集羣管理頁面:http://localhost:8088
另一個管理頁面 :http://localhost:50070
最後在HDFS上爲student賬戶準備一個空間:
$ hadoop fs -mkdir -p /user/student
$ hadoop fs -chown student:student /user/student
到這裏Hadoop的一個僞分佈式環境就搭建好了。接下來我們要往上面放應用了。