启动spark | 注:必须先启动Hadoop,但只启动hdfs即可,不用start-all,使用start-dfs.sh即可 检查 jps 在Master节点上出现了NameNode、ResourceManager、SecondaryNameNode; 在主节点启动: cd /usr/data2/program/spark/spark/sbin/ ./start-all.sh 检查 jps 在Master节点上出现了Master; 在工作节点出现了Worker |
启动pyspark | 注:必须先启动spark 在主节点机执行即可 在 ./spark/bin目录下,启动pyspark 或者直接执行pyspark (因为配置了环境变量) 进入python模式下的spark 报错: pyspark依赖python环境,ubuntu自带的python是2.7 要先安装python3,可参考python文章,安装miniconda |
创建pyspark的独立python环境 所有节点机都要配置 | 使用conda就很好创建 克隆一个spark独立python环境 (base) root@pc2-node2:~# conda info -e # conda environments: # base * /usr/data2/program/conda/miniconda3 spark /usr/data2/program/conda/miniconda3/envs/spark 克隆完毕后, /usr/data2/program/conda/miniconda3/envs/spark/bin/python 这个就是spark专用的环境的python路径 |
配置spark的python环境 所有节点机都要配置 | cd /usr/data2/program/spark/spark/conf/ vi spark-env.sh 增加 export PYSPARK_PYTHON=/usr/data2/program/conda/miniconda3/envs/spark/bin/python |
重启spark、 重新进入pyspark | 主节点机执行 ./stop-all.sh ./start-all.sh 然后执行pyspark进入 这样就是成功进入pyspark了 |
sc说明 UI服务说明 | 直接进入pyspark,看到sc是local本地模式。这种模式没有启用集群。 适合本地调试,验证。速度快。 同时,可以看到,作业开启了一个UI服务,端口是4040 访问 再启动一个pyspark,发现会使用4041端口来开启这个pyspark的UI服务 |
例子:
spark字符串统计
样例数据 | Apache Spark is a fast and general-purpose cluster computing system. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. Apache Spark provides programmers with an application programming interface centered on a data structure called the resilient distributed dataset (RDD), a read-only multiset of data items distributed over a cluster of machines, that is maintained in a fault-tolerant way. |
查看数据 | 在/usr/data2/program/spark/testData 创建这个文件: sparkWordCount.txt 里面的内容是样例数据,作为数据准备 |
获取spark上下文 | 在pyspark启动后,会自动增加一个变量叫sc,这个变量就是spark上下文,可以直接使用 这个上下文可以用来操作spark环境的资源,是pyspark封装好了。 |
执行spark任务 本地文件 | 这里任务,是进行单词数量统计 sc.textFile('file:///usr/data2/program/spark/testData/sparkWordCount.txt') \ .flatMap(lambda line: line.split(" ")) \ .map(lambda x: (x, 1)) \ .reduceByKey(lambda a, b: a + b).collect()
上述命令也可以拆分为执行 textFile = sc.textFile('file:///usr/data2/program/spark/testData/sparkWordCount.txt') mapReduce = textFile \ .flatMap(lambda line: line.split(" ")) \ .map(lambda x: (x, 1)) \ .reduceByKey(lambda a, b: a + b) 上面的命令,并不会执行,而是做准备,有点类似TensorFlow的处理流程 mapReduce.collect() 这句话是真正执行spark运算的命令 执行后,可以在pyspark的UI里,看到历史job |
执行spark任务 HDFS文件 | 在linux里 先把文件上传到HDFS hadoop fs -mkdir -p /spark/testData hadoop fs -put /usr/data2/program/spark/testData/sparkWordCount.txt /spark/testData/sparkWordCount.txt 查看文件 文件上传OK, 然后执行sc的map、reduce任务 在pyspark里: sc.textFile('hdfs://192.168.0.11:9000/spark/testData/sparkWordCount.txt') \ .flatMap(lambda line: line.split(" ")) \ .map(lambda x: (x, 1)) \ .reduceByKey(lambda a, b: a + b).collect() 注:需要指定hdfs集群的其中一个节点地址,因为没有进行默认路径配置。 还可以使用RDD进行路径的配置 |