显示标签为“spark”的博文。显示所有博文
显示标签为“spark”的博文。显示所有博文

2015年12月28日星期一

Spark 遇到中文乱码问题如何解决?

Spark 遇到中文乱码问题如何解决?

Spark 遇到中文乱码问题如何解决?

  • 问题原因:
    一般是spark平台机器环境编码设置问题

  • 解决方法:

    1. 在spark-default中为executor加上-Dfile.encoding=UTF-8
      spark/conf/spark-defaults.conf
1.spark.executor.extraJavaOptions -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=4 -XX:NewRatio=3 -XX:SurvivorRatio=3 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Dfile.encoding=UTF-8
  1. 在所有涉及到字节转换时,一定要指定编码方式
1.String -> Byte: 
2.string.getBytes("UTF-8")
3.
4.Byte -> String:
5.new String(bytes, "UTF-8")

2015年11月29日星期日

读取sequenceFile

http://hadooptutorial.info/reading-and-writing-sequencefile-example/
http://www.programcreek.com/java-api-examples/index.php?api=org.apache.hadoop.io.DataInputBuffer

2015年11月15日星期日

Spark Streaming DirectAPI

为了实现HA,spark Streaming App需要满足三个条件:
  • WAL: write ahead log
  • checkpoint
  • Reliable Receiver
 以上条件可以满足an-least-once语义,同时,WAL的性能消耗较大。对于已经做好数据持久化和安全性的上游系统而言,WAL略显多余(所有数据会被再持久化一次),只需要记录数据的metadata即可.出现Failures时,重新读取数据即可。
 Kafka的DirectAPI提供了一种方案:不使用Receiver,而是直接实现InputDStream,将Kafka中的数据读取为RDD,依靠Spark自身提供的RDD HA保证了输入端的exactly-once语义。同时,因为没有Receiver,所有的数据不会被WAL,性能也更好了。
 备注:DirectKafkaInputDStream读取Kafka中的数据为RDD,按照Kafka的Topic和Partition进行Partition。所有的数据即读即取,也就没有了Active Batches,不需要额外的RDD数据备份。

 KafkaDirectAPI实现要点:
DirectKafkaInputDStream-->{KafkaRDD(partitions) ...}-->Kafka Simple Consumer
依据RDD的容错机制,省去了WAL的性能消耗

 DirectKafkaInputDStream重新设计的CheckPoint需要保存的数据,即Kafka读取的offset。

 当然,对于其他类似的上游系统,也可以设计类似的DirectApi,前提条件是:能够提供和Kafka类似的offset机制,即消息有唯一的ID标识,且ID是顺序的,可以保证重复读取。