Ubuntu16.04 下多節點集群的 Spark 及 Hadoop HDFS 安裝、配置及運行(一)

多節點集群的 Spark + HDFS 安裝

Posted by laochanlam on May 18, 2020

前言

本系列文章利用多台機器建立 HDFS 以及 Spark 服務。若你只需要使用 Spark,可以不必額外進行 Hadoop 的安裝,但由於筆者有 HDFS + Spark 的需求,而且 HDFS 是在 Hadoop 裡面,所以把 Hadoop 也一併裝上。

本文所示範的例子使用的是 Hadoop2.7 + Spark2.4。

JAVA 版本

要配置 HDFS 或使用 Hadoop 的其他服務時我們首先要先注意 Java 的版本,因為筆者在跑 HiBench 的時候使用 Maven 編譯發現編譯錯誤,在查資料之後發現原來許多人使用 OpenJDK 都會發生不同的錯誤,而且推薦使用 Oracle JDK。為了減少你以後在 Hadoop 上會踩上的坑,還是建議先替換到 Oracle JDK。

然而,由於 Oracle Java 的 License 有所變更的緣故,故網上大部分有關於使用 PPA 下載並安裝 Oracle Java 的方法都不能用。最新的方法是到 Oracle java 的官網上進行下載。

首先我們可以對本機的 JAVA 版本進行確認

$ java -version

若本機正在使用的是 OpenJDK 版本,顯示的會是類似於

openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b09)
OpenJDK 64-Bit Server VM (build 25.242-b09, mixed mode)

若本機正在使用的是 Oracle 版本,顯示的會是類似於

java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

若你原來的是 OpenJDK 版本以及沒有安裝 Oracle JAVA,可以在官網上下載 Oracle JAVA 8

Imgur

找到這裡之後根據機器的配置下載相對應的 Oracle JAVA,然後解壓縮

$ tar -xzvf jdk-8u251-linux-x64.tar.gz jdk1.8.0_251/

並把他放到你常用的安裝目錄下

sudo mv jdk1.8.0_251/ /opt

然後把你的 JAVA 安裝到可替換的目錄當中

$ sudo update-alternatives --install "/usr/bin/java" "java" ""/opt/jdk1.8.0_251/bin/java" 100

然後把你預設使用的 JAVA 換成 Oracle JAVA

$ sudo update-alternatives --set java /opt/jdk1.8.0_251/bin/java

然後現在看看 JAVA 就可以看到替換之後的版本

$ java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

以及根據你的目錄在 ~/.bashrc 中設置 $JAVA_HOME ,在隨後的 Spark 及 Hadoop 會用到

export JAVA_HOME=/usr

這就完成了 JAVA 的替換。

Hadoop 安裝

首先我們一樣需要取得 Hadoop 和壓解縮,

$ wget https://archive.apache.org/dist/hadoop/common/hadoop-
$ tar zxf hadoop-2.7.0.tar.gz 

然後可以選擇把 Hadoop 放到你常用的安裝目錄下,例如:

$ sudo mv hadoop-2.7.0 /usr/local/hadoop

若你希望能夠更方便的使用 hadoop 的命令,可以選擇把 Hadoop 的 bin/ 加到本機的 $PATH中,在例子中筆者把 Spark 以及 Hadoop 的 bin 目錄都加入了 ~/.bashrc上的$PATH

$ export PATH="/usr/local/spark/bin:/usr/local/hadoop/bin:$PATH"
$ source ~/.bashrc

然後輸入 hadoophdfs 驗證安裝是否成功。

$ hadoop 

Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings

Most commands print help when invoked w/o parameters.
$ hdfs

Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND
       where COMMAND is one of:
  dfs                  run a filesystem command on the file systems supported in Hadoop.
  classpath            prints the classpath
  namenode -format     format the DFS filesystem
  secondarynamenode    run the DFS secondary namenode
  namenode             run the DFS namenode
  journalnode          run the DFS journalnode
  zkfc                 run the ZK Failover Controller daemon
  datanode             run a DFS datanode
  dfsadmin             run a DFS admin client
  haadmin              run a DFS HA admin client
  fsck                 run a DFS filesystem checking utility
  balancer             run a cluster balancing utility
  jmxget               get JMX exported values from NameNode or DataNode.
  mover                run a utility to move block replicas across
                       storage types
  oiv                  apply the offline fsimage viewer to an fsimage
  oiv_legacy           apply the offline fsimage viewer to an legacy fsimage
  oev                  apply the offline edits viewer to an edits file
  fetchdt              fetch a delegation token from the NameNode
  getconf              get config values from configuration
  groups               get the groups which users belong to
  snapshotDiff         diff two snapshots of a directory or diff the
                       current directory contents with a snapshot
  lsSnapshottableDir   list all snapshottable dirs owned by the current user
                                                Use -help to see options
  portmap              run a portmap service
  nfs3                 run an NFS version 3 gateway
  cacheadmin           configure the HDFS cache
  crypto               configure HDFS encryption zones
  storagepolicies      list/get/set block storage policies
  version              print the version

Most commands print help when invoked w/o parameters.

若出現以上的 help 目錄,代表安裝已完成。

Spark 安裝

Spark 的下載及安裝也和 Hadoop 無異,我們需要先下載 Scala

$ sudo apt install scala -y

然後利用 wget 進行下載及解壓縮

$ wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
$ tar xvf spark-*

放到你常用的下載目錄

$ sudo mv spark-2.4.0-bin-hadoop2.7 /usr/local/
$ cd /usr/local/

若你有多個同時存在於不同版本 Spark 的需要,你可以用下方式建立鏈結,便於替換

sudo ln -s spark-2.4.0-bin-hadoop2.7/ spark

$SPARK_HOME 加到 ~/.bashrc中,同時亦可以和 Hadoop 一樣把 bin 目錄加到 $PATH

export SPARK_HOME=/usr/local/spark
export PATH="/usr/local/spark/bin:/usr/local/hadoop/bin:$PATH"
$ source ~/.bashrc

然後就可以驗證 Spark 的使用,若出現以下結果就是正常安裝了

$ spark-shell

2020-05-18 17:04:48 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://worker1:4040
Spark context available as 'sc' (master = local[*], app id = local-1589792692425).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.0
      /_/
         
Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_251)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

總結

在本文(一)中介紹了 JAVA 版本選用以及 Hadoop 和 Spark 的安裝,在接下來的篇幅(二)中會對如何在多節點機器上進行 HDFS 和 Spark 配置,以及簡單範例的運行進行介紹。