一、基本信息
快速入門 http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html
在線文檔 http://tool.oschina.net/apidocs/apidoc?api=hadoop
易百教程 https://www.yiibai.com/hadoop/
W3Cschool教程 https://www.w3cschool.cn/hadoop/?
二、環境、工具說明
1、操作系統 Centos7.4 x64 Minimal 1708
安裝5臺虛擬機
NameNode :2臺 2G內存 1核CPU
DataNode :3臺 2G內存 1核CPU
2、JDK版本:jdk1.8
3、工具:xshell5
4、VMware 版本:VMware Workstation Pro15
5、Hadoop:3.2.0
6、Zookeeper:3.4.5
三、安裝部署(基礎環境準備)
1、虛擬機安裝(安裝5臺虛擬機)
參考 https://blog.csdn.net/llwy1428/article/details/89328381
2、每臺虛擬機均接入互聯網(5個節點均要配置好網卡)
網卡配置可參考:
https://blog.csdn.net/llwy1428/article/details/85058028
3、修改主機名(5個節點均要修改主機名)
編輯集羣中的各個節點主機名(以第一個節點 node1.cn 爲例)
[root@localhost~]# hostnamectl set-hostname node1.cn
node1.cn
node2.cn
node3.cn
node4.cn
node5.cn
4、JDK8環境搭建(5個節點均要搭建)
參考 https://blog.csdn.net/llwy1428/article/details/85232267
5、配置防火牆(5個節點均要操作)
關閉防火牆,並設置開機禁止啓動
關閉防火牆 : systemctl stop firewalld
查看狀態 : systemctl status firewalld
開機禁用 : systemctl disable firewalld
6、配置靜態IP
此處以node1.cn節點爲例(其他節點 略):
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
說明:紅框內爲修改、增加的部分
可參考:https://blog.csdn.net/llwy1428/article/details/85058028
7、配置hosts文件
此處以node1.cn節點爲例:
[root@node1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.131 node1.cn
192.168.11.132 node2.cn
192.168.11.133 node3.cn
192.168.11.134 node4.cn
192.168.11.135 node5.cn
8、安裝基本工具
[root@node1 ~]# yum install -y vim wget lrzsz tree zip unzip net-tools ntp
[root@node1 ~]# yum update -y (可選)
(根據自身的網絡情況,可能需要等待幾分鐘)
9、配置節點間免密登錄
具體步驟參照:
https://blog.csdn.net/llwy1428/article/details/85911160
https://blog.csdn.net/llwy1428/article/details/85641999
10、集羣各節點修改系統文件打開數
此處以node1.cn節點爲例:
[root@node1 ~]# vim /etc/security/limits.conf
參考
https://blog.csdn.net/llwy1428/article/details/89389191
11、集羣各節點配置時間同步
本文以阿里時間服務器爲準,阿里雲時間服務器地址:ntp6.aliyun.com
說明:如有專用時間服務器,請更改時間服務器的主機名或者IP地址,主機名需要在etc/hosts文件中做好映射。
以node1.cn爲例:
設置系統時區爲東八區(上海時區)
[root@node1 ~]# timedatectl set-timezone Asia/Shanghai
關閉ntpd服務
[root@node1 ~]# systemctl stop ntpd.service
設置ntpd服務禁止開機啓動
[root@node1 ~]# systemctl disable ntpd
設置定時任務
[root@node1 ~]# crontab -e
寫入以下內容(每10分鐘同步一下阿里雲時間服務器):
0-59/10 * * * * /usr/sbin/ntpdate ntp6.aliyun.com
重啓定時任務服務
[root@node1 ~]# /bin/systemctl restart crond.service
設置定時任務開機啓動
[root@node1 ~]# vim /etc/rc.local
加入以下內容後,保存並退出 :wq
/bin/systemctl start crond.service
集羣中其他各個節點同node1.cn節點。
參考 https://blog.csdn.net/llwy1428/article/details/89330330
12、集羣各節點禁用SELinux
以node1.cn爲例:
[root@node1 ~]# vim /etc/selinux/config
修改如下內容後,保存並退出 :wq
集羣中其他各個節點同node1.cn節點。
13、集羣各節點禁用Transparent HugePages
參考 https://blog.csdn.net/llwy1428/article/details/89387744
14、配置系統環境爲UTF8
以node1.cn爲例:
[root@node1 ~]# echo "export LANG=zh_CN.UTF-8 " >> ~/.bashrc
[root@node1 ~]# source ~/.bashrc
集羣中其他各個節點同node1.cn節點。
15、安裝數據庫
說明:安裝MariaDb(Mysql)是爲了給Hive、Spark、Oozie、Superset等提供元數據支持,如果用不到這些工具可以不安裝Mysql數據庫。
MariaDb(Mysql)安裝過程可參照:
https://blog.csdn.net/llwy1428/article/details/84965680
https://blog.csdn.net/llwy1428/article/details/85255621
四、安裝部署Hadoop集羣(HA模式)
(注意:集羣搭建和運行過程中,要確保集羣中所有節點的時間要同步)
1、創建目錄、文件上傳、
說明:先在 node1.cn 上配置好基本信息,再把配置好的文件分發給各個節點,再進行進一步配置
在各個節點上創建目錄 /opt/cluster/
以node1.cn爲例:
[root@node1 ~]# mkdir /opt/cluster
2、文件下載(文件上傳)、解壓縮
直接下載
[root@node1 opt]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
或
手動下載文件:hadoop-3.2.0.tar.gz
把已下載好的文件 hadoop-3.2.0.tar.gz 上傳至 /opt/cluster 路徑下,並解壓縮 hadoop-3.2.0.tar.gz
進入 /opt/cluster 目錄
解壓文件
[root@node1 cluster]# tar zxvf hadoop-3.2.0.tar.gz
查看目錄結構
3、在 hadoop 中創建幾個目錄
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/tmp
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/name
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/data
[root@node1 ~]# mkdir /opt/cluster/hadoop-3.2.0/hdfs/journaldata
4、配置 hadoop 環境變量(追加 hadoop 的環境變量信息)
[root@node1 ~]# vim /etc/profile
在最後追加如下信息
export HADOOP_HOME="/opt/cluster/hadoop-3.2.0"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存退出 :wq
使配置文件生效
[root@node1 ~]# source /etc/profile
查看版本
5、配置 hadoop-env.sh
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/hadoop-env.sh
增加如下內容
export JAVA_HOME=/opt/utils/jdk1.8.0_191
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
5、配置 core-site.xml
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/cluster/hadoop-3.2.0/hdfs/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node3.cn:2181,node4.cn:2181,node5.cn:2181</value>
</property>
</configuration>
6、編輯文件 hdfs-site.xml
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.nn1</name>
<value>node1.cn:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.nn2</name>
<value>node2.cn:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.nn1</name>
<value>node1.cn:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.nn2</name>
<value>node2.cn:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node3.cn:8485;node4.cn:8485;node5.cn:8485/cluster</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/cluster/hadoop-3.2.0/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/cluster/hadoop-3.2.0/hdfs/data</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/cluster/hadoop-3.2.0/hdfs/edits</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/cluster/hadoop-3.2.0/hdfs/journaldata</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
</configuration>
7、編輯文件 mapred-site.xml
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/cluster/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/cluster/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/cluster/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1.cn:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1.cn:19888</value>
</property>
</configuration>
8、編輯文件 yarn-site.xml
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1.cn</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2.cn</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node1.cn:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node2.cn:8088</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node3.cn:2181,node4.cn:2181,node5.cn:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property> <property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
9、配置文件 workers
[root@node1 ~]# vim /opt/cluster/hadoop-3.2.0/etc/hadoop/workers
node3.cn
node4.cn
node5.cn
10、把整個 hadoop-3.2.0 目錄分發給各個節點
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node2.cn:/opt/cluster/
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node3.cn:/opt/cluster/
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node4.cn:/opt/cluster/
[root@node1 ~]# scp -r /opt/cluster/hadoop-3.2.0 node5.cn:/opt/cluster/
11、配置、啓動 zookeeper
參考
https://hunter.blog.csdn.net/article/details/96651537
https://hunter.blog.csdn.net/article/details/85937442
12、指定的三個節點啓動 journalnode
(此處我選擇了node3.cn、node4.cn、node5.cn作爲journalnode)
[root@node3 ~]# hdfs --daemon start journalnode
[root@node4 ~]# hdfs --daemon start journalnode
[root@node5 ~]# hdfs --daemon start journalnode
13、在 node1.cn 上格式化 namenode
[root@node1 ~]# hdfs namenode -format
14、在 node1.cn 上啓動 namenode
[root@node1 ~]# hdfs --daemon start namenode
15、在 node2.cn 上同步 node1.cn 上已經格式化成功的 namenode信息
[root@node2 ~]# hdfs namenode -bootstrapStandby
16、在 node2.cn 上啓動 namenode
[root@node2 ~]# hdfs --daemon start namenode
查看
17、關閉服務
(1)關閉 node1.cn 和 node2.cn 上的 namenode
[root@node1 ~]# hdfs --daemon stop namenode
[root@node2 ~]# hdfs --daemon stop namenode
(2)關閉 node3.cn、node4.cn、node5.cn 上的 JournalNode
[root@node3 ~]# hdfs --daemon stop journalnode
[root@node4 ~]# hdfs --daemon stop journalnode
[root@node5 ~]# hdfs --daemon stop journalnode
18、格式化 ZKFC
首先啓動 node3.cn、node4.cn、node5.cn 上的 zookeeper
參考 https://blog.csdn.net/llwy1428/article/details/85937442
啓動 zookeeper 後,在 node1.cn 節點上執行:
[root@node1 ~]# hdfs zkfc -formatZK
19、啓動 hdfs、yarn 服務
[root@node1 ~]# /opt/cluster/hadoop-3.2.0/sbin/start-dfs.sh
[root@node1 ~]# /opt/cluster/hadoop-3.2.0/sbin/start-yarn.sh
20、查看各個節點的服務啓動情況
至此,Centos7.4 搭建 Hadoop (HA)集羣,操作完畢。
五、基本 shell 操作
(1)在 hdfs 中創建目錄
[root@node1 ~]# hdfs dfs -mkdir /hadoop
[root@node1 ~]# hdfs dfs -mkdir /hdfs
[root@node1 ~]# hdfs dfs -mkdir /tmp
(2)查看目錄
[root@node2 ~]# hdfs dfs -ls /
(3)上傳文件
例如:在 /opt 目錄下創建一個文件 test.txt 並寫入一些單詞(過程略)
[root@node3 ~]# hdfs dfs -put /opt/test.txt /hadoop
查看已上傳的文件
[root@node4 ~]# hdfs dfs -ls /hadoop
[root@node4 ~]# hdfs dfs -cat /hadoop/test.txt
(4)刪除文件
[root@node5 ~]# hdfs dfs -rm /hadoop/test.txt
Deleted /hadoop/test.txt
六、瀏覽器查看 部分服務的 UI 頁面
1、查看 hdfs 的信息
分別查看node1.cn的ip和node2.cn的ip
其他頁面:略。
2、查看 ResourceManager 信息
輸入
或
其他頁面:略。
七、運行 mapreduce wordcount
以上文的 test.txt 爲例
[root@node5 ~]# /opt/cluster/hadoop-3.2.0/bin/yarn jar /opt/cluster/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /hadoop /hadoop/output
在瀏覽器查看執行結果
ResourceManager 中執行的結果
查看執行結果
[root@node5 ~]# hdfs dfs -cat /hadoop/output/part-r-00000