博主已经安装好了三台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)