平台搭建---spark生态版本问题

python版本问题

1、

Exception: Randomness of hash of string should be disabled via PYTHONHASHSEED

网上的解释

Since Python 3.2.3+ hash of str, byte and datetime objects in Python is salted using random value to prevent certain kinds of denial-of-service attacks. It means that hash values are consistent inside single interpreter session but differ from session to session. PYTHONHASHSEED sets RNG seed to provide a consistent value between session.

You can easily check this in your shell. If PYTHONHASHSEED is not set you'll get some random values:

大致意思是python3以上版本中,出于安全的考虑,在做hash映射的时候,对于字符串、字节和时间对象,即使是同一个值,不同时候映射值也不一样。这就会造成不同时候不同机器的映射关系不固定。解析就会出现问题。
解决方法:在不同机器上通过设置PYTHONHASHSEED将映射关系固定下来。

#PYTHONHASHSEED的具体值自己随机选取,下面的方法还没验证
# Set PYTHONHASHSEED locally
echo "export PYTHONHASHSEED=0" >> /root/.bashrc
source /root/.bashrc

# Set PYTHONHASHSEED on all slaves
pssh -h /root/spark-ec2/slaves 'echo "export PYTHONHASHSEED=0" >> /root/.bashrc'

# Restart all slaves
sh /root/spark/sbin/stop-slaves.sh
sh /root/spark/sbin/start-slaves.sh

同时还需要配置 Spark ./conf文件夹下spark-defaults.conf,将spark.executorEnv.PYTHONHASHSEED 0#具体值可以自己设置加入到上面的配置文件中。

2、

AttributeError: 'NoneType' object has no attribute '_jvm'

原因可能是对象为空
3、
pyspark采用python3开发

python版本3.5支持pyspark
python3.6目前还不支持
做法简单,只需要在bin/pyspark中增加

export PYSPARK_PYTHON=python3

再次打开bin/pyspark即配置完成pyspark采用python3.
如果想使用ipython,则增加下面两行到bin/pyspark中

export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON=ipython

kafka结合spark 错误整理

1、
Error:scalac: bad symbolicreference. A signature in KafkaUtils.class refers to term serializerin package kafka which isnot available.It may be completely missing fromthe current classpath, ortheversiononthe classpath might be incompatible withtheversion used when compiling KafkaUtils.class.
解决方法(未经验证):
缺少包kafka_2.10-0.8.2.0-kafka-1.4.0.jar

2、
java.lang.ClassNotFoundException: org.apache.spark.streaming.kafka.KafkaRDDPartition
解决方法(未经验证):
spark-submit –class sparkstreaming.KafkaStreaming –master spark://bihdp01:7077 –executor-memory 1G –total-executor-cores 1 (未指定前两个) /data/peng/spark.jar
3、

Spark Streaming's Kafka libraries not found in class path. Try one of the following.
Include the Kafka library and its dependencies with in the spark-submit command as

$ bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8:2.0.0 ...

Download the JAR of the artifact from Maven Central http://search.maven.org/, Group Id = org.apache.spark, Artifact Id = spark-streaming-kafka-0-8-assembly, Version = 2.0.0. Then, include the jar in the spark-submit command as
$ bin/spark-submit --jars ...

解决方法:
加入spark-streaming-kafka-assembly_*.jar ,同时要上传spark-streaming-kafka-assembly_2.10-1.5.2.jar到spark的根目录下,就是与bin目录同级的那一个,提交应用的程序如下:

spark-submit --jars spark-streaming-kafka-assembly_2.10-1.5.2.jar ./spark-kafka.py 

4、

assert value is None or isinstance(value, bytes), 'value must be bytes'

解决方法:
先对内容进行类型转换

a = bytes(str0, 'utf-8')

5、

TypeError: 'JavaPackage' object is not callable

解决方法:
spark-submit 提交的时候将spark/lib下的datanucleus-core-3.2.10.jar、datanucleus-api-jdo-3.2.6.jar、datanucleus-rdbms-3.2.9.jar 添加到–jars 后面。
还没有验证,但觉得这种解决方法不好,应该是当初配置集群的时候没做好,spark原本都有这个包为什么还要上传?
Make sure you only set the executor and/or driver classpaths in one place and that there’s no system-wide default applied somewhere such as .bashrc or Spark’s conf/spark-env.sh.
解决方法:(该方法可行)
原因:
是由于spark环境和开发环境不一致导致的
由于spark环境是spark2.0,但是安装的pyspark的python包是2.2
版本不一致
解决办法:
卸载pyspark2.2 的包和py4j。
解压spark-2.0.0\python\lib目录下的py4j和pyspark jar包。
将解压后的py4j和pyspark复制到python的环境Lib/site-packages下。
OK
解决方法:(测试发现不行)
spark的deploy-mode一般有两种模式,一个是cluster 模式,一个是client模式
其中client模式需要设置:
PYSPARK_PYTHON=/path/to/python2.7 (可在环境变量中设置,可以在spark-env.sh中设置)
cluster模式需要设置:
spark.yarn.appMasterEnv.PYSPARK_PYTHON=/path/to/python2.7
spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=/path/to/python2.7 (可在运行中临时指定,也可在spark-default.sh中设置)
6、

ImportError: cannot import name SparkSession

解决方法:
这可能是spark版本问题,1.6.1版本没有SparkSession.可以使用SQLContext。
7、

py4j.protocol.Py4JJavaError: An error occurred while calling o24.json.
: java.io.IOException: No input paths specified in job

问题是找不到应用中的输入路径
解决方法:
如果是在yarn模式下提交应用,而应用中的输入文件路径却是本地的话,会报这样的错。因为此时只有master上有该文件,而其他节点没有该文件,其他节点找不到无法工作,自然报错。

8、
问题:
java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;
原因:
其实这个错误就是编译的程序的scala版本和提交时的版本不一致导致的.
For the Scala API, Spark 1.6.3 uses Scala 2.10. You will need to use a compatible Scala version (2.10.x).
spark1.6.3(当前版本)还不支持2.11.x , 其中很多的插件还不兼容
spark就默认是用了 bin/下自带的scala版本
解决方法(已验证):
通过外部将相应包提交上去。即在spark-submit时加入参数--jars spark-streaming-kafka-assembly_2.10-1.6.3.jar。由于只写了相对路径,因而在submit时要先进入spark-streaming-kafka-assembly_2.10-1.6.3.jar所在的目录,否则会上传不了这个包。

spark 版本

1、
spark 2.1版本较spark 1.6版本性能有更多的提升。
spark1.6.3对应的配置:Spark runs on Java 7+, Python 2.6+ and R 3.1+. For the Scala API, Spark 1.6.3 uses Scala 2.10. You will need to use a compatible Scala version (2.10.x).

Note: Starting version 2.0, Spark is built with Scala 2.11 by default. Scala 2.10 users should download the Spark source package and build with Scala 2.10 support.

spark从1.6.3版本升级到2.2.1版本
2、
python接口中的spark sql接口变化接口变化较大,由之前的HiveContext变成SparkSession,用法大致如下:

from pyspark import SparkContext
from pyspark.sql import SparkSession

sc=SparkContext(appName="outlierDetector")
spark=SparkSession.builder.enableHiveSupport().getOrstart()
spark.sql('sql表达式')

3、
spark streaming连接kafka的变化
之前在用spark-submit提交python应用时,只需要将依赖spark-streaming-kafka_2.10-1.6.3.jar一同提交,对应的由from pyspark.streaming.kafka import KafkaUtils创建的相关应用便可运行,
变换到spark2.2.1版本后,可以用kafka_2.11-1.6.3.jar一起提交,但可能由于依赖兼容等问题,这样运行会找不到类;此时需要将kafka_2.11-1.6.3.jar的依赖也一起提交,有以下的一些依赖:

zkclient-0.3.jar,unused-1.0.0.jar,spark-streaming-kafka_2.11-1.6.3.jar,snappy-java-1.1.2.6.jar,slf4j-api-1.7.16.jar,scala-xml_2.11-1.0.2.jar,scala-parser-combinators_2.11-1.0.2.jar,metrics-core-2.2.0.jar,lz4-1.3.0.jar,log4j-1.2.17.jar,kafka_2.11-0.8.2.1.jar,kafka-clients-0.8.2.1.jar 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源真实可靠,代码都经测试过,能跑通。 快速:Apache Spark以内存计算为核心。 通用 :一站式解决各个问题,ADHOC SQL查询,流计算,数据挖掘,图计算完整的生态圈。只要掌握Spark,就能够为大多数的企业的大数据应用场景提供明显的加速。存储层:HDFS作为底层存储,Hive作为数据仓库 (Hive Metastore:Hive管理数据的schema) 离线数据处理:SparkSQL (做数据查询引擎<===> 数据ETL) 实时数据处理:Kafka + Spark Streaming 数据应用层:MLlib 产生一个模型 als算法 数据展示和对接:Zeppelin 选用考量: HDFS不管是在存储的性能,稳定性 吞吐量 都是在主流文件系统中很占有优势的 如果感觉HDFS存储还是比较慢,可以采用SSD硬盘等方案。存储模块:搭建和配置HDFS分布式存储系统,并Hbase和MySQL作为备用方案。 ETL模块:加载原始数据,清洗,加工,为模型训练模块 和 推荐模块 准备所需的各种数据。 模型训练模块:负责产生模型,以及寻找最佳的模型。 推荐模块:包含离线推荐和实时推荐,离线推荐负责把推荐结果存储到存储系统中实时推荐负责产生实时的消息队列,并且消费实时消息产生推荐结果,最后存储在存储模块中。 数据展示模块:负责展示项目中所用的数据。 数据流向:数据仓库怎么理解?两种东西,其一是IBM微软数据产品为代表的,其二是Hadoop+Hive+Apache Hive数据仓库软件有助于使用SQL读取,写入和管理驻留在分布式存储中的大型数据集。 可以将结构投影到已经存储的数据上。 提供了命令行工具和JDBC驱动程序以将用户连接到Hive。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值