個人學習筆記,僅供參考
從入門到入土 Hadoop新手搭建(2) 分佈式集羣搭建
(1)JDK安裝
Hadoop基於JAVA,要運行JAVA必然要先安裝java。按照我上一篇的指南這樣做的話,現在就可以打開xshell進行連接。在xshell中,我們運行java -version
查看java版本,如果我沒記錯的話,java要1.6以上,按照我的流程走的話,現在是沒有安裝java的,如圖
然後,我們在上一篇已經完成換源了,所以我們現在安裝java會很快,運行後來在使用pyspark時,實測報錯,需要用java1.8,所以此處運行sudo apt-get install default-jdk
安裝就可以了。sudo apt-get install openjdk-8-jdk
,安裝之後再次輸入java -version
,可以看到java版本
然後設置JAVAHOME等系統環境,查看java路徑在哪
不想鑽研的話,只要操作和我一樣那麼路徑也是和我一樣的,可以看到java路徑是/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
(2)相關環境準備
將要構建一個分佈式的集羣,設計是這樣的,一個master虛擬機,作爲NameNode和ResourceManager,相當於管理員的身份,一個或是多個虛擬機,作爲DataNode和NodeManager。
然後集羣中應當有各種功能,爲了避免重複下載和配置,我們把相關環境包下載到當前虛擬機,後面通過複製虛擬機來達到避免節點重複配置的目的。這裏要有的包有Hadoop,Hive,Hbase,Zookeeper,spark。到裏面會細講。
1.Hadoop
進入Hadoop官網,查找最新的hadoop版本,這裏直接給出下載頁面,可以看到有源碼和二進制版本,我們就不自己編譯了,所以選擇二進制版本的最新版本,(此處可以選擇hadoop3+,按道理確實是版本越新越好,但我手頭的資料全是2的,加上老師要求也是2,所以我這裏下載了2的最新版)注意此處下載需要點下面的mirror site這樣可以匹配鏡像,下載會快,
稍作等待,就會出現,其中粗體藍字都是推薦的鏡像,可以選一個,進入,當然這裏也直接給出地址
北京理工源
清華源
進入之後選擇版本,我選擇2.10,然後右鍵最後一行的374MB的文件,複製鏈接地址,得到http地址
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
回到xshell ,輸入wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
等待下載完成即可。
之後 tar -zxvf hadoop-2.10.0.tar.gz
進行解壓,並更名mv hadoop-2.10.0 hadoop
。
更新
hadoop在不同情況下適應也不同,筆者在使用時需要spark上運行hive,可以選擇自己編譯,但是廈大林子雨老師給出了hadoop2.7和spark2.1.0的編譯完成的包,所以此處還是建議用hadoop2.7.7,這樣可以免去自己編譯的好幾個小時的時間
2.HBase
大同小異 找到地址下載解壓 ,更名
hbase自帶zookeeper,免去了下載
wget http://mirror.bit.edu.cn/apache/hbase/2.2.3/hbase-2.2.3-bin.tar.gz
tar -zxvf hbase-2.2.3-bin.tar.gz
mv hbase-2.2.3 hbase
3.Spark
同理 但是此處需要注意spark有許多版本,有自帶hadoop的版本,我也沒試過,但是我們已經安裝了hadoop,所以選擇下載Pre-built with user-provided Apache Hadoop
,這個版本的spark自帶scala,免去了下載
wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.5/spark-2.4.5-bin-without-hadoop.tgz
tar -zxvf spark-2.4.5-bin-without-hadoop.tgz
mv spark-2.4.5-bin-without-hadoop spark
更新
hadoop在不同情況下適應也不同,筆者在使用時需要spark上運行hive,可以選擇自己編譯,但是廈大林子雨老師給出了hadoop2.7和spark2.1.0的編譯完成的包,所以此處還是建議用已經編譯完成的包,這樣可以免去自己編譯的好幾個小時的時間,鏈接
4.Hive
hive這裏改用MySQL數據庫保存Hive的元數據,還需安裝mysql
先sudo apt-get install mysql-server
然後sudo cat /etc/mysql/debian.cnf
查看密碼
複製密碼 之後mysql -u debian-sys-maint -p
,輸入剛剛的密碼,進入shell,
修改成自己想要的密碼,之後就可以使用自己想要的密碼了
use mysql;
update mysql.user set authentication_string=password('root') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit;
下載hive 解壓改名,
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.6/apache-hive-2.3.6-bin.tar.gz
tar -zxvf apache-hive-2.3.6-bin.tar.gz
mv apache-hive-2.3.6-bin hive
(3)環境構建+安裝
先分析master和普通機器的區別,以便複製的時候進行最少操作
- IP設置,靜態ip設置顯然要不同
- host設置,host設置相同,但是增加節點則需要修改
- 主機名,方便辨認主機名應當不同
- ssh無密碼訪問。
理論上來說,應當對於每一個獨立的服務器生成私鑰和公鑰,公鑰傳給master,這樣master可以訪問所有普通節點。
當然也可以做成所有節點互通,master集成所有公鑰之後,將公鑰複製給所有的普通節點。
也有更取巧的方法,master生成公鑰密鑰後,以master爲藍本複製虛擬機,即可完成互相訪問。 - 環境變量,master和普通節點的環境變量設置應當是一樣的。
- 除了Hive只需安裝在master以外,其他組件可以完全複製。
現在要建立一個源節點,之後所有的節點都從這個源節點複製而來
源節點任務清單(按組件分的):
- 與組件無關的任務,如host,ssh
- hadoop
修改core-site.xml 、hdfs-site.xml、mapred-site.xml 、yarn-site.xml、hadoop-env.sh、配置slaves、配置環境變量 - HBase
修改hbase-site.xml、regionservers,配置環境變量 - Spark
修改spark-env.sh、slaves,配置環境變量。
注意到每一個都要配置環境變量,那麼我們優先把環境變量都配置掉。
組件無關的構建
ip和主機名因爲每一個複製都需要更改,所以不用改動。
host
sudo vi /etc/hosts
改成
分別寫上自己將要構建的主機的ip,我只構建兩個,所以只多寫兩行。
ssh無密碼訪問
bashssh-keygen -t rsa
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
之後嘗試ssh localhost
,如果配置成功則不需要輸入密碼,只需輸入y加回車即可連上。
環境變量
輸入sudo vi /etc/profile
,在文件底部增加
此處JAVAHOME就是前面的java的路徑去掉bin
後面的幾個組件路徑就是組件更名之後的路徑,看你解壓在什麼地方
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/home/dirichlet/hadoop
export PATH=$PATH:/home/dirichlet/hadoop/bin:/home/dirichlet/hadoop/sbin
export HBASE_HOME=/home/dirichlet/hbase
export PATH=$HBASE_HOME/bin:$PATH
export HBASE_MANAGES_ZK=true
export SPARK_HOME=/home/dirichlet/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export HIVE_HOME=/home/dirichlet/hive
export PATH=$PATH:$HIVE_HOME/bin
保存之後source /etc/profile
,令其生效,然後依次打入以下代碼進行hadoop和hbase的環境變量測驗
hadoop version
hbase version
Hadoop配置
cd ~
vi hadoop/etc/hadoop/core-site.xml
把原來的
<configuration> </configuration>
變成
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/dirichlet/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
hadoop.tmp.dir指臨時文件夾,如果不修改則可能會被系統清理。
接着vi hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/dirichlet/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/dirichlet/hadoop/tmp/dfs/data</value>
</property>
</configuration>
dfs.replication是副本數量,dfs.namenode.name.dir是namenode存放數據的地址,datanode同理。注意此處寫了兩個,事實上在本次實驗,無論是datanode還是namenode都只需一個,在複製虛擬機之後進行修改。
vi hadoop/etc/hadoop/mapred-site.xml
mapred-site.xml 用於設置監控Map與Reduce程序的JobTracker任務分配情況。
<configuration>
<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>
</configuration>
vi hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>10240</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
vi hadoop/etc/hadoop/hadoop-env.sh
文件開始處加上
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
export HADOOP_HOME=/home/dirichlet/hadoop
export PATH=$PATH:/home/dirichlet/hadoop/bin
vi hadoop/etc/hadoop/slaves
去掉localhost,在裏面添加普通節點,我這裏的話寫上data1
HBase配置
vi hbase/conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,data1</value>
</property>
<property>
<name>hbase.temp.dir</name>
<value>/home/dirichlet/hbase/tmp</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/dirichlet/hbase/tmp/zookeeper</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
</configuration>
vi hbase/conf/regionservers
刪除localhost,填上master和data1
vi hbase/conf/hbase-env.sh
也是在開頭加上
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
export HBASE_HOME=/home/dirichlet/hbase
export PATH=$PATH:/home/dirichlet/hbase/bin
export HBASE_MANAGES_ZK=true
Spark配置
vi /home/dirichlet/spark/conf/spark-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
export SCALA_HOME=/usr/local/scala
export HADOOP_CONF_DIR=/home/dirichlet/hadoop/etc/hadoop
export HADOOP_HDFS_HOME=/home/dirichlet/hadoop
export SPARK_HOME=/home/dirichlet/spark
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_HOST=master
export SPARK_WORKER_CORES=2
export SPARK_WORKER_PORT=8901
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=2g
export SPARK_DIST_CLASSPATH=$(/home/dirichlet/hadoop/bin/hadoop classpath)
export SPARK_MASTER_WEBUI_PORT=8079
執行
source spark-env.sh
vi /home/dirichlet/spark/conf/slaves
寫上
master
data1
至此源虛擬機搭建完畢,
master構建
源虛擬機關機,完整克隆一個取名master,並開機。
IP
此時要先設置ip,因爲ip即將變動,所以先不用xshell
主機名
sudo hostname master
sudo vi /etc/hostname
hadoop配置
因爲之前有說hdfs-site.xml配置其實多了,現在在datanode裏面刪去namenode的配置,在namenode裏面刪去datanode配置。
data1構建
同上,可以在xshell裏面用master的shell,執行ssh data1
來轉到data1的shell,想要回到master的shell,只要執行logout
即可。
集羣正式搭建
在master執行hdfs namenode -format
,如果出現以下輸出則爲配置成功。
在master執行start-all.sh
,圖片如下
在master上執行jps
會得到
在data1上執行jps
會得到
如果都啓動了,則爲啓動成功,當然web界面也可以看到,在自己主機上用瀏覽器打開http://192.168.222.101:50070
也可以看到啓動的data節點。
現在hadoop中的hdfs已經啓動完成
之後再檢測spark安裝是否成功。
cd spark/sbin
./start-all.sh
如果啓動成功則可以在自己的主機瀏覽器上輸入192.168.222.101:8079查看sparkWEB,
如圖所示,則spark也啓動成功