1、前言
本文記錄學習過程中Hadoop、zookeeper、spark集群搭建,主要為pyspark庫服務(具體為window上pyspark環(huán)境和pyspark庫,linux上spark框架、pyspark應用程序、pyspark環(huán)境和pyspark庫)。pyspark環(huán)境是用anaconda3搭建的環(huán)境。pyspark應用程序,是安裝spark集群里面自帶的,提供一個python解釋器環(huán)境來執(zhí)行spark任務。pyspark庫,是python里面的庫,可以import導入,里面配置了完全的sparkapi,可以編寫spark程序在window或linux上運行。
本文的集群搭建主要以linux為主,對于pyspark庫部分,將涉及window,用來在window下使用pyspark庫寫程序運行以及上傳到linux上運行。如果只關(guān)注pyspark庫在window上運行,直接到2.11部分進行配置。
本文使用文件:
jdk:jdk-8u361-linux-x64.tar,jdk-8u361-windows-x86.exe
hadoop:hadoop-3.3.4.tar.gz
zookeeper:apache-zookeeper-3.5.9-bin.tar.gz
spark:spark-3.2.0-bin-hadoop3.2.tgz
anaconda3:Anaconda3-2021.05-Linux-x86_64.sh,anaconda3-2021.05-windows-x86_64.exe
hive:apache-hive-3.1.3-bin.tar.gz
mysql驅(qū)動包:mysql-connector-java-5.1.34.jar,linux內(nèi)部安裝的5.7版本。mysql-connector-java-8.0.13
本文內(nèi)容中涉及路徑的,根據(jù)自己設定進行修改。
2、搭建過程
2.1虛擬機設置
本文使vmware搭建linux虛擬機。
打開vmware虛擬網(wǎng)絡編輯器,更改設置-vmnet8-子網(wǎng)為192.168.88.0,子網(wǎng)掩碼為255.255.255.0-nat設置-網(wǎng)關(guān)為192.168.88.2-確定。
使用centos7操作系統(tǒng)。下載好安裝并創(chuàng)建用戶。右擊該用戶-管理-克隆-其中選擇完整克隆-名字為node1,選擇存儲文件位置-確定。進行三次,分別創(chuàng)建node1、node2、node3。設置node1內(nèi)存為4gb,node2和node3為2gb。
打開三臺虛擬機。
主機名設置:在node1下,切換管理員用戶,hostnamectl set-hostname node1,重啟終端。另外兩臺同樣配置。
修改ip地址:在node1下,vim /etc/sysconfig/network-scripts/ifcfg-ens33,BOOTPROTO='static',在最下面增加IPADDR="192.168.88.101",NETMASK="255.255.255.0",GATEWAY="192.168.88.2",DNS1="192.168.88.2"。wq保存。systemctl restart network。另外兩臺同樣配置,只是IPADDR分別為102、103。
配置主機映射:windows中,c/windows/system/drivers/etc/hosts,打開,增加并保存,保存的時候需要管理員權(quán)限,點擊是:
192.168.88.101 node1?
192.168.88.102?node2?
192.168.88.103?node3?
在linux中,使用finalshell遠程連接,root用戶。vim /etc/hosts,增加并保存:
192.168.88.101 node1?
192.168.88.102?node2?
192.168.88.103?node3?
配置ssh免密登錄:在每臺上執(zhí)行:ssh-keygen -t rsa -b 4096,一路回車到底。在每臺上執(zhí)行:ssh-copy-id node1,過程中輸入密碼。
ssh-copy-id node2
ssh-copy-id node3
完成后,在node1上執(zhí)行ssh node3,成功即可。
創(chuàng)建hadoop用戶:用來啟動大數(shù)據(jù)相關(guān)程序。每臺上執(zhí)行:useradd hadoop。passwd?hadoop,輸入密碼。su - hadoop,進行hadoop用戶,配置免密登錄,流程參上。
jdk環(huán)境部署:root下node1,mkdir -p /export/server。rz,選擇jdk壓縮包上傳。解壓:tar -zxvf 壓縮包名字 -C /export/server/ 。配置軟連接:ln -s /export/server/解壓后的名字 jdk。配置環(huán)境變量:vim etc/profile,export JAVA_HOME=/export/server/jdk,export PATH=$PAYH:$JAVA_HOME/bin,保存退出。生效環(huán)境變量:source /etc/profile。配置java執(zhí)行程序的軟連接:rm -f /usr/bin/java,ln -s /export/server/jdk/bin/java /usr/bin/java。驗證java -version,javac -version。server文件夾下分發(fā):scp -r 解壓后jdk的名字 node2:`pwd`/,scp -r 解壓后jdk的名字 node3:`pwd`/。在node2和node3,root下,配置軟連接,環(huán)境變量,驗證。
防火墻設置:root,每臺機器執(zhí)行:systemctl stop firewalld,systemctl disable firewalld,vim /etc/sysconfig/selinux,第七行SELINUX=disabled,保存退出。init 6 重啟。
時區(qū)和網(wǎng)絡同步:root,每臺機器執(zhí)行:可以先執(zhí)行date,看一下時間是否如當前所示。安裝ntp,yum install -y ntp,更新時區(qū):rm -f /etc/localtime,ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,再執(zhí)行date查看,最后應為CST。校準:ntpdate -u ntp.aliyun.com。啟動和自啟:systemctl start ntpd,systemctl enable ntpd
配置不易,快照保存!?。?/span>
2.2部署HDFS集群
node1,root,上傳hadoop壓縮包。解壓:tar -zxvf hadoop-3.3.4.tar.gz?-C /export/server/。進入server文件夾cd /export/server,構(gòu)建軟連接:ln -s /export/server/hadoop-3.3.4?hadoop。
修改配置文件:cd /export/server/hadoop/etc/hadoop。第一:vim workers,添加保存:
node1
node2
node3
第二:vim hadoop-env.sh,添加:
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
第三:vim core-site.sh,添加:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
第四:vim hdfs-site.xml,添加:
<configuration>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>node1,node2,node3</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
</configuration>
創(chuàng)建文件夾:mkdir -p /data/nn,mkdir /data/dn。node2和node3中:mkdir -p /data/dn
分發(fā):cd /export/server,scp -r hadoop-3.3.4 node2:`pwd`/,scp -r hadoop-3.3.4 node3:`pwd`/,
node2和node3中:ln -s /export/server/hadoop-3.3.4 hadoop
配置環(huán)境變量:node1,node2,node3:vim /etc/profile,添加:
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出,執(zhí)行source /etc/profile,重啟環(huán)境變量。
授權(quán)hadoop用戶:root,node1,node2,node3中:chown -R hadoop:hadoop /data,chown -R hadoop:hadoop /export 。
格式化:node1:su - hadoop,hadoop namenode -format
啟動驗證:每臺機器上hadoop用戶下,start-dfs.sh。輸入jps,出現(xiàn)角色。
配置不易,快照保存?。?!
2.3mapreduce配置和yarn部署
mapreduce:node1,hadoop。cd /export/server/hadoop/etc/hadoop,vim mapred-env.sh,
添加:
export JAVA_HOME=/export/server/jdk
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
vim mapred.site.xml,添加:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/data/mr-history/tmp</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/data/mr-history/done</value>
<description></description>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
</configuration>
yarn:node1,hadoop。cd /export/server/hadoop/etc/hadoop,vim yarn-env.sh,添加:
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
vim yarn-site.xml,添加:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
<description></description>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>node1:8089</value>
<description>proxy server hostname and port</description>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
<description></description>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<description></description>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/nm-local</value>
<description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data/nm-log</value>
<description>Comma-separated list of paths on the local filesystem where logs are written.</description>
</property>
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
<description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>Shuffle service that needs to be set for Map Reduce applications.</description>
</property>
</configuration>
分發(fā):scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:`pwd`/,scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3:`pwd`/
啟動:hadoop用戶下,start-yarn.sh,mapred --daemon start historyserver,jps。
配置不易,快照保存!??!
2.4部署hive集群
安裝mysql數(shù)據(jù)庫:node1上使用yum安裝mysql5.7。更新密鑰:rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022。安裝mysql:rpm -Uvh https://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm,yum -y install mysql-community-server。啟動mysql并設置開機自啟:systemctl start mysqld,systemctl enable mysqld。查看密碼:grep 'temporary password' /var/log/mysqld.log。登錄:mysql -uroot -p,輸入查找的密碼。設置簡單密碼:set global validate_password_policy=LOW;,set global validate_password_length=4;,ALTER USER 'root'@'localhost' IDENTIFIED BY '要設置的密碼';,設置遠程連接:grant all privileges on *.* to root@"%" identified by '設置的密碼' with grant option;,flush privileges;。
配置hadoop:node1,root用戶。cd /export/server/hadoop/etc/hadoop,vim core-site.xml,添加:
將hive壓縮包和mysql驅(qū)動包上傳linux,移動驅(qū)動包:mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/,解壓:tar zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/,軟連接:ln -s /export/server/apache-hive-3.1.3-bin /export/sever/hive。配置環(huán)境變量:cd /export/server/hive/conf,mv hive.env.sh.template hive.env.sh,vim hive.env.sh,添加:
export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib
vim hive-site.xml,添加:
初始化元數(shù)據(jù)庫:在mysql中新建數(shù)據(jù)庫,create database hive charset utf-8;。格式化:cd /export/server/hive,bin/schematool -initSchema -dbType mysql -verbos。
修改權(quán)限:chown hadoop:hadoop apache-hive-3.1.3-bin hive。進入hadoop用戶,mkdir /export/server/hive/logs
啟動元數(shù)據(jù)服務,后臺啟動:node1,hadoop用戶,cd /export/server/hive,nohup bin/hive --service?metastore >> logs/metastore.log 2>&1 &。
啟動客戶端:cd /export/server/hive,bin/hive,quit退出。啟動前打開hdfs集群和yarn集群。
dbeaver連接hive:node1,hadoop用戶,cd/export/server/hive,先啟動元數(shù)據(jù)服務,nohup bin/hive --service?metastore >> logs/metastore.log 2>&1 &。然后啟動hiveserver2,nohup bin/hive --service?hiveserver2?>> logs/hiveserver2.log 2>&1 &。開啟這兩個后,jps會出現(xiàn)兩個RunJar。打開dbeaver(自行下載),連接apache hive,填寫信息(node1,hadoop),在驅(qū)動配置中更改庫的配置,刪除原有的兩個,配置hive-jdbc-3.1.2-standalone.jar,測試連接,完成。該模式hive內(nèi)部表的計算是基于mapreduce。
配置不易,快照保存?。?!
2.5部署zookeeper
node1,root。下載:wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz。解壓:tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C/export/server。軟連接:ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper。修改配置文件:vim /export/server/zookeeper/conf/zoo.cfg,修改并添加:
tickTime=2000
dataDir=/export/server/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
創(chuàng)建文件夾:mkdir /export/server/zookeeper/data。創(chuàng)建文件:vim /export/server/zookeeper/data/myid,添加:1。
分發(fā):scp -r apache-zookeeper-3.5.9-bin node2:`pwd`/,scp -r apache-zookeeper-3.5.9-bin node3:`pwd`/。在node2和node3設置軟連接:ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper。將node2和node3中的myid文件內(nèi)容改為2和3。
修改權(quán)限:chown hadoop:hadoop apache-zookeeper-3.5.9 zookeeper。
啟動:每臺機器,hadoop用戶下,/export/server/zookeeper/bin/zkServer.sh start,jps,查看進程,出現(xiàn)QuorumPeerMain。/export/server/zookeeper/bin/zkServer.sh stop,關(guān)閉。
配置不易,快照保存!?。?/span>
2.6部署anaconda3
三臺機器上都執(zhí)行:
root用戶,上傳anaconda3壓縮包,解壓:sh anaconda3-2021.05-Linux-x86_64.sh,回車繼續(xù),出現(xiàn)more按空格,后面選擇yes,安裝路徑填寫:/export/server/anaconda3,。。。到完成。?關(guān)閉finalshell重新連接,在最開始出現(xiàn)(base)即為成功。(如果不想每次打開都帶base,想和之前一樣。做法為,root目錄下,vim .bashrc,最后添加:conda deactivate。重啟就行了)
設置國內(nèi)源:root目錄下,vim .condarc,添加:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
構(gòu)建pyspark環(huán)境:conda create -n pyspark python=3.8
conda activate pyspark,python,進入即為成功。
2.7部署spark local模式
在node1,root用戶。上傳spark壓縮包,解壓到/export/server/,并設置軟連接spark。
修改環(huán)境變量:vim /etc/profile,添加:
export SPARK_HOME=/export/server/spark
export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python3.8
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
vim .bashrc,添加:
export PATH=/export/server/anaconda3/bin:$PATH
export JAVA_HOME=/export/server/jdk
export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python3.8
測試:cd /export/server/spark/bin,執(zhí)行./pyspark,運行成功即可。
2.8部署stand?alone模式
這里要說明一件事情:該模式屬于spark集群,需要多臺服務器進行運算。但考慮到實際情況服務器不能滿足需求,便出現(xiàn)了一種新的spark運算模式,即spark on yarn。該模式在裝有hadoop集群(內(nèi)有yarn集群)下,不需要spark搭建集群環(huán)境,只需要一臺機器充當spark的客戶端,提交任務到y(tǒng)arn運行。所以stand alone可以不裝,直接安裝spark on yarn模式。
node2和node3中,root用戶。修改/etc/profile和.bashrc,內(nèi)容和2.7一致。
node1,root用戶。修改權(quán)限:chown -R hadoop:hadoop spark*,切換hadoop用戶。
開啟hdfs、yarn、歷史服務器。
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
cd /export/server/spark/conf/,mv workers.template workers,vim workers,添加:
node1
node2
node3
mv spark-env.sh.template spark-env.sh,vim spark-env.sh,添加:
#設置java安裝目錄
JAVA_HOME=/export/server/jdk
#hadoop文件配置目錄,讀取hdfs文件和運行yarn
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop/
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop/
#告知spark的master運行在那臺機器
export SPARK_MASTER_HOST=node1
#spark的master的通訊端口
export SPARK_MASTER_PORT=7077
#spark的master的webui端口
SPARK_MASTER_WEBUI_PORT=8080
#worker cpu可用內(nèi)核數(shù)
SPARK_WORKER_CORES=1
#worker可用內(nèi)存
SPARK_WORKER_MEMORY=1g
#worker工作的通訊地址
SPARK_WORKER_PORT=7078
#worker的webui端口
SPARK_WORKER_WEBUI_PORT=8081
#設置歷史服務器,將spark的運行日志保存在hdfs的/sparklog文件夾
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"
創(chuàng)建保存日志的文件夾:hadoop fs?-mkdir /sparklog,hadoop fs -chmod 777 /sparklog
mv spark-defaults.conf.template spark-defaults.conf,vim spark-defaults.conf,添加:
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node1:8020/sparklog/
spark.eventLog.compress true
mv log4j.properties.template log4j.properties,vim?log4j.properties,修改:
log4j.rootCategory=WARN,console
分發(fā):cd /export/server/,scp -r spark-3.2.0-bin-hadoop3.2 node2:`pwd`/,scp -r spark-3.2.0-bin-hadoop3.2 node2:`pwd`/。到node2和node3中,切換hadoop用戶,cd /export/server/,ln -s?spark-3.2.0-bin-hadoop3.2 spark。
運行測試:node1,hadoop用戶。cd /export/server/spark/,啟動歷史服務器:sbin/start-history-server.sh,jps出現(xiàn)Historyserver即為成功。啟動角色:sbin/start-all.sh,jps出現(xiàn)master和worker即為成功。在node2和node3,hadoop用戶下,jps出現(xiàn)worker。
webui測試:網(wǎng)頁輸入node1:8080,出現(xiàn)內(nèi)容。
2.9部署stand alone HA模式
node1,hadoop用戶,cd /export/server/spark/conf,vim spark-env.sh,進行以下修改:
#注釋或刪除下行
export SPARK_MASTER_HOST=node1
#在最后添加以下內(nèi)容
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
將該文件分發(fā):scp -r spark-env.sh node2:`pwd`/,scp-r spark-env.sh node3:`pwd`/。
使用過程:啟動hadoop,zookeeper,spark。在node2上啟動spark的master,sbin/start-master.sh。這樣就有兩個master,可以查看進程,node1:8080,node2:8082。
2.10部署spark on yarn模式
該模式部署簡單,只需要確保spark-env.sh文件中指明HADOOP_CONF_DIR和
YARN_CONF_DIR。
運行:cd /export/server/spark/bin/pyspark --master yarn,運行成功即可。運行此模式前需要打開hdfs、yarn、mphistoryserver、sparkhistoryserver。
2.11pyspark庫安裝和遠程連接
linux上,node1、node2、node3,root用戶。conda activate pyspark,pip install pyspark -i https://pypi.tuna.tsinghua.edu.cn/simple。驗證,python,import pyspark。
配置不易,快照保存?。?!
window配置pyspark庫:需要安裝jdk、hadoop(不是必須)、python(anaconda)。
jdk部分:這里使用的版本和linux上的一致。安裝過程省略,網(wǎng)上搜索即可。需要注意,環(huán)境變量中系統(tǒng)變量添加JAVA_HOME,path指向bin,要不后續(xù)運行pyspark庫報錯。
hadoop部分:將hadoop-3.3.0文件夾中bin文件夾的hadoop.dll復制到C:\windows\System32里面。在環(huán)境變量配置中,系統(tǒng)變量新建:HADOOP_HOME,指向hadoop3.3.0文件夾的位置,在path添加:%HADOOP_HOME%\bin,這里主要使用到文件夾內(nèi)的winutils文件。這個過程是打補丁,避免hadoop在window上運行有報錯。
{關(guān)于hadoop-3.3.0文件夾,需要安裝hadoop才會有,安裝那個版本就會有那個版本的文件夾。不過同3.x下的應該也可以。另外還有一種方法不需要安裝hadoop,即:找地方下載winutils文件(網(wǎng)上有,搜索即可),建立hadoop\bin文件夾目錄,將winutils放進去,配置環(huán)境變量:HADOOP_HOME,指向hadoop文件夾位置,path添加:%HADOOP_HOME%\bin。}
window上安裝python:這里使用anaconda3安裝,內(nèi)部配置的python3.8版本。流程省略,網(wǎng)上搜索即可。在自己的用戶名目錄下添加.condarc文本文件,內(nèi)容如下:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
主要為了使用conda安裝能快點。如果創(chuàng)建了這個文件速度還是不行,在終端輸入以下代碼創(chuàng)建也可以:
#一條一條輸入
conda config -add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config -add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config -add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
終端輸入conda create -n pyspark python=3.8,conda activate pyspark,pip install pyspark -i https://pypi.tuna.tsinghua.edu.cn/simple。驗證,python,import pyspark。
打開環(huán)境變量設置,在系統(tǒng)變量下添加PYSPARK_PYTHON,指向anaconda中pyspark環(huán)境中python.exe的位置。
關(guān)于python的開發(fā)環(huán)境,這里選擇vscode。打開vscode,配置python解釋器,一般自動就配上了,如果沒有,手動配置,選在pyspark環(huán)境下的python。創(chuàng)建文件就可以編寫代碼了,pyspark也可以使用了。輸入以下代碼驗證:
#這是個詞頻統(tǒng)計實例
from pyspark import SparkConf, SparkContext
if __name__ == '__main__':
conf = SparkConf().setMaster("local[*]").setAppName("WordCountHelloWorld")
sc = SparkContext(conf=conf)
#words.txt自己創(chuàng)建,路徑自選,里面寫了多個相同的單詞,以空格隔開。
filed_rdd = sc.textFile("d:/code/PYthon/data/words.txt")
words_rdd = filed_rdd.flatMap(lambda line: line.split(" "))
words_with_one_rdd = words_rdd.map(lambda x: (x, 1))
results_rdd = words_with_one_rdd.reduceByKey(lambda a, b: a+b)
print(results_rdd.collect())
對于遠程連接,還是vscode。打開node1,打開vscode,下載remote-ssh。完成后左邊出現(xiàn)小電腦的標志,點擊它,在SSH右邊有個+,點擊,頁面上方輸入用戶名@IP地址,例如:root@111.111.111.11(這里使用的root用戶,ip地址選擇node1的地址,具體可以登錄node1終端,ifconfig,ens33里面的就是IP地址)。端口號不用指定,使用默認22端口即可。輸入完成按enter鍵,選擇第一個.ssh\config。右下角彈出,選擇open config,主要看一下config內(nèi)容。關(guān)閉重新打開vscode,左邊點擊小電腦,出現(xiàn)遠程連接的電腦,點擊右邊的箭頭,頁面上方依次選擇linux、continue、輸入登錄密碼。左邊點擊小店腦,連接的電腦出現(xiàn)小對號,左下方出現(xiàn)IP地址即為成功。
2.12使用JDBC協(xié)議來接mysql
window上,將mysql的jar包(我使用的mysql8)放在ananconda3目錄下,envs\pyspark\Lib\site-packages\pyspark\jars。
linux上,將mysql的jar包(我使用的mysql8)放/export/server/ananconda3/envs/pyspark/lib/python3.8/site-packages/pyspark/jars。
這樣就可以在vscode上將數(shù)據(jù)寫到MySQL中,以及從MySQL中讀取數(shù)據(jù)。
2.1.3部署hive和spark集成
node1,hadoop用戶,cd /export/server/spark/conf,vim hive-site.xml,添加:
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description></description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
<description></description>
</property>
</configuration>
配置mysql驅(qū)動jar包:將mysql8的jar包上傳到/export/server/spark/jars下。、
啟動:如果運行yarn模式,先打開hdfs、yarn、mphistoryserver、matestore、sparkhistoryserver。
cd /export/server/spark,sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.port=1000 --hiveconf hive.server2.thrift.bind.host=node1 --master local[*] #可以選擇local或者yarn。打開dbeaver,連接apache spark,填寫相關(guān)信息(node1,hadoop),測試連接,完成。該模式hive內(nèi)部關(guān)于表的計算是基于sparkrdd的,這就配置了hive on spark模式。
對于spark on hive,就是在spark的代碼中,連接hive,并從hive中讀取數(shù)據(jù)進行建模分析。
后續(xù)pyspark相關(guān)配置的使用,如有心得,會繼續(xù)記錄。
上述是本人一步一步學習搭建并記錄得來,具有可行性。
如果感興趣,可以嘗試進行搭建。如有錯誤,請指出。文章來源:http://www.zghlxwxcb.cn/news/detail-814110.html
感謝您的關(guān)注。文章來源地址http://www.zghlxwxcb.cn/news/detail-814110.html
到了這里,關(guān)于hadoop集群搭建、spark集群搭建、pyspark搭建(linux+window)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!