大數據集群配置系列一,完全分散式搭建hadoop,zookeeper。簡單介紹jobhistory的配置流程。 ...
準備工作
最小化安裝master後,確定可以連接Xshell後。克隆出slave1、slave2,修改好網路配置並且確保三台虛擬機都在一個網關里,並能連接Xshell。
使用此教程前,確保已安裝過偽分散式,有一定的linux基礎。(還沒走穩就想跑你想啥呢,老老實實安裝偽分佈去)
同時對三台虛擬機操作有兩種方式:
1、使用Xshall中發送鍵到所有對話
功能
2、在一臺虛擬機中配置完畢後,使用scp命令將文件發送其他主機,如果沒有進行過SSH免密配置,scp命令需要輸入接收方主機密碼,進行SSH免密配置後不需要再輸密碼,非常方便。
命名約定:
安裝包提前拷貝在/usr/local/package中,三台虛擬機都有。
安裝的軟體都在/usr/local/下,配置的數據文件地址一般在軟體安裝文件夾中。
基礎環境配置(master、slave1、slave2)
基礎環境配置在三台主機上都要運行命令
修改主機名
分別在三台對應主機上修改,bash命令使改名及時生效
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
bash
關閉防火牆
關閉防火牆
systemctl stop firewalld
禁止防火牆開機自啟
systemctl disable firewalld.service
安裝vim
由於最小化安裝,預設自帶的文件編輯是vi,沒有代碼高亮很不方便,於是安裝vim
首先配置源
1、將源文件備份
cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/
2、下載阿裡源文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
3、更新源裡面的地址
sed -i -e "s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*
sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*
4、生成緩存
yum clean all && yum makecache
安裝vim
yum install vim
hosts添加映射
在文件中添加對應ip地址
vim /etc/hosts
192.168.178.100 master
192.168.178.101 slave1
192.168.178.102 slave2
更改時區
timedatectl set-timezone Asia/Shanghai
SSH配置
首先生成密鑰(master、slave1、slave2)
輸入三個回車
ssh-keygen -t rsa
cd ~/.ssh
生成後把密鑰分發,使三台主機之間可以互相連接
由於現在SSH沒有完成,使用scp命令需要輸入主機密碼
# master將生成的密鑰複製到authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# slave1和slave2的authorized_keys文件發送給master
# 下麵兩行命令分別slave1和slave2運行
scp id_rsa.pub root@master:~/.ssh/id_rsa.pub_s1 # slave1
scp id_rsa.pub root@master:~/.ssh/id_rsa.pub_s2 # slave2
# master上把密鑰整合,再發放給slave1和slave2
# 下麵命令都在master上運行
cat id_rsa.pub_s1 >> authorized_keys
cat id_rsa.pub_s2 >> authorized_keys
scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
scp ~/.ssh/authorized_keys root@slave2:~/.ssh/
註:如果遇到許可權錯誤,使用下麵兩個命令
# 修改許可權,不一定會用到
chmod 600 ~/.ssh/authorized_keys
chmod 700 -R ~/.ssh
查看三台主機的authorized_keys文件中有三台主機的密鑰。
cat authorized_keys
測試ssh是否成功,不需要再輸密碼,三台虛擬機都可以正常聯通。
ssh master
ssh slave1
ssh slave2
java配置(master、slave1、slave2)
進入安裝包文件夾,解壓java到/usr/local目錄下
tar -xzf /usr/local/package/jdk-8u221-linux-x64.tar.gz -C /usr/local
# 修改文件夾名字
mv /usr/local/jdk1.8.0_202 /usr/local/jdk
配置環境變數
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
或者/etc/profile中可以這樣配置
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
檢測是否安裝
java -version
分發文件(如果使用了Xshell發送到所有會話,則不用運行下麵命令)
註:分發後記得 source /etc/profile
scp -r /usr/local/jdk root@slave1:/usr/local/
scp -r /usr/local/jdk root@slave2:/usr/local/
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
zookeeper完全分散式配置(master、slave1、slave2)
解壓安裝,修改文件名
tar -zxf /usr/local/package/apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/
mv /usr/local/apache-zookeeper-3.7.0-bin /usr/local/zookeeper
配置zookeeper系統環境變數($ZOOKEEPER_HOME)
vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
修改zkServer.sh文件,加上JAVA_HOME
vim /usr/local/zookeeper/bin/zkServer.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
修改配置文件zoo.cfg
zoo.cfg裡面的東西不要刪,增加修改就行
cd /usr/local/zookeeper
mkdir zkdata
mkdir zkdatalog
# 進入配置文件夾
cd conf
# 複製配置模板
cp zoo_sample.cfg zoo.cfg
# 編輯配置
vim zoo.cfg
# 修改其中
dataDir=/usr/local/zookeeper/zkdata
# 增加
dataLogDir=/usr/local/zookeeper/zkdatalog
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888下麵是zoo.cfg原文件
數據存儲路徑下創建myid
touch /usr/local/zookeeper/zkdata/myid
分發
scp -r /usr/local/zookeeper root@slave1:/usr/local/
scp -r /usr/local/zookeeper root@slave2:/usr/local/
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
source /etc/profile
修改myid,分別為123。
master中myid寫入1,slave1中myid寫入2,slave2中myid寫入3
可以用cat /usr/local/zookeeper/zkdata/myid
命令查看裡面內容
# master
echo 1 > /usr/local/zookeeper/zkdata/myid
# slave1
echo 2 > /usr/local/zookeeper/zkdata/myid
# slave2
echo 3 > /usr/local/zookeeper/zkdata/myid
啟動zookeeper服務(三台同時啟動)
zkServer.sh start
# 如果上面的不行用這個
/usr/local/zookeeper/bin/zkServer.sh start
驗證是否成功
輸入jps後三台主機都顯示
[root@master zkdata]# jps
6075 Jps
6031 QuorumPeerMain
查看三台主機狀態,可以看到一臺主機為leader,另外兩台為follower。
[root@master zkdata]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@slave1 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@slave2 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
常用命令
# 啟動
zkServer.sh start
# 重啟
zkServer.sh restart
# 停止
zkServer.sh stop
# 查看狀態
zkServer.sh status
# 這樣啟動就知道錯誤原因了
zkServer.sh start-foreground
debug
查看日誌發現報錯Cannot open channel to 3 at election address
將本機zoo.cfg中的ip改為0.0.0.0
如何查看日誌?
會在當前終端目錄下生成zookeeper.out文件
Hadoop完全分散式集群配置(master、slave1、slave2)
解壓安裝
tar -zxf /usr/local/package/hadoop-2.7.7.tar.gz -C /usr/local/
mv /usr/local/hadoop-2.7.7 /usr/local/hadoop
配置Hadoop環境變數,註意生效
vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
source /etc/profile
配置Hadoop運行環境JAVA_HOME
hadoop-env.sh 用來定義Hadoop運行環境相關的配置信息;
cd /usr/local/hadoop/etc/hadoop
vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk
core-site.xml全局參數
設置全局參數,指定HDFS上NameNode地址為master,埠預設為9000
vim core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoopData/tmp</value>
</property>
hdfs-site.xml 定義名稱節點、數據節點的存放位置、文本副本的個數、文件讀取許可權等;
vim hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hadoopData/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hadoopData/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property><name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.use.datanode.hostnamedatanode</name>
<value>true</value>
</property>
設置YARN運行環境JAVA_HOME參數
vim yarn-env.sh
export JAVA_HOME=/usr/local/jdk
yarn-site.xml 集群資源管理系統參數配置
設置YARN核心參數,指定ResourceManager進程所在主機為master,埠為18141
設置YARN核心參數,指定NodeManager上運行的附屬服務為mapreduce_shuffle
vim yarn-site.xml
<!--nomenodeManager獲取數據的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置shuffle,因為map和reduce之間有個shuffle過程,-->
<property>
<name>yarn.nademanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<!--調度器介面的地址。-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<!--對每個rm-id,指定RM webapp對應的host-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
<!--對每個rm-id設置NodeManager連接的host-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<!--對每個rm-id指定管理命令的host-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
mapred-site.xml MapReduce參數
設置計算框架參數,指定MR運行在yarn上
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
設置節點文件,要求master為主節點; slave1、slave2為子節點
echo master > master && echo slave1 > slaves && echo slave2 >> slaves
分發文件
scp -r /usr/local/hadoop root@slave1:/usr/local/
scp -r /usr/local/hadoop root@slave2:/usr/local/
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
source /etc/profile
文件系統格式化 (只在master)
建議格式化之前存快照,三個主機都存
,方便後期修改
hadoop namenode -format
啟動Hadoop集群 (只在master)
/usr/local/hadoop/sbin/start-all.sh
開啟集群後在三台主機上運行jps命令查看輸出
[root@master hadoop]# jps
6672 SecondaryNameNode
6817 ResourceManager
7074 Jps
6483 NameNode
6031 QuorumPeerMain
[root@slave1 ~]# jps
2481 DataNode
2150 QuorumPeerMain
2586 NodeManager
2686 Jps
[root@slave2 ~]# jps
2582 NodeManager
2682 Jps
2156 QuorumPeerMain
2477 DataNode
JobHistoryServer(master)
JobHistoryServer是hadoop自帶的歷史伺服器,可以通過歷史伺服器查看已經運行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等信息。在後期學習mapreduce後,這個功能非常有用。
但是JobHistoryServer預設是不開啟的,需要自己配置。但是不需要三台主機都配置,只在master主機配置就可以,流程如下。
首先master關閉集群
/usr/local/hadoop/sbin/stop-all.sh
在 mapred-site.xml 文件中配置,添加下麵內容
cd /usr/local/hadoop/etc/hadoop
vim mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
開啟 jobhistoryserver
/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver
開啟集群
/usr/local/hadoop/sbin/start-all.sh
最後使用jps命令查看服務是否都打開
[root@master hadoop]# jps
7569 JobHistoryServer
8083 ResourceManager
8341 Jps
7737 NameNode
7931 SecondaryNameNode
6031 QuorumPeerMain
測試
運行mapreduce實例,結果為4.000000
cd /usr/local/hadoop/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-2.7.7.jar pi 2 3
打開jobhistory WEB UI埠查看信息,可以看到剛剛運行的實例信息。
http://192.168.178.100:19888/