【大資料】安裝完全分散式Hadoop叢集
修改主機名和網路
master:
#hostnamectl set-hostname master #vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=1c0d1057-e3da-4c64-9fa7-78449d3282d2 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.0.100 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 儲存退出
slave1:
#hostnamectl set-hostname slave1 #vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=617fd776-a38a-4467-bd53-0bd2bde2391a DEVICE=ens33 ONBOOT=yes IPADDR=192.168.0.110 NETMASK=255.255.255.0 GATEWAY=192.168.0.1
slave2:
#hostnamectl set-hostname slave2 #vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=04a949c1-73e5-4926-bf65-f32655292eec DEVICE=ens33 ONBOOT=yes IPADDR=192.168.0.120 NETMASK=255.255.255.0 GATEWAY=192.168.0.1
配置SSH免密登入
*配置對映 在需要免密登入的全部節點上,修改hosts檔案,全部都需要新增一樣的內容。
#vi /etc/hosts
新增
192.168.0.100 master
192.168.0.110 slave1
192.168.0.120 slave2
儲存退出
金鑰(最好全部節點都做一遍,全部互相訪問不需要密碼) 在全部節點中執行:
#ssh-keygen -trsa(在全部節點中執行的原因避免出現scp: /root/.ssh/: Is a directory沒有目錄的錯誤)
然後,不斷的按回車鍵。
*在master節點:
#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#chmod 600 ~/.ssh/authorized_keys
*將公鑰複製到其他機器上
在master免密登入master:#scp ~/.ssh/authorized_keys master:~/.ssh/
在master免密登入slave1:#scp ~/.ssh/authorized_keys slave1:~/.ssh/
在master免密登入slave2:#scp ~/.ssh/authorized_keys slave2:~/.ssh/
配置DNS檔案
在master、slave1、slave2都設定:
#vi /etc/resolv.conf nameserver 8.8.8.8
關閉防火牆並設定開機不自啟(centos7+)
檢視防火牆當前狀態:firewall-cmd –state
關閉防火牆:systemctl stop firewalld.service
設定防火牆開機不自啟:systemctl disable firewalld.service
配置java環境
建立資料夾:#mkdir -p /root/hj/java/
解壓jdk:
#tar -zxvf jdk-10.0.1_linux-x64_bin.tar.gz -C /root/hj/java/
將jdk新增到環境變數中去:
#vi /etc/profile
最後面新增
#JAVA_HOME export JAVA_HOME=/root/hj/java/jdk-10.0.1 export PATH=JAVA_HOME/bin 儲存退出
生效環境變數:#source /etc/profile
配置hadoop環境
建立資料夾:#mkdir -p /root/hj/hadoop/
解壓hadoop:
#tar -zxvf hadoop-2.9.1.tar.gz -C /root/hj/hadoop/
將hadoop新增到環境變數中去:
#vi /etc/profile
最後面新增
#HADOOP_HOME
export HADOOP_HOME=/root/hj/hadoop/hadoop-2.9.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
儲存退出
生效環境變數:#source /etc/profile
配置hadoop引數
#cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop
#第27行 export JAVA_HOME=/root/hj/java/jdk-10.0.1
- core-site.xml 建立資料夾: 指定hadoop執行時產生檔案的儲存目錄:#mkdir /root/hj/hadoop/hadoop-2.9.1/data #cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop #vi core-site.xml fs.defaultFS hdfs://master:9000
hadoop.tmp.dir /root/hj/hadoop/hadoop-2.9.1/data
fs.trash.interval 259200
-
hdfs-site.xml #cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop #vi hdfs-site.xml
dfs.namenode.secondary.http-address slave2:50090
-
slaves #cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop 修改為 master slave1 slave2 【yarn】
-
yarn-env.sh #cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop 在第23行,把註釋去掉,修改為 export JAVA_HOME=/root/hj/java/jdk-10.0.1
-
yarn-site.xml #cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop #vi yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>slave1</value> </property> <!-- reducer獲取資料的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- #########nodemanager resouce######### --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>4</value> </property> <property> <name>yarn.log-aggregetion-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregetion.retain-seconds</name> <value>640800</value> </property>
-
slaves 修改為 master slave1 slave2
【mapredue】
-
mapred-env.sh #cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop #vi mapred-env.sh 在第16行,將註釋去掉,修改為 export JAVA_HOME=/root/hj/java/jdk-10.0.1
-
mapred-site.xml
#cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop #mv mapred-site.xml.template mapred-site.xml(字尾名為.template的時候hadoop是不識別的) #cd /root/hj/hadoop/hadoop-2.9.1/etc/hadoop #vi mapred-site.xml <!-- 指定mr執行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property>
在master節點配置好hadoop各項引數之後,將hadoop資料夾分發到slave1、slave2節點上:
#scp -r /root/hj/hadoop/hadoop-2.9.1 [email protected]:/root/hj/hadoop/
#scp -r /root/hj/hadoop/hadoop-2.9.1 [email protected]:/root/hj/hadoop/
建立資料夾(core-site.xml):
指定hadoop執行時產生檔案的儲存目錄:# mkdir -p /root/hj/hadoop/hadoop-2.9.1/data
格式化namenode
hdfs namenode -format
啟動hadoop
檢視啟動了哪些程序:#jps
叢集搭建完成以後
-
基本測試 服務啟動,是否可用,簡單的應用
-
hdfs
讀寫操作 bin/hdfs dfs -mkdir -p /user/beifeng/tmp/conf bin/hdfs dfs -put etc/hadoop/*-site.xml /user/beifeng/tmp/conf bin/hdfs dfs -text /user/beifeng/tmp/conf/core-site.xml
-
yarn
run jar
-
mapreduce
bin/yarn jar share/hadoop/mapreduce/hadoop*example*.jar wordcount /user/beifeng/mapreuce/wordcount/input /user/beieng/mapreduce/wordcount/output
-
基準測試 測試叢集的效能
-
hdfs 寫資料 讀資料
-
監控叢集 Cloudera Cloudera Manager
-
部署安裝叢集
-
監控叢集
-
配置同步叢集
-
預警
叢集的時間要同步
- 找一臺機器 時間伺服器
- 所有的機器與這臺機器時間進行定時的同步 比如,每日十分鐘,同步一次時間
叢集時間同步:在叢集中找一臺機器(node1,這裡的node1就是任意一臺機器,也可以寫對應的IP地址),然後叢集中的其他機器與node1 每十分鐘同步一次。
步驟:
1. rpm -qa | grep ntp 檢視ntp 和ntpdate 是否安裝
[[email protected] share]# rpm -qa | grep ntp
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.4p8-3.el6.centos.x86_64
ntp-4.2.4p8-3.el6.centos.x86_64
2. vi /etc/ntp.conf 需要修改三處
a 開啟一個註釋 ,192.168.1.0 是node1機器上的閘道器。
#Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b 將server0 ,server1 ,server2 註釋掉
#Use public servers from the pool.ntp.org project.
#Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
c 開啟兩個註釋,server 和 fudge
#Undisciplined Local Clock. This is a fake driver intended for backup
#and when no outside source of synchronized time is available.
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
3. vi /etc/sysconfig/ntpd 加上SYNC_HWCLOCK=yes
#Drop root to id 'ntp:ntp' by default.
SYNC_HWCLOCK=yes
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
4. chkconfig ntpd on 將ntp 永久開啟
5. service ntpd start 後,可以檢視狀態 service ntpd status
6. crontab -e 編寫定時器同步時間, 意義:每十分鐘與node1 同步一次時間。需要在叢集中其他的機器中都編寫 crontab -e
## sync cluster time
## 分 時 日 月 周 這裡是每十分鐘同步
0-59/10 * * * * /usr/sbin/ntpdate node1
7. ntpdate node1 然後就可以手動先同步一下時間.
安裝maven
*在官網下載maven,然後上傳到Linux中。
*解壓maven:
#tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /root/hj/maven
*設定maven環境變數:
#vi /etc/profile 最後新增
#MAVEN_HOME
export MAVEN_HOME=/root/hj/maven/apache-maven-3.5.4
export PATH=$PATH:$MAVEN_HOME/bin
儲存退出
*生效環境變數:#source /etc/profile
*檢視maven是否安裝成功:#mvn -version
*更改配置使用者範圍的本地倉庫:
建立使用者的本地倉庫的資料夾:#mkdir /root/maven/warehouse/
先在/.m2/目錄下建立settings.xml檔案,然後在~/.m2/settings.xml,設定localRepository元素的值為想要的倉庫地址
<settings>
<localRepository>/root/maven/warehouse/</localRepository>
</settings>
安裝eclipse
*在官網下載eclipse(JavaEE),然後上傳在Linux中。
*解壓eclipse在/root/eclipse/中:
tar -zxvf eclipse-jee-photon-R-linux-gtk-x86_64.tar -C /root/eclipse/
安裝zookeeper
*在官網下載zookeeper,上傳到Linux中。
*建立zookeeper的安裝目錄:#mkdir /root/zookeeper/
*解壓zookeeper:#tar -zxvf zookeeper-3.4.12.tar -C /root/zookeeper/
*建立data目錄:#mkdir /root/zookeeper/data/
*建立dataLog目錄:#mkdir /root/zookeeper/dataLog/
*建立myid檔案:
#cd /root/zookeeper/data/
#vi myid
master節點,輸入數字1,然後儲存; slave1節點,輸入數字2,然後儲存; slave2節點,輸入數字3,然後儲存。
*對zookeeper的目錄進行授權:#chmod 777 -R /root/hj/zookeeper/
*修改配置檔案zoo.cfg:
#/root/hj/zookeeper/zookeeper-3.4.12/conf
#cp zoo_sample.cfg zoo.cfg
#vi zoo.cfg
在檔案末尾新增如下內容
dataDir=/root/zookeeper/data/
dataLogDir=/root/zookeeper/dataLog/
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
*在master節點將zookeeper分發到slave1、slave2節點中去:
#scp -r /root/hj/zookeeper/ [email protected]:/root/hj/
#scp -r /root/hj/zookeeper/ [email protected]:/root/hj/
*啟動zookeeper,分別在三臺伺服器上執行如下命令:
#sh bin/zkServer.sh start