CentOS 7上搭建Spark 3.0.1 + Hadoop 3.2.1分散式叢集
CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分散式叢集
VMWare 安裝CentOS 7
- 推薦使用VMware Workstation Pro 16,下載安裝即可。
- 下載最新的CentOS 7 Minimal-2009.iso,在虛擬機器安裝。推薦1G運存和20G儲存。
- 在CentOS 7的安裝過程中,需要設定root使用者的密碼,還可以根據需要建立單獨的使用者。
- 安裝完成後,使用命令列進行更新,然後安裝net-tools.x86_64,以方便檢視ip地址。
ip地址為:192.168.92.137# 如果在安裝時沒有連線網路 vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 將ONBOOT=no修改為yes # 重啟網路服務 service network restart # 更新系統 yum update # 安裝net-tools yum install net-tools.x86_64 # 檢視ip地址 ifconfig
使用Xshell連線虛擬機器
- 這裡可以下載Xshell家庭/學校免費版,但是您需要申請才行。
- 檔案->新建會話,資訊配置可以參考如下,連線即可。
表格中的資訊,具體需要更換成您自己的。名稱 主機 埠 使用者名稱 CentOS 7 192.168.92.137 22 root
叢集設定
- 節點設定。
為什麼上面的ip地址是連續的呢? 這其實跟DHCP有關,下一步我們會使用克隆主機的方式來建立多個slave機器,大家可以去驗證,但是可能出現與表中不一直的ip,我們根據需要修改即可。hostname(主機名) ip地址 namenode(主節點) datanode(從節點) master 192.168.92.137 True False slave1 192.168.92.138 False True slave2 192.168.92.139 False True slave3 192.168.92.140 False True
安裝JDK 1.8
- 在進行下一步的克隆前,我們先安裝jdk-8u271-linux-x64.tar.gz,目前1.8版本的下載需要註冊Oracle的賬號才能夠下載,有點麻煩呢。
- 使用SCP命令上傳到master主機上,scp命令使用參考如下。
引數依次是本地檔案,遠端使用者名稱和遠端ip,以及儲存的資料夾。在PowerShell中使用如下。scp local_file remote_username@remote_ip:remote_folder
PS E:\XunLeiDownload> scp .\jdk-8u271-linux-x64.tar.gz root@192.168.92.137:/usr/local >>> # 這是輸出 The authenticity of host '192.168.92.137 (192.168.92.137)' can't be established. ECDSA key fingerprint is SHA256:DjkK5V/chVHAD1SsaosqdxfH4wClmH8S6M8kxw7X/RQ. Are you sure you want to continue connecting (yes/no)? Warning: Permanently added '192.168.92.137' (ECDSA) to the list of known hosts. root@192.168.92.137's password: jdk-8u271-linux-x64.tar.gz 100% 137MB 91.5MB/s 00:01 # 上傳成功
- 解壓jdk1.8到/usr/local路徑下,
安裝vim,編輯/etc/profile,tar -xvf jdk-8u271-linux-x64.tar.gz mv jdk1.8.0_271 jdk1.8 # 重新命名資料夾
新增兩行內容如下,yum install vim # 安裝vim vim /etc/profile
執行export JAVA_HOME=/usr/local/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
使環境生效,$JAVA_HOME
檢視是否配置成功,或者,
表示配置成功。java -version >>> java version "1.8.0_271" Java(TM) SE Runtime Environment (build 1.8.0_271-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
SSH 免密登陸
- 在配置ssh免密登陸之前,將master克隆3份slaves出來,然後驗證其ip是否和上面所述一致,並使用Xshell連線,這樣我們可以得到額外的三臺機器,且都安裝好Java的。
注意:在使用克隆時,不太推薦使用連結克隆。
使用ifconfig
檢視ip地址後,如下,下面將按照這個ip地址進行配置。hostname(主機名) ip地址 namenode(主節點) datanode(從節點) master 192.168.92.137 True False slave1 192.168.92.134 False True slave2 192.168.92.135 False True slave3 192.168.92.146 False True - 在master節點上更改hosts檔案如下。
vim /etc/hosts
編輯,在後面新增以下行。
其他的slave節點也應該如此。192.168.92.137 master 192.168.92.134 slave1 192.168.92.135 slave2 192.168.92.136 slave3
- 使用以下命令,分別更改4臺機器的主機名,以master節點為例。
其他節點是slave1-3,更改完成後在Xshell中重啟會話就可以發現主機名已經改變啦。hostnamectl set-hostname master
- 要使master和3臺slave免密登陸,需先在本地機器使用
ssh-keygen
一個公私鑰對。
其他三臺機器也是這樣生成。ssh-keygen -t rsa # 生成公私鑰對 >>> Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): # 不用輸入 Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. # 存放位置 Your public key has been saved in /root/.ssh/id_rsa.pub. # 公鑰 The key fingerprint is: SHA256:vGAdZV8QBkGYgbyAj4OkQ9GrYEEiilX5QLmL97CcFeg root@master The key's randomart image is: +---[RSA 2048]----+ |+o++o+ ..=*o+o. | |==..= o oo o . | |*..o.* .. . | |=.o.+ +o . | |o..+ .o.S | | .. E... . | | o * . | | + . | | | +----[SHA256]-----+
- 將slaves生成的所有
id_rsa.pub
公鑰檔案通過scp
上傳到master的/root/.ssh/
目錄下。
在master節點上,將所有的公鑰檔案寫入scp id_rsa.pub root@master:/root/.ssh/id_rsa.pub.1 # slave2 對應於.2 scp id_rsa.pub root@master:/root/.ssh/id_rsa.pub.2 # 依此類推 # master上也要這樣處理,否則就不能從slaves登陸到master,如下 scp id_rsa.pub root@master:/root/.ssh/
authorized_keys
檔案中。
分發cat id_rsa.pub* >> authorized_keys rm -rf id_rsa.pub.* # 刪除
authorized_keys
檔案給slaves機器。
分發scp authorized_keys root@slave1:/root/.ssh/ scp authorized_keys root@slave2:/root/.ssh/ scp authorized_keys root@slave3:/root/.ssh/
known_hosts
檔案給slaves機器。
這樣就可以實現免密登陸啦,檢視scp known_hosts root@slave3:/root/.ssh/ # 其他同上
known_hosts
檔案如下。
符合這樣的格式才可以呢。master,192.168.92.137 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk= slave1,192.168.92.134 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk= slave2,192.168.92.135 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk= slave3,192.168.92.136 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk=
安裝hadoop 3.2
- 下載hadoop-3.2.1.tar.gz,通過scp上傳之master節點,然後解壓。
PS E:\XunLeiDownload> scp .\jdk-8u271-linux-x64.tar.gz root@192.168.92.137:/usr/local tar -xvf hadoop-3.2.1.tar.gz # 解壓在/usr/local/hadoop-3.2.1
- 新增環境變數,
vim /etc/profile
,在最後新增以下兩行。
執行以下命令export HADOOP_HOME=/usr/local/hadoop-3.2.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME:/sbin
source /etc/profile
,使配置檔案生效,並檢視是否成功。hadoop version >>> Hadoop 3.2.1 Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842 Compiled by rohithsharmaks on 2019-09-10T15:56Z Compiled with protoc 2.5.0 From source with checksum 776eaf9eee9c0ffc370bcbc1888737 This command was run using /usr/local/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar
- 在hadoop安裝目錄下建立以下目錄:
mkdir tmp # 即hadoop-3.2.1/tmp, 儲存臨時檔案 mkdir -p hdfs/name # namenode的資料目錄 mkdir -p hdfs/data # datanode的資料目錄
- 配置相關配置檔案,在
etc/hadoop
目錄下。
在core-site.xml檔案中指定預設檔案系統和臨時檔案目錄。檔案 介紹 core-site.xml 核心配置檔案 dfs-site.xml hdfs儲存相關配置 apred-site.xml MapReduce相關的配置 arn-site.xml yarn相關的一些配置 workers 用來指定從節點,檔案中預設是localhost hadoop-env.sh 配置hadoop相關變數
在hdfs-site.xml中配置複製份數,datanode和namenode的目錄。<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-3.2.1/tmp</value> </property> </configuration>
在mapred-site.xml中指定主節點和新增classpath。<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:/usr/local/hadoop-3.2.1/hdfs/name</value> <final>true</final> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop-3.2.1/hdfs/data</value> <final>true</final> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration>
yarn-site.xml中都需要指向主節點。<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> <property> <name>mapreduce.application.classpath</name> <value> /usr/local/hadoop-3.2.1/etc/hadoop, /usr/local/hadoop-3.2.1/share/hadoop/common/*, /usr/local/hadoop-3.2.1/share/hadoop/common/lib/*, /usr/local/hadoop-3.2.1/share/hadoop/hdfs/*, /usr/local/hadoop-3.2.1/share/hadoop/hdfs/lib/*, /usr/local/hadoop-3.2.1/share/hadoop/mapreduce/*, /usr/local/hadoop-3.2.1/share/hadoop/mapreduce/lib/*, /usr/local/hadoop-3.2.1/share/hadoop/yarn/*, /usr/local/hadoop-3.2.1/share/hadoop/yarn/lib/* </value> </property> </configuration>
workers中指定datanode節點。<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> </configuration>
在hadoop-env.sh中指定使用者。localhost slave1 slave2 slave3
export HADOOP_HOME=/usr/local/jdk1.8 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
- 將配置好的hadoop分發到其他機器,在其他slaves機器上也要執行步驟2新增環境變數哦。
scp -r hadoop-3.2.1 slave1:/usr/local/ scp -r hadoop-3.2.1 slave2:/usr/local/ scp -r hadoop-3.2.1 slave3:/usr/local/
- 格式化namenode,在master執行。
在輸出中看到hdfs name -format >> 2020-11-25 23:58:07,593 INFO common.Storage: Storage directory /usr/local/hadoop-3.2.1/hdfs/name has been successfully formatted. 2020-11-25 23:58:07,640 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop-3.2.1/hdfs/name/current/fsimage.ckpt_0000000000000000000 using no compression 2020-11-25 23:58:07,792 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop-3.2.1/hdfs/name/current/fsimage.ckpt_0000000000000000000 of size 396 bytes saved in 0 seconds . 2020-11-25 23:58:07,807 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 2020-11-25 23:58:07,825 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown. 2020-11-25 23:58:07,826 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at master/192.168.92.137 ************************************************************/
Storage: Storage directory /usr/local/hadoop-3.2.1/hdfs/name has been successfully formatted.
,說明格式話成功了,在下一次格式化前,需要刪除hdfs和tmp目錄下的所有檔案,否則會執行不起來。 - 啟動hadoop,在
sbin
下。
使用./start-all.sh >>> ./start-all.sh Starting namenodes on [master] 上一次登入:四 11月 26 00:08:30 CST 2020pts/5 上 master: namenode is running as process 14328. Stop it first. Starting datanodes 上一次登入:四 11月 26 00:14:03 CST 2020pts/5 上 slave1: WARNING: /usr/local/hadoop-3.2.1/logs does not exist. Creating. slave3: WARNING: /usr/local/hadoop-3.2.1/logs does not exist. Creating. slave2: WARNING: /usr/local/hadoop-3.2.1/logs does not exist. Creating. localhost: datanode is running as process 14468. Stop it first. Starting secondary namenodes [master] 上一次登入:四 11月 26 00:14:04 CST 2020pts/5 上 Starting resourcemanager 上一次登入:四 11月 26 00:14:09 CST 2020pts/5 上 resourcemanager is running as process 13272. Stop it first. Starting nodemanagers 上一次登入:四 11月 26 00:14:19 CST 2020pts/5 上
jps
檢視。
這上面顯示的master節點的資訊slaves節點則少了一些,可以自行檢視哦。jps >>> 15586 Jps 14468 DataNode 14087 GetConf 13272 ResourceManager 14328 NameNode 15096 SecondaryNameNode 15449 NodeManager
- 驗證,訪問namenod主節點埠9870。
webui地址在:service firewalld stop # 需要關閉防火牆哦
http://192.168.92.137:9870/
。
在下面的摘要如下,可以看到確實有4個節點。
檢視yarn管理介面,在http://192.168.92.137:8088/cluster
。
- 測試,向hdfs檔案系統中寫入一個檔案。
可以看到確實在是三個節點上覆制儲存。PS E:\XunLeiDownload> scp .\TwitterSecurity.csv root@192.168.92.137:/root # 這裡上傳一個40多兆的csv檔案 hdfs dfs -put TwitterSecurity.csv /
安裝Spark 3.0.1
-
下載預編譯hadoop3.2的版本,spark-3.0.1-bin-hadoop3.2.tgz。
-
使用scp上傳到master節點上,然後解壓,並加入相應的環境變數。
PS E:\XunLeiDownload> scp .\spark-3.0.1-bin-hadoop3.2.tgz root@192.168.92.137:/usr/local # 上傳 tar -xvf spark-3.0.1-bin-hadoop3.2.tgz # 解壓 mv spark-3.0.1-bin-hadoop3.2 spark-3.0.1
vim /etc/profile
新增以下兩行。export SPARK_HOME=/usr/local/spark-3.0.1 export PATH=$PATH:$SPARK_HOME:/bin:$SPARK_HOME:/sbin
source /etc/profile
使配置檔案生效。 -
進入conf資料夾,複製配置檔案模板。
cp spark-env.sh.template spark-env.sh
在spark-env.sh後面新增以下行。export JAVA_HOME=/usr/local/jdk1.8 export HADOOP_CONF_DIR=/usr/local/hadoop-3.2.1/etc/hadoop export SPARK_MASTER_HOST=master export SPARK_LOCAL_DIRS=/usr/local/spark-3.0.1
cp slaves.template slaves
編輯如下。localhost slave1 slave2 slave3
-
將spark分發給slaves機器,同時不要忘記環境變數。
scp -r spark-3.0.1 slave1:/usr/local/ scp -r spark-3.0.1 slave2:/usr/local/ scp -r spark-3.0.1 slave3:/usr/local/
-
執行,進入
sbin
目錄。./start-all.sh >>> org.apache.spark.deploy.master.Master running as process 16859. Stop it first. slave1: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-3.0.1/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave1.out slave3: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-3.0.1/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave3.out localhost: org.apache.spark.deploy.worker.Worker running as process 17975. Stop it first. slave2: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-3.0.1/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave2.out
-
檢視,地址在:
http://192.168.92.137:8080/
。
總結
- 這不是個好玩意兒,配置起來真的很折騰人QAQ
- 喜歡的麻煩收藏一波呀hhh
相關文章
- CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分散式叢集CentOSSparkHadoop分散式
- hadoop分散式叢集搭建前期準備(centos7)Hadoop分散式CentOS
- Centos7搭建hadoop3.3.4分散式叢集CentOSHadoop分散式
- hadoop分散式叢集搭建Hadoop分散式
- Spark3.0.1各種叢集模式搭建Spark模式
- centos7 hadoop3.2.0分散式叢集搭建步驟CentOSHadoop分散式
- Hadoop分散式叢集搭建_1Hadoop分散式
- hadoop叢集搭建,CentOS7克隆HadoopCentOS
- HADOOP SPARK 叢集環境搭建HadoopSpark
- hadoop叢集搭建——單節點(偽分散式)Hadoop分散式
- CentOS7搭建Hadoop-3.3.0叢集手記CentOSHadoop
- Hadoop框架:叢集模式下分散式環境搭建Hadoop框架模式分散式
- CentOS7 上搭建多節點 Elasticsearch叢集CentOSElasticsearch
- HA分散式叢集搭建分散式
- hbase分散式叢集搭建分散式
- HDFS分散式叢集搭建分散式
- centos7搭建redis叢集CentOSRedis
- CentOS7 搭建 Redis 叢集CentOSRedis
- CentOS7下搭建hadoop2.7.3完全分散式CentOSHadoop分散式
- Hadoop完全分散式叢集配置Hadoop分散式
- Spark在Hadoop叢集上的配置(spark-1.1.0-bin-hadoop2.4)SparkHadoop
- centos7搭建dolphinscheduler叢集CentOS
- CentOS 7下搭建高可用叢集CentOS
- CentOS 7 下搭建高可用叢集CentOS
- 雲主機centos7搭建基於docker的hadoop叢集CentOSDockerHadoop
- 搭建spark on yarn 叢集SparkYarn
- Centos7 ELK7.6.2叢集搭建CentOS
- Centos mini系統下的Hadoop叢集搭建CentOSHadoop
- Hadoop叢集搭建Hadoop
- Hadoop搭建叢集Hadoop
- Hadoop叢集完全分散式模式環境部署Hadoop分散式模式
- Spark3.0.0叢集搭建Spark
- Spark 叢集搭建從零開始之2 Spark單機偽分散式安裝與配置Spark分散式
- Centos7下GlusterFS分散式儲存叢集環境部署記錄CentOS分散式
- centOS 7-Hadoop3.3.0完全分散式部署CentOSHadoop分散式
- CentOS7 Hadoop-2.7.4 分散式部署CentOSHadoop分散式
- CentOS7.2下Hadoop2.7.2的叢集搭建CentOSHadoop
- greenplum 6.9 for centos7叢集搭建步驟CentOS