前言
本系列文章利用多台機器建立 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
找到這裡之後根據機器的配置下載相對應的 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
然後輸入 hadoop
和 hdfs
驗證安裝是否成功。
$ 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 配置,以及簡單範例的運行進行介紹。