1. 程式人生 > >【大資料】安裝完全分散式Hadoop叢集

【大資料】安裝完全分散式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=PATH: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