從入門到入土 Hadoop新手搭建(2) 分佈式集羣搭建

個人學習筆記,僅供參考

從入門到入土 Hadoop新手搭建(2) 分佈式集羣搭建

(1)JDK安裝

    Hadoop基於JAVA,要運行JAVA必然要先安裝java。按照我上一篇的指南這樣做的話,現在就可以打開xshell進行連接。在xshell中,我們運行java -version查看java版本,如果我沒記錯的話,java要1.6以上,按照我的流程走的話,現在是沒有安裝java的,如圖
在這裏插入圖片描述
然後,我們在上一篇已經完成換源了,所以我們現在安裝java會很快,運行sudo apt-get install default-jdk 安裝就可以了。後來在使用pyspark時,實測報錯,需要用java1.8,所以此處運行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和普通機器的區別,以便複製的時候進行最少操作

  1. IP設置,靜態ip設置顯然要不同
  2. host設置,host設置相同,但是增加節點則需要修改
  3. 主機名,方便辨認主機名應當不同
  4. ssh無密碼訪問。
        理論上來說,應當對於每一個獨立的服務器生成私鑰和公鑰,公鑰傳給master,這樣master可以訪問所有普通節點。
        當然也可以做成所有節點互通,master集成所有公鑰之後,將公鑰複製給所有的普通節點。
        也有更取巧的方法,master生成公鑰密鑰後,以master爲藍本複製虛擬機,即可完成互相訪問。
  5. 環境變量,master和普通節點的環境變量設置應當是一樣的。
  6. 除了Hive只需安裝在master以外,其他組件可以完全複製。

現在要建立一個源節點,之後所有的節點都從這個源節點複製而來

源節點任務清單(按組件分的):

  1. 與組件無關的任務,如host,ssh
  2. hadoop
        修改core-site.xml 、hdfs-site.xml、mapred-site.xml 、yarn-site.xml、hadoop-env.sh、配置slaves、配置環境變量
  3. HBase
        修改hbase-site.xml、regionservers,配置環境變量
  4. 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也啓動成功

此章未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章