jupyter notebook的优点是交互性,但因为是.ipynb文件,不能重复使用
可以使用集成开发工具(如pycharm、eclipse)来创建项目,以便重复使用
hdfs命令:
开启hadoop集群:start-all.sh
hdfs创建test目录:hadoop fs -mkdir -p /test
测试文件上传到hdfs的test目录:
hadoop fs -copyFromLocal /root/PycharmProjects/test/data.txt /test/
列出test目录的文件:hadoop fs -ls /test
查看data.txt文件:hadoop fs -cat /test/data.txt
代码:
# -*- coding:utf-8 -*-
from pyspark import SparkContext # 导入SparkContext
from pyspark import SparkConf # 导入SparkConf
# SparkContext是开发spark应用的入口,jupyter可以直接使用,这里要自行创建
# 此函数的目的是得到sc(SparkContext),如我们常用的sc.master
def CreateSparkContext():
# setAppname为设置app名,此名称会显示在spark、yarn的web页面
sparkConf = SparkConf().setAppName("WordCounts").set("spark.ui.showConsoleProgess","false")
sc = SparkContext(conf = sparkConf)
print("master="+sc.master) # 显示当前的运行模式
SetLogger(sc) # 设置不显示过多信息,函数在下面
SetPath(sc) # 设置文件读取路径,函数在下面
return (sc)
def SetLogger(sc): # 去除spark默认显示的杂乱信息
logger = sc._jvm.org.apache.log4j
logger.LogManager.getLogger("org").setLevel(logger.Level.ERROR)
logger.LogManager.getLogger("akka").setLevel(logger.Level.ERROR)
logger.LogManager.getRootLogger().setLevel(logger.Level.ERROR)
def SetPath(sc): # 配置读取文件的路径(本地文件和hdfs文件)
global Path
if sc.master[0:5] == "local": # local模式读取本地文件
Path = "file:/root/PycharmProjects/test/"
else: # 其他模式(yarn等)读取hdfs文件
Path = "hdfs://hadoop01:9000/test/"
# 主程序
if __name__ == "__main__":
print("开始执行 wordcount")
sc = CreateSparkContext()
print("开始读取文本文件...")
textFile = sc.textFile(Path + "data.txt")
print("文本共有"+str(textFile.count())+"行")
# map-reduce 运算
countsRDD = textFile.flatMap(lambda line:line.split(' '))\
.map(lambda x:(x, 1))\
.reduceByKey(lambda x,y:x+y)
print("文本统计共有"+str(countsRDD.count())+"项数据")
# 保存结果到文件
print("开始保存到文本文件...")
try:
countsRDD.saveAsTextFile(Path + "output")
except Exception as e:
print("输出目录已存在,请先删除原有目录")
sc.stop()
本地模式:
pycharm直接run:默认是local
yarn模式:
可以通过添加外部工具来实现在yarn上运行
使用 spark-sbmit,详见第9节 spark-sbmit
点击菜单栏“File”–>”Settings”–>”Tools”–>”External Tools”–>”+”
填:
Name:spark-sbmit (其实是自定义的)
Program:spark-sbmit所在的目录,在spark的bin目录下
Arguments:填入相关参数,例如--master yarn-client wordcount.py
注意不要直接输入wordcount.py,点insert,选择filename
否则我们换个文件(如test.py)运行,还要手动改成test.py
Working directory:wordcount.py所在目录,同样不直接输入,点insert
选择filedir
运行:
菜单栏”Tools”–>”External Tools”,点击运行”spark submit”