包含sparksql的完整使用案例,请务必耐心看完
大数据单机学习环境搭建(9)Spark单节点安装与pyspark使用
1.Spark安装
# 解压安装,我的位置都在/opt
tar -zxvf spark-3.2.1-bin-hadoop3.2.tgz
# 改名
mv spark-3.2.1-bin-hadoop3.2 spark
2.Spark配置
2.1配置环境变量
# 配置环境变量
vim /etc/profile
# 添加内容
export SPARK_HOME=/opt/spark
export PYSPARK_PYTHON=/opt/anaconda3/bin/python
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# 更新配置文件使其立即生效
source /etc/profile
# /root/.bashrc配置在JAVA_HOME和PYSPARK_PYTHON
export JAVA_HOME=/opt/jdk
export PYSPARK_PYTHON=/opt/anaconda3/bin/python
2.2spark客户端
下面所有内容都是Spark Local环境下运行,从Pyspark解释器启动和样例脚本构建SparkSession都可以看到
/opt/spark/bin/pyspark # 交互式的 Python解释器环境
/opt/spark/bin/spark-shell # scala解释器环境
/opt/spark/bin/spark-submit # 提交jar包或Python文件执行的工具
/opt/spark/bin/spark-sql # sparksql客户端工具
pyspark解释器运行示例,进入后可写python代码执行
3.Spark使用
没有废话要仔细看,完整可运行
3.1环境准备
Hadoop本地单节点安装
Hive安装和启用
Linux单节点Anaconda安装和Pycharm连接 中1和2的内容完成Anaconda的pyspark包安装
3.2脚本说明
- sparksql构建SparkSession需要用到HDFS和metastore服务,所以需要提前开启
- 数据准备
1)数据内容自行设置一个如下数据就行,文件命名问tmsapp_tms_app_instant_tag_visit_a_d202220520格式,后面日期换成当前日期,因为脚本中用的是
datetime.datetime.now().strftime('%Y%m%d')
作为文件补充名
2)把文件放在这个路径下/home/tmp_app_data/,没有路径就自建LH91417,青铜会员 LH15905,原木会员 LH29615,原木会员 LH88779,黄金会员
mkdir /home/tmp_app_data
,或者自己改动脚本中load路径
3)脚本文件放在自己记得住的位置,位置名字随便起,例如我的是 /tmp/pycharm_project_652/LHbank/01pyspark_sql_visit_mid.py - 脚本内容,包含删表、建表、删除分区、建立分区、插入数据、查询数据,共6步sql操作。
# -*- coding:utf-8 -*-
"""
删表、建表、删除分区、建立分区、插入数据、查询数据
"""
from pyspark.sql import SparkSession
import datetime
spark = SparkSession.builder \
.appName('learn') \
.master("local[*]") \
.config("spark.sql.shuffle.partitions", 1) \
.config("spark.sql.warehouse.dir", "hdfs://自己的ip:8020/user/hive/warehouse") \
.config("hive.metastore.uris", "thrift://自己的ip:9083") \
.enableHiveSupport() \
.getOrCreate()
# 删表
sql_drop_table = """drop table if exists tms_app.tmsapp_tms_app_instant_tag_visit_a_d;"""
spark.sql(sql_drop_table)
# 建表
sql_create_table = """
create table tms_app.tmsapp_tms_app_instant_tag_visit_a_d(
cust_id string comment '客户号',
vip_name string comment '会员名称'
)
partitioned by (dt string)
row format delimited fields terminated by ','
;
"""
spark.sql(sql_create_table)
# 分区格式yyyy-MM-dd,当前日期yyyyMMdd格式
cur_dt = datetime.datetime.now().strftime('%Y-%m-%d')
cur_dt_simple = datetime.datetime.now().strftime('%Y%m%d')
# 删除分区
sql_drop_partition = """alter table tms_app.tmsapp_tms_app_instant_tag_visit_a_d drop if exists partition (dt='{}');""".format(
cur_dt)
spark.sql(sql_drop_partition)
# 增加分区
sql_add_partition = """alter table tms_app.tmsapp_tms_app_instant_tag_visit_a_d add partition (dt='{}');""".format(
cur_dt)
spark.sql(sql_add_partition)
# load数据
sql_load_data = """load data local inpath '/home/tmp_app_data/tmsapp_tms_app_instant_tag_visit_a_d{}.txt' overwrite into table tms_app.tmsapp_tms_app_instant_tag_visit_a_d partition (dt='{}');""".format(
cur_dt_simple, cur_dt)
spark.sql(sql_load_data)
# 查询
sql = """select * from tms_app.tmsapp_tms_app_instant_tag_visit_a_d where dt='{}' limit 5;""".format(cur_dt)
spark.sql(sql).show()
print('OK')
spark.stop()
3.3服务开启
- 开启hadoop和hive metastore服务
结果如图/opt/hadoop/sbin/start-all.sh nohup /opt/hive/bin/hive --service metastore & netstat -anp| grep 9083 jps
- 关闭防火墙打开
systemctl stop firewalld
Namenode网页http://自己的ip:9870
3.4脚本执行
-
先用hive创建一个名为
tms_app
的数据库,名称无所谓,我的示例样本写的这个,所以就创建了这个。hive -e 'create database tms_app;'
-
调用脚本执行
spark-submit /tmp/pycharm_project_652/LHbank/01pyspark_sql_visit_mid.py
-
HDFS查看数据文件
至此,spark已可以正常运行,pyspark.sql的案例也介绍完毕了。欢迎接着看 Pycharm中操作spark和hive
声明:本文所载信息不保证准确性和完整性。文中所述内容和意见仅供参考,不构成实际商业建议,如有雷同纯属巧合。