博主已經安裝好了三臺CentOS機器,且做好了靜態IP,也搭建好了Hadoop集羣及jdk環境,以此爲背景。
如果對以上不懂的,請查看博主之前的博客。
Spark集羣安裝
1. 創建目錄,下載安裝包
博主的hadoop,jdk環境都是安裝在/opt/目錄下
1. 創建spark目錄
mkdir spark
2. 下載spark安裝包到spark目錄下
spark下載地址:
http://spark.apache.org/downloads.html
解壓安裝包
tar -xvf spark-2.4.0-bin-hadoop2.7.tgz spark2.4
2. 配置Spark
1. 配置spark-env.sh文件
# 進入conf目錄
cd /opt/spark/spark2.4/conf
# 重命名並修改spark-env.sh.template文件
mv spark-env.sh.template spark-env.sh
vi spark-env.sh
# 在配置文件末尾添加以下內容:
export JAVA_HOME=/opt/java/jdk1.8
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
退出,保存
2. 配置slaves文件
在conf目錄下
重命名並修改slaves.template文件
mv slaves.template slaves
vi slaves
# 在該文件中添加子節點
slave1
slave2
退出,保存
3. 拷貝配置好的Spark到其他節點上
scp -r spark2.4 slave1:/opt/spark/
scp -r spark2.4 slave2:/opt/spark/
目前是一個master,兩個worker
4. 啓動spark
在master機器上
cd /opt/spark/spark2.4/sbin
./start-all.sh
在master的瀏覽器輸入
http://master:8080
會看到兩個alive的worker
5. 啓動spark shell
在spark2.4/bin目錄下
spark-shell -- master spark://master:7077 --executor-memory 2g --total-executor-core 2
參數說明:
–master spark://master:7077 # 指定master地址
–executor-memory 2g # 指定每個worker可用內存爲2G
–total-executor-cores 2 # 指定整個集羣使用的cup核數爲2個
如果啓動spark shell時沒有指定master地址,也可以正常啓動spark shell和執行shell中的程序,但是是啓動了spark的local模式,該模式僅在本機啓動一個進程,沒有與集羣建立聯繫。
Spark Shell中已經默認將SparkContext類初始化爲對象sc。用戶代碼如果需要用到,則直接應用sc即可。
6. 在spart shell中編寫wordcount程序
1. 編寫一個word.txt
touch word.txt
echo "hello hadoop" >> word.txt
echo "hello spark" >> word.txt
echo "hello java" >> word.txt
echo "hello python" >> word.txt
echo "hello world" >> word.txt
2. 上傳到hdfs
# 先新建一個hdfs目錄
hdfs dfs -mkdir -p /work/data1/input
# 上傳
hdfs dfs -get word.txt /work/data1/input/word.txt
3. 使用scala編程
sc.textFile("hdfs://master:9000/work/data1/word.txt").flatMap(_." ").map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://master:9000/work/data1/output")
說明:
sc是SparkContext # 對象,該對象是提交spark程序的入口
textFile(hdfs://master:9000/work/data1/word.txt) # hdfs中讀取數據
flatMap(.split(" ")) # 按照空格分割,扁平化
map((,1)) # 將單詞和1組成元祖
reduceByKey(+) # 按照key進行reduce,並將value累加
savaAsTextFile(“hdfs://master:9000/work/data1/output”) # 將結果寫入到hdfs中
4. 查看結果
[root@master Documents]# hdfs dfs -ls /work/data1/output
Found 2 items
-rw-r--r-- 3 root supergroup 0 2019-03-02 17:50 /work/data1/output/_SUCCESS
-rw-r--r-- 3 root supergroup 61 2019-03-02 17:50 /work/data1/output/part-00000
[root@master Documents]# hdfs dfs -text /work/data1/output/p*
(spark,1)
(hadoop,1)
(python,1)
(hello,5)
(hdfs,1)
(world,1)