Hadoop、HBase、Spark單機安裝
水平有限,本文僅以流水賬的方式 介紹自己 安裝 三款軟體 的過程。
環境Ubuntu on 虛擬機器:
$ cat /proc/version Linux version 4.15.0-54-generic (buildd@lgw01-amd64-014) (gcc version 7.4.0 \
(Ubuntu 7.4.0-1ubuntu1~18.04.1)) #58-Ubuntu SMP Mon Jun 24 10:55:24 UTC 2019
背景
Hadoop 包含 HDFS、MapReduce(兩大核心),基於 Hadoop core 實現,對了Hadoop中還有一款 資源管理器YARN。
HBase 一個分散式資料庫,列儲存模式,HBase將資料儲存在HDFS(基於),分散式NoSQL資料庫,類似MongoDB、Cassandra,不過,可以處理的資料量級大於MongoDB。
Spark 是一個計算框架,為了解決Hadoop的計算效率低下等問題而生,它基於記憶體做計算,可以基於Hadoop,也可以不和Hadoop一起使用。
三款軟體都屬於 Apache基金會,從下面的連結中可以找到 各個軟體(Download & Documentation):
https://www.apache.org/index.html#projects-list
安裝選擇的版本:
Hadoop:hadoop-3.1.3.tar.gz2019 Oct 21
HBase:hbase-2.2.5-bin.tar.gz2020/05/21
Spark:spark-3.0.0-bin-hadoop3.2.tgzJun 18, 2020
注意,
HBase 1.*、2.* 的區別是什麼?其 1.6.0 釋出於2020/03/06,看來兩個版本都是處於 很好的維護階段。
spark with hadoop、without hadoop的區別是什麼?
作者還沒弄明白。
正文
0、準備工作
建立 hadoop使用者(不一定是 hadoop),並新增 管理員許可權
JDK 8+(Linux上有 OpenJDK 的)
ssh、sshd、pdsh
1、Hadoop
三種安裝模式中的Pseudo-Distributed Mode(偽分散式) 模式 + YARN資源排程器。
解壓hadoop-3.1.3.tar.gz;
修改etc/hadoop/hadoop-env.sh:
新增export JAVA_HOME=jdk安裝目錄;
執行 bin/hadoop 可以看到 這個命令的使用者;
bin目錄 下是 一些 原始命令,sbin目錄 下 是 一些服務命令——啟動、停止等。
此時,hadoop命令就可以使用了,如官網所說,可以執行一些任務了。
etc下檔案:
$ ll etc/hadoop/ total 184 drwxr-xr-x 3 hadoop hadoop 4096 7月 9 08:46 ./ drwxr-xr-x 3 hadoop hadoop 4096 9月 12 2019 ../ -rw-r--r-- 1 hadoop hadoop 8260 9月 12 2019 capacity-scheduler.xml -rw-r--r-- 1 hadoop hadoop 1335 9月 12 2019 configuration.xsl -rw-r--r-- 1 hadoop hadoop 1940 9月 12 2019 container-executor.cfg -rw-r--r-- 1 hadoop hadoop 866 6月 29 15:50 core-site.xml -rw-r--r-- 1 hadoop hadoop 3999 9月 12 2019 hadoop-env.cmd -rw-r--r-- 1 hadoop hadoop 15934 6月 29 14:48 hadoop-env.sh -rw-r--r-- 1 hadoop hadoop 3323 9月 12 2019 hadoop-metrics2.properties -rw-r--r-- 1 hadoop hadoop 11392 9月 12 2019 hadoop-policy.xml -rw-r--r-- 1 hadoop hadoop 3414 9月 12 2019 hadoop-user-functions.sh.example -rw-r--r-- 1 hadoop hadoop 1072 6月 30 15:03 hdfs-site.xml -rw-r--r-- 1 hadoop hadoop 1484 9月 12 2019 httpfs-env.sh -rw-r--r-- 1 hadoop hadoop 1657 9月 12 2019 httpfs-log4j.properties -rw-r--r-- 1 hadoop hadoop 21 9月 12 2019 httpfs-signature.secret -rw-r--r-- 1 hadoop hadoop 620 9月 12 2019 httpfs-site.xml -rw-r--r-- 1 hadoop hadoop 3518 9月 12 2019 kms-acls.xml -rw-r--r-- 1 hadoop hadoop 1351 9月 12 2019 kms-env.sh -rw-r--r-- 1 hadoop hadoop 1747 9月 12 2019 kms-log4j.properties -rw-r--r-- 1 hadoop hadoop 682 9月 12 2019 kms-site.xml -rw-r--r-- 1 hadoop hadoop 13326 9月 12 2019 log4j.properties -rw-r--r-- 1 hadoop hadoop 951 9月 12 2019 mapred-env.cmd -rw-r--r-- 1 hadoop hadoop 1764 9月 12 2019 mapred-env.sh -rw-r--r-- 1 hadoop hadoop 4113 9月 12 2019 mapred-queues.xml.template -rw-r--r-- 1 hadoop hadoop 1027 6月 29 16:49 mapred-site.xml drwxr-xr-x 2 hadoop hadoop 4096 9月 12 2019 shellprofile.d/ -rw-r--r-- 1 hadoop hadoop 2316 9月 12 2019 ssl-client.xml.example -rw-r--r-- 1 hadoop hadoop 2697 9月 12 2019 ssl-server.xml.example -rw-r--r-- 1 hadoop hadoop 2642 9月 12 2019 user_ec_policies.xml.template -rw-r--r-- 1 hadoop hadoop 10 9月 12 2019 workers -rw-r--r-- 1 hadoop hadoop 2250 9月 12 2019 yarn-env.cmd -rw-r--r-- 1 hadoop hadoop 6056 9月 12 2019 yarn-env.sh -rw-r--r-- 1 hadoop hadoop 2591 9月 12 2019 yarnservice-log4j.properties -rw-r--r-- 1 hadoop hadoop 1159 6月 29 17:41 yarn-site.xml hadoop@ben-VirtualBox:~/ws/hadoop-3.1.3$etc/hadoop目錄
參考官網,進一步安裝Pseudo-Distributed Mode 的 hadoop。
修改etc/hadoop/core-site.xml;
修改 etc/hadoop/hdfs-site.xml:比官網多了 namenode、datanode 的配置,,預設是在 /tmp目錄下,重啟後 資料丟失,下次由需要重新 格式化,,整個HDFS中,只會有一個 namenode,但是,<value>屬性 可以配置 多個值(看到過一篇博文,首個目錄後的為 備用)。
配置無密碼登入(ssh localhost):在使用者的 HOME目錄 下執行,執行後會有 .ssh資料夾
ssh-keygen
上面的配置後,HDFS可用了,也可以執行 hadoop任務(描述準確嗎?)。
使用前,需要執行HDFS格式化:
$ bin/hdfs namenode -format
啟動HDFS:
$ sbin/start-dfs.sh
此時,使用 jps命令 可以看到 namenode、datanode、SecondaryNameNode等Java程序:
使用http://localhost:9870/ 可以看到 一些hadoop的資訊。
如 官網所講,此時,可以使用bin/hdfs 命令 操作HDFS了,建立資料夾、操作檔案等。
HDFS 就是一個 以 根目錄(/) 為節點的 分散式檔案系統,目錄結構類似 Linux系統,但是,預設的 根目錄下 沒有內容。
接下來,配置YARN資源排程器。
修改etc/hadoop/mapred-site.xml:
<configuration> <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> </configuration>
修改etc/hadoop/yarn-site.xml:
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
注意,
配置yarn.nodemanager.vmem-check-enabled 是為了 避免 任務需要的記憶體超過虛擬記憶體大小 時,任務自動失敗 的問題。
使用下面的命令 即可 啟動yarn資源排程器:
$ sbin/start-yarn.sh
啟動成功,使用 jps命令 可以看到其程序:NodeManager、ResourceManager:
~/ws/hadoop-3.1.3$ sbin/start-yarn.sh Starting resourcemanager Starting nodemanagers hadoop@ben-VirtualBox:~/ws/hadoop-3.1.3$ jps 4193 SecondaryNameNode 3942 DataNode 5320 NodeManager 5130 ResourceManager 3772 NameNode 5647 Jps ~/ws/hadoop-3.1.3$
訪問下面的連結 可以看到 資源管理器:
和前一步 沒有啟動yarn一樣 執行hadoop任務,可以在這個頁面 看到 任務執行詳情。
2、HBase
參考連結:
http://hbase.apache.org/book.html#quickstart
https://foochane.cn/article/2019062801.html
下載2.2.5:hbase-2.2.5-bin.tar.gz;
解壓:tar xzvf hbase-2.2.5-bin.tar.gz;
修改hbase-env.sh:export JAVA_HOME、export HBASE_MANAGES_ZK=false;
修改hbase-site.xml :hbase.rootdir、hbase.zookeeper.quorum——埠為2182;
單機 偽分散式部署,故,無需更改regionservers 檔案:預設為 localhost;
配置修改環境。
確保 hdfs、ZooKeeper 已啟動,然後,啟動 hbase:bin/start-hbase.sh;
HMaster啟動了,成功!
此時,可以訪問 localhost:16010 (舊版本的埠 不是 16010);
bin目錄下檔案:
重點:
hbase啟動後,可以通過 HBase shell 操作它。
list、help……需要摸索,和操作一般資料庫差不多。
HBase 啟動後,在 HDFS 下會建立一個 /hbase目錄:
至此,HBase 單機偽分散式 安裝完畢。
3、Spark
提前安裝Scala:
下載scala-2.13.3.tgz,解壓,修改~/.bashrc檔案(修改後執行 source);
命令列輸入 scala,進入互動式命令列:
開始Spark安裝:
下載 spark-3.0.0-bin-hadoop3.2.tgz , 解壓;
修改spark-env.sh;
單機,無需更改 slaves;
修改~/.bashrc檔案:
啟動Hadoop後,啟動Spark:
$SPARK_HOME/sbin/start-all.sh
注意,
start-all.sh 中會啟動 start-master.sh ,其中會配置 Master的 埠為 8080,會存在 衝突,修改後才可以啟動成功。
訪問 localhost:8081 可得:
說明,start-history-server.sh 的作用 未測試,不啟動也是可以的。
bin目錄 下的檔案列表:
執行 spark-shell 啟動 互動式介面;
啟動成功,則可以使用 4040埠訪問:
Spark啟動了,接下來,怎麼使用Spark呢?
統計HDFS中一個檔案的行數:
4040埠 所在的頁面 可以看到 任務 更詳細的資訊:
就這樣,
安裝好了,接下來 可以 一邊學習 一邊實踐了(Learning by Doing) ......
參考資料:
1、Hadoop: Setting up a Single Node Cluster.
https://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-common/SingleCluster.html
2、網友 foochane 的 大資料 分類
https://foochane.cn/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/page/2/
hadoophttps://foochane.cn/article/2019051901.html
hbasehttps://foochane.cn/article/2019062801.html
sparkhttps://foochane.cn/article/2019051904.html
後記
作者儘量保證文章的準確性,如有謬誤,還請指正(不強求)。
yarn.nodemanager.vmem-check-enabled