9 synchronized與鎖
Hadoop叢集配置
內容
實驗環境及軟體:
- VMware Workstation15
- CentOS 7.0或8.0
- Hadoop-2.7.3
- JDK
步驟:
-
啟動至少兩臺虛擬客戶機
自己安裝倆或以上CentOS虛擬機器,HadoopMaster和HadoopSlave注意,所有虛擬機器建立的使用者名稱應該相同,Hadoop通過主機名分辨不同的結點,不同結點主機名應該不同,但使用者名稱建議相同(可以減少需要修改的配置),如果不做配置,Hadoop檔案系統會預設讀取作業系統的使用者作為Hadoop的使用者名稱
-
Linux系統配置
-
Hadoop配置部署
-
啟動Hadoop叢集
Linux系統配置
-
下載拷貝軟體包和資料包
可以通過U盤、vmtools、共享資料夾、直接在虛擬機器內下載等方式獲取,需要注意的是,之後的靜態IP配置可能導致暫時通不了外網等情況,建議優先下載到Master伺服器。Hadoop的版本建議使用2.6.0左右,如果需要使用java外掛跑MapReduce,慎重選擇高版本Hadoop,Hadoop的eclipse外掛在2014年已經停止更新,最後版本為2.6.0。對於新版本的Hadoop而言,外掛所需要jar依賴包在版本和數量上已經發生了一些變化,即使可以通過修改外掛原始檔配置進行適配,也很可能在使用過程中產生問題。當然,也可以採用idea上的HadoopIntellijPlugin(適配3.2.1版本,沒用過):
https://github.com/fangyuzhong2016/HadoopIntellijPlugin
原Hadoop的eclipse外掛:
-
配置自動時鐘同步
這一步是為了能叢集內所有伺服器都用同一個時間,防止相互之間的日誌出錯。
自動時鐘同步通過'crontab命令+ntpdate'或chrony實現。
crontab是用來定期執行程式的命令,當安裝完成作業系統之後,預設便會啟動此任務排程命令。而crond程序每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
參考:https://www.runoob.com/linux/linux-comm-crontab.htmlNTP是網路時間協議(Network Time Protocol),它是用來同步網路中各個計算機的時間的協議。
從CentOS7.2開始,CentOS支援chrony(網路時間協議(NTP)的通用實現),而從CentOS8開始,不再支援ntp,只能使用chrony。
安裝過程可參考:https://blog.csdn.net/weixin_42758707/article/details/94738761
https://www.cnblogs.com/liushui-sky/p/9203657.html
https://www.cnblogs.com/jhxxb/p/11526098.html
https://blog.csdn.net/gaofei0428/article/details/103644371通過這些網站可知,crontab+ntpdate會定時即刻同步時間,會產生時間上的跳躍,在有其他定時程式的情況下可能會出錯。
chrony的使用方法:
首先修改時間源伺服器:
開啟chrony配置檔案
vim /etc/chrony.conf
將第三行的地址改為:
server us.pool.ntp.org iburst
開啟並開機自動啟動chrony守護服務
systemctl start chronyd.service systemctl enable chronyd.service
-
配置節點主機名和網路
這一步是為了能識別叢集中的各個節點,將不同的節點用不同的主機名標識,如:namenode用master,而datanode用slave1、slave2、slave3等等
-
配置各節點主機名
CentOS6下:
vim /etc/sysconfig/network
內容修改:
NETWORKING=yes HOSTNAME=相應主機名
CentOS7、8下:
vim /etc/hostname
直接修改主機名,所有的節點主機名應不同,可以為:master、slave1、slave2、slave3等等。
-
配置網路環境
這一步是為了讓叢集內節點相互正常訪問,分為配置靜態IP和關閉防火牆。
由於我們是通過主機名來標識,如果採用DHCP,可能會有節點的IP變化,導致與所設定的主機名對應IP不一致,無法正常使用,所以要配置靜態IP,具體方法建議百度。
另外是關閉防火牆(簡單粗暴):
systemctl stop firewalld.service systemctl disable firewalld.service systemctl status firewalld.service
依次為停止、禁止啟動、檢視防火牆狀態。
配置hosts列表:
vim /etc/hosts
將其中新增 ip 主機名對:
節點ip ip對應的主機名
之後可以ping相應主機名進行測試。
-
安裝JDK
Hadoop是基於java的,JDK自然不必多說,之後使用MapReduce程式設計也需要用到。
將JDK解壓並放在/usr/java目錄下:
mkdir /usr/java mv jdkgz壓縮檔案 /usr/java/ cd /usr/java tar –xvf /usr/java/jdkgz壓縮檔案
配置java使用者下的環境變數
vim /home/使用者名稱/.bash_profile
新增以下內容:
export JAVA_HOME=/usr/java/jdk資料夾名/ export PATH=$JAVA_HOME/bin:$PATH
通過:
source .bash_profile
終端內生效,或者重啟虛擬機器永久生效
然後可以通過java版本命令檢視是否安裝成功:
java -version
-
免金鑰登入設定
Hadoop叢集相互訪問時要通過ssh遠端登入到其他節點,為了避免每次訪問都需要輸入密碼,我們需要設定免密登入。
在Master節點的使用者主目錄下,用以下命令生成ssh下的rsa金鑰
ssh-keygen -t rsa
會生成一個.ssh的隱藏資料夾,裡面有一個rsa金鑰檔案和一個rsa.pub的公鑰檔案:
cd .ssh ls -l
將公鑰檔案複製為另一個suthorized_keys用於免金鑰登入的身份認證檔案,修改其許可權為僅建立者讀寫
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 authorized_keys
然後將免密檔案傳送到各slave節點上
scp authorized_keys 使用者名稱@相應節點名:~/
同樣地,在各slave節點使用者主目錄生成金鑰檔案,並將從master節點得到的authorized_keys檔案移動到.ssh目錄:
ssh-keygen -t rsa mv authorized_keys ~/.ssh/
通過ssh遠端連線驗證免密登入:
ssh 節點主機名
-
至此,Hadoop需要的Linux環境基本搭建完成。
Hadoop配置部署及啟用
-
檔案拷貝
在自定義使用者主目錄下,解壓hadoop壓縮包:
# 以下將壓縮包移動到主目錄 # cp hadoop壓縮包 ~/ # cd ~ tar -zxvf hadoop壓縮包 # 檢視hadoop檔案 cd hadoop資料夾
-
屬性配置
-
配置JDK環境路徑
vim /home/使用者名稱/hadoop-2.5.2/etc/hadoop/hadoop-env.sh
去掉其中的JAVA_HOME的註釋並修改路徑為之前安裝的JDK路徑
# The java implomentation to use ..... export JAVA_HOME=/usr/java/jdk...
-
配置核心元件core-site.xml
vim /home/使用者名稱/hadoop-2.5.2/etc/hadoop/core-site.xml
<configuration> <property> <name>fs.default.name</name> /*2.0後用fs.defaultFS代替*/ <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/dhx/hadoopdata</value> </property> </configuration>
-
hadoop分散式檔案系統檔案存放位置都是基於hadoop.tmp.dir目錄的,namenode的名字空間存放地方就是 ${hadoop.tmp.dir}/dfs/name,datanode資料塊的存放地方就是 ${hadoop.tmp.dir}/dfs/data,所以設定好hadoop.tmp.dir目錄後,其他的重要目錄都是在這個目錄下面,這是一個根目錄。
-
fs.default.name,設定namenode所在主機,埠號是9000
-
core-site.xml 對應有一個core-default.xml, hdfs-site.xml對應有一個hdfs-default.xml,mapred-site.xml對應有一個mapred-default.xml。這三個defalult檔案裡面都有一些預設配置,現在我們修改這三個site檔案,目的就覆蓋default裡面的一些配置
-
-
配置檔案系統hdfs-site.xml
vim /home/使用者名稱/hadoop-版本號/etc/hadoop/hdfs-site.xml
<configuration> <!-- appoint HDFS transcript counts --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- appoint blocksize --> <property> <name>dfs.block.size</name> <value>64M</value> </property> </configuration>
dfs.replication,設定資料塊的複製次數,預設是3,如果slave節點數少於3,則寫成相應的1或者2
-
配置計算框架mapred-site.xml
vim /home/使用者/hadoop-版本號/etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapred. job.tracker</name> //2.0 後 mapreduce.framework.name <value>master:9001</value> //2.0 後 yarn </property> </configuration>
mapred.job.tracker,設定jobtracker所在機器,埠號9001,對於2.0以後的hadoop而言,多了一個yarn框架,因此要改成yarn
-
配置yarn-site.xml
vim /home/使用者/hadoop-版本號/etc/hadoop/yarn-site.xml
<property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
-
配置主節點masters(2.0後不需要設定):
vim /home/使用者/hadoop-版本號/etc/hadoop/masters
新增master主機名
-
配置從節點slaves(3.0改為workers):
vim /home/使用者/hadoop-版本號/etc/hadoop/slaves
新增所有datanode的主機名(按行分割)
-
將該hadoop檔案複製到slave節點:
scp -r hadoop-版本號 slave:~/
-
-
啟動Hadoop檔案系統
-
格式化檔案系統:
由於尚未配置使用者下的hadoop環境變數,需要手動在檔案中啟用指令碼(或者在配置完環境變數後再格式化):cd /home/使用者名稱/hadoop-版本號/bin/ ./hdfs namenode -format
在datanode中:
cd /home/使用者名稱/hadoop-版本號/bin/ ./hdfs datanode -format
-
配置Hadoop的使用者環境變數,主目錄下:
vim .bash_profile
export HADOOP_HOME=/home/使用者名稱/hadoop-版本號 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
環境生效:
source .bash_profile
啟動hadoop:
cd ~/hadoop-版本號 bin/start-all.sh
檢視程序:
jps
-
WebUI檢視叢集是否安裝成功:
在HadoopMaster上啟動Fixefox瀏覽器,在瀏覽器位址列中輸入http://master:50070/,檢查namenode和datanode是否正常。
在HadoopMaster上啟動Fixefox瀏覽器,在瀏覽器位址列中輸入http://master:50030/,檢查JobTracker和TaskTracker是否正常,在hadoop3.0以後,一些預設埠已經改變,可以百度查詢。 -
執行PI例項檢查叢集是否成功
cd /home/使用者/hadoop-版本號 hadoop jar ~/hadoop-版本號/share/hadoop/mapreduce/hadoop-mapreduce-examples-版本號.jar pi 10 10
結果為一個不準確的圓周率數
-