分享

about云日志分析项目准备6-4:spark集群安装及配置项说明

pig2 发表于 2017-1-16 18:33:28 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 1756
本帖最后由 pig2 于 2017-1-25 19:10 编辑

此文是对下文中spark集群安装的一个说明文档
about云日志分析项目准备6:Hadoop、Spark集群搭建

上篇about云日志分析项目准备6-3:Hadoop2.x集群安装及配置项说明
http://www.aboutyun.com/forum.php?mod=viewthread&tid=20775




spark进程:
master
worker
集群的环境变量
conf/spark-env.sh常用配置如下
SPARK_MASTER_IP        
绑定一个外部IP给master.

HADOOP_CONF_DIR
hadoop配置文件目录

SPARK_LOCAL_DIRS=/data/spark_data
shuffled以及RDD的数据存放目录

SPARK_WORKER_DIR=/data/spark_data/spark_works
worker端进程的工作目录



spark配置文件常用配置项说明:

spark.master 值为spark://master:7077主节点默认使用7077端口对外提供服务。


注:SPARK_MASTER_IP这里填写spark master的IP或者主机名,如果使用的是ip,在指定master调用服务时就只能使用ip,类似spark://192.168.1.39:7077.如果使用的是主机名,那就只能使用主机名了。类似这样spark://主机名:7077.推荐使用主机名,因为就算ip变了也不用老改配置文件。
SPARK_MASTER_IP在spark-env.sh文件中配置。

spark.serializer  值为 org.apache.spark.serializer.KryoSerializer
这里配置spark序列化,Kryo序列化可以大大提高性能
更多相关内容:
序列化对于提高分布式程序的性能起到非常重要的作用。一个不好的序列化方式(如序列化模式的速度非常慢或者序列化结果非常大)会极大降低计算速度。很多情况下,这是你优化Spark应用的第一选择。Spark试图在方便和性能之间获取一个平衡。Spark提供了两个序列化类库:

Java 序列化:在默认情况下,Spark采用Java的ObjectOutputStream序列化一个对象。该方式适用于所有实现了java.io.Serializable的类。通过继承 java.io.Externalizable,你能进一步控制序列化的性能。Java序列化非常灵活,但是速度较慢,在某些情况下序列化的结果也比较大。
Kryo序列化:Spark也能使用Kryo(版本2)序列化对象。Kryo不但速度极快,而且产生的结果更为紧凑(通常能提高10倍)。Kryo的缺点是不支持所有类型,为了更好的性能,你需要提前注册程序中所使用的类(class)。
你可以在创建SparkContext之前,通过调用System.setProperty("spark.serializer", "spark.KryoSerializer"),将序列化方式切换成Kryo。Kryo不能成为默认方式的唯一原因是需要用户进行注册;但是,对于任何“网络密集型”(network-intensive)的应用,我们都建议采用该方式。

最后,为了将类注册到Kryo,你需要继承 spark.KryoRegistrator并且设置系统属性spark.kryo.registrator指向该类,如下所示:
  1. import com.esotericsoftware.kryo.Kryo

  2. class MyRegistrator extends spark.KryoRegistrator {

  3.   override def registerClasses(kryo: Kryo) {

  4.     kryo.register(classOf[MyClass1])

  5.     kryo.register(classOf[MyClass2])

  6.   }

  7. }


  8. // Make sure to set these properties *before* creating a SparkContext!

  9. System.setProperty("spark.serializer", "spark.KryoSerializer")

  10. System.setProperty("spark.kryo.registrator", "mypackage.MyRegistrator")

  11. val sc = new SparkContext(...)
复制代码
Kryo 文档描述了很多便于注册的高级选项,例如添加用户自定义的序列化代码。
如果对象非常大,你还需要增加属性spark.kryoserializer.buffer.mb的值。该属性的默认值是32,但是该属性需要足够大以便能够容纳需要序列化的最大对象。
最后,如果你不注册你的类,Kryo仍然可以工作,但是需要为了每一个对象保存其对应的全类名(full class name),这是非常浪费的。
摘自http://spark.incubator.apache.org/docs/latest/tuning.html

spark.eventLog.enabled 值为 true
是否记录 Spark事件,用于应用程序在完成后 重构 webUI。

spark.eventLog.dir 值为file:///data/spark_data/history/event-log
如果spark.eventLog.enabled为 true,该属性为记录spark事件的根目录。在此根目录中,Spark为每个应用程序创建分目录,并将应用程序的事件记录到在此目录中。用户可以将此属性设置为HDFS目录,以便history server读取历史记录文件。

spark.history.fs.logDirectory值为 file:///data/spark_data/history/spark-events
存放历史记录文件的目录。可以是Hadoop APIs支持的任意文件系统。



spark.eventLog.compress 值为  true
否压缩记录Spark事件,前提spark.eventLog.enabled为true,默认使用的是snappy。

更多属性
Spark1.0.0 属性配置










没找到任何评论,期待你打破沉寂

关闭

推荐上一条 /2 下一条