资料
Common errors and fixes with Spark 1.6 running with Python3 (Anaconda Version)
环境
namedtuple() missing 3 required keyword-only arguments: 'rename', 'defaults', and 'module'
Spark1.6不支持Python3.5以上的版本,因此计划配置虚拟环境。
虚拟环境配置
Python Environments for PySpark, Part 1: Using Condas
Miniconda安装
官网下载miniconda的安装包
上传至/tmp目录,并执行。
修改安装目录
安装完成后需要重启terminal或source
source /root/.bashrc虚拟环境管理
查看
# 查看已安装的python环境
# 当前环境会通过一个星号 (*) 标识
conda info -e
conda env list
新建
conda create --name env_name python=x.x
激活
conda activate env_name
删除
conda env remove -n env_name
conda remove -n env_name --all4月10日,只在主节点上配置了虚拟环境,其他两台机器并未配置。
5月20日,已经在子节点上配置了虚拟环境。
Spark配置
在虚拟环境中,已经可以运行spark。
修改默认Python路径
找到Spark_Install_Dir/conf/spark-env.sh
find / -name spark-env.sh
备份原config,猜测应该在类似/opt/cloudera/parcels/CDH/lib/spark/conf/spark-env.sh的目录下
cd /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/etc/spark/conf.dist/
cp spark-env.sh spark-env.sh.bak定位虚拟环境位置
find / -name ps_env
在系统环境中修改路径
vi /etc/profile
export PYSPARK_PYTHON=/opt/miniconda3/envs/ps_env/bin/python
export PYSPARK_DRIVER_PYTHON=/opt/miniconda3/envs/ps_env/bin/python激活
source /etc/profile子节点
通过rsync和脚本分发到子节点上。
xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=2; host<4; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@ljw$host:$pdir
d需要修改权限
chmod 777 xsync分发
xsync /opt/miniconda3
xsync /etc/profile子节点加载
source /etc/profile测试
/opt/cloudera/parcels/CDH/lib/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster "/opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/lib/spark/lib/spark-examples.jar"在master节点上运行
client wordcount1
上传文件
hdfs dfs -copyFromLocal "/tmp/input.txt" /user/spark/test/
pyspark "/tmp/WordCount.py"client wordcount2
#!/usr/bin/env python
#-*-conding:utf-8-*-
import logging
from operator import add
from pyspark import SparkContext
logging.basicConfig(format='%(message)s', level=logging.INFO)
#import local file
test_file_name = "file:///tmp/input.txt"
out_file_name = "file:///tmp/spark_test/"
sc = SparkContext("local","wordcount app")
# text_file rdd object
text_file = sc.textFile(test_file_name)
# counts
counts = text_file.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile(out_file_提交
spark-submit "/tmp/WordCount2.py"结果
集群 word count
考虑到集群模式并非关键部分,且其产生的日志文件不易查询,所以先不研究。
修改系统环境配置后测试
spark-submit "/tmp/WordCount2.py"
可行。
报错
Application report for application_ (state: ACCEPTED) never ends
杀掉一些yarn的进程
yarn application -list
yarn application -kill application_1586413310917_0012 杀掉一些spark进程
ps -aux | grep spark
kill -9