├── .gitattributes ├── README.md ├── language-setting.scala └── update.log /.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | *.md linguist-language=scala 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # :tada:v1.6.0-0.10 2 | --------------------- 3 | > - 解决了批次计算延迟后出现的任务append导致整体恢复后 计算消费还是跟不上的问题 4 | > - 支持动态调节 streaming 的 批次间隔时间 (不同于sparkstreaming 的 定长的批次间隔,StructuredStreaming中使用trigger实现了。)
5 | > - 支持在streaming过程中 重设 topics,用于生产中动态地增加删减数据源
6 | > - 添加了速率控制,KafkaRateController。用来控制读取速率,由于不是用的sparkstreaming,所有速率控制的一些参数拿不到,得自己去计算。 7 | > - 提供spark-streaming-kafka-0-10_2.10 spark 1.6 来支持 kafka的ssl
8 | > - 支持rdd.updateOffset 来管理偏移量。
9 | --------------------- 10 | # :tada: v1.6.0-0.10_ssl 11 | --------------------- 12 | > - 只是结合了 sparkstreaming 1.6 和 kafka 010 。 使低版本的spark能够使用kafka的ssl验证
13 | > - 支持 SSL 14 | > - 支持spark 1.6 和 kafka 0.10 的结合 15 | > - 支持管理offset 16 | -------------------- 17 | # :tada:v2.0.1-0.10 18 | ------------------- 19 | > - 解决了批次计算延迟后出现的任务append导致整体恢复后 计算消费还是跟不上的问题 20 | > - 支持动态调节 streaming 的 批次间隔时间 (不同于sparkstreaming 的 定长的批次间隔,StructuredStreaming中使用trigger实现了。)
21 | > - 支持在streaming过程中 重设 topics,用于生产中动态地增加删减数据源
22 | > - 提供spark-streaming-kafka-0-10_2.10 spark 1.6 来支持 kafka的ssl
23 | > - 支持rdd.updateOffset 来管理偏移量。
24 | > - 由于kakfa-010 的api的变化,之前的 kafka-08 版本的 spark-kafka 虽然能用,但是他依赖于spark-streaming-kafka-0-8_2.10
.(可能会导致一些版本问题);所以这次重新写了一个 kafka010 & spark-2.x 版本 ;但是使用方法还是跟之前的差不多,
25 | > - kafka010有两种来管理offset的方式,一种是旧版的用zookeeper来管理,一种是本身自带的。现只提供zookeeper的管理方式 26 | > - 要确保编译的kafka-client的版本和服务器端的版本一致,否则会报 Error reading string of length 27489, only 475 bytes available 等错误
27 | > - 添加了速率控制,KafkaRateController。用来控制读取速率,由于不是用的sparkstreaming,所有速率控制的一些参数拿不到,得自己去计算。
28 | ------------------- 29 | 30 | # :tada:Spark-Util_1.6 31 | 32 | ## POINT 33 | 34 | > - spark与其他组件的封装api
35 | > - 支持动态调节 streaming 的 批次间隔时间 (不同于sparkstreaming 的 定长的批次间隔,在Structed Streaming中使用trigger触发机制实现);不使用streamingContext 来实现流式计算,因为streamingContext是严格的时间间隔执行job任务,当job时间远小于batchtime时,会有大量的时间是在sleep等待下一个批次执行的到来(具体可以看看streamingContext的源码);StreamingDynamicContext 的设计借鉴了streamingContext的设计。但是在Job的提交上不使用Queue队列来appending堆积的job。当job执行完后,用户可以自己选择是否立刻执行下一个批次的计算,还是选择继续等待指定时长。
36 | > - 支持在streaming过程中 重设 topics,用于生产中动态地增加删减数据源
37 | > - 添加了速率控制,KafkaRateController。用来控制读取速率,由于不是用的sparkstreaming,所有速率控制的一些参数拿不到,得自己去计算。
38 | > - 提供spark-streaming-kafka-0-10_2.10 spark 1.6 来支持 kafka的ssl
39 | > - 支持rdd.updateOffset 来管理偏移量。
40 | > - 封装 StreamingKafkaContext :你依然可以用 streamingContext来实现流式计算,词Api封装了读取kafka数据。

41 | 42 | 43 | ## Support 44 | --- 45 | | | scala version |Kafka version | hbase 1.0+ | es 2.3.0 |kudu 1.3.0 |SSL | 46 | |:------------------:|:------------------:|:------------------:|:------------------:|:------------------:|:------------------:|:------------------:| 47 | | **spark 1.3.x** | 2.10 | 0.8 | :ok_hand: | :star2: | :eggplant: |NO | 48 | | **spark 1.6.x** | 2.10 | 0.8 | :baby_chick: | :santa: | :corn: |NO | 49 | | **spark 1.6.x** | 2.10 | 0.10+ | :baby_chick: | :santa: | :corn: |YES | 50 | | **spark 2.0.x** | 2.10/2.11 | 0.10+ | :smiley: | :cherries: | :peach: |YES | 51 | 52 | --- 53 | 54 | 55 | ## :jack_o_lantern: Table of contents 56 | - [Spark kafka /sparkstreaming kafka](#Spark-kafka) 57 | - [Spark Hbase](#spark-Hbase) 58 | - [Spark ES Util](#Spark-ES-Util) 59 | - [Spark Kudu](#Spark-Kudu) 60 | - [Flink kafka](#Flink-kafka) 61 | - [Kafka Util](#Kafka-Util) 62 | - [Hbase Util](#Hbase-Util) 63 | - [Database util](#database-util) 64 | - [Elasticserach shade](#Elasticserach-shade) 65 | - [Rabbitmq util](#Rabbitmq-util) 66 | - [Splunk](#Splunk) 67 | 68 | 69 | 70 | Spark kafka 71 | ------------ 72 | - 封装了StreamingDynamicContext 。动态地调整 streaming的批次间隔时间,不像sparkstreaming的批次间隔时间是固定的(Streaming Kafka DynamicContext is encapsulated. Dynamically adjust the batch interval of streaming, unlike sparkstreaming, where the batch interval is fixed) 73 | - 使用StreamingDynamicContext 可以让你在流式程序的执行过程中动态的调整你的topic和获取kafkardd的方式。而不需要重新启动程序 74 | - 添加了 sparkStreaming 1.6 -> kafka 010 的 spark-streaming-kafka-0-10_2.10 。用以支持ssl 。 75 | - 封装了spark/sparkstreaming direct读取kafka数据的方式;提供rdd.updateOffset方法来手动管理偏移量到zk; 提供配置参数。
76 | (Encapsulated spark/sparkstreaming to read Kafka with Low level integration (offset in zookeeper)。Provides many configuration parameters to control the way to read Kafka data) 77 | - 支持topic新增分区
78 | (Support topic to add new partition) 79 | - 支持rdd数据写入kafka 的算子
80 | (Supporting RDD data to write to Kafka) 81 | - 支持 Kafka SSL (提供spark 1.6 + Kafka 010 的整合api)(sparkstreaming 1.6 with kafka 010 )
82 | (Support Kafka SSL (0.10+,spark 1.6+)) 83 | - Add parameters : 'kafka.consumer.from' To dynamically decide whether to get Kafka data from last or from consumption point 84 | - The version support of spark2.x Kafka 0.10+ is provided.(0.8, there is a big change compared to the 0.10 version.) 85 | - https://github.com/LinMingQiang/spark-util/tree/spark-kafka-0-8_1.6 或者 https://github.com/LinMingQiang/spark-kafka 86 | ``` 87 | val kp = SparkKafkaContext.getKafkaParam(brokers,groupId,"consum","earliest") 88 | val skc = new SparkKafkaContext(kp,sparkconf) 89 | val kafkadataRdd = skc.kafkaRDD(topics,last,msgHandle) 90 | //...do something 91 | kafkadataRdd.updateOffsets(groupId)//update offset to zk 92 | ``` 93 | 94 | 95 | Spark Hbase 96 | ------------ 97 | * 根据scan条件扫描hbase数据成RDD
98 | (spark scan hbase data to RDD)
99 | scan -> RDD[T] 100 | * 根据RDD的数据来批量gethbase
101 | (spark RDD[T] get from hbase to RDD[U])
102 | RDD[T] -> Get -> RDD[U] 103 | * 根据RDD的数据来批量 写入
104 | spark RDD[T] write to hbase
105 | RDD[T] -> Put -> Hbase 106 | * 根据RDD的数据来批量更新rdd数据
107 | spark RDD[T] update with hbase data
108 | RDD[T] -> Get -> Combine -> RDD[U]
109 | * 根据RDD的数据来批量更新rdd数据并写回hbase
110 | spark RDD[T] update with hbase data then put return to hbase
111 | RDD[T] -> Get -> Combine -> Put -> Hbase 112 | - https://github.com/LinMingQiang/spark-util/tree/spark-hbase 113 | ``` 114 | val conf = new SparkConf().setMaster("local").setAppName("tets") 115 | val sc = new SparkContext(conf) 116 | val hc = new SparkHBaseContext(sc, zk) 117 | hc.hbaseRDD(tablename, f).foreach { println } 118 | hc.scanHbaseRDD(tablename, new Scan(), f) 119 | ``` 120 | 121 | 122 | Spark ES Util 123 | ------------ 124 | - spark集成es
125 | ElasticSearch integration for Apache Spark
126 | - scan es数据为rdd
127 | Scanning es data into RDD
128 | - https://github.com/LinMingQiang/spark-util/tree/spark-es 129 | ``` 130 | sc.esRDD("testindex/testtype", query) 131 | 132 | ``` 133 | 134 | 135 | Spark Kudu 136 | ------------ 137 | - 读取kudu的数据为rdd
138 | Read kudu data into RDD
139 | - 讲rdd数据写入kudu
140 | Write RDD data to kudu
141 | - draw lessons from: https://github.com/tmalaska/SparkOnKudu 142 | - https://github.com/LinMingQiang/spark-util/tree/spark-kudu 143 | 144 | 145 | Flink kafka 146 | ------------ 147 | * 这是一个简单的例子。读取卡夫卡数据,实现WordCount统计并写入HBase
148 | * This is a simple example. Read Kafka data, implement WordCount statistics and write to HBase 149 | - https://github.com/LinMingQiang/flink-demo 150 | 151 | 152 | Splunk 153 | ------------ 154 | * Splunk是一个日志显示和监视系统
155 | (Splunk is a log display and monitoring system.) 156 | * Splunk的安装和使用
157 | (Installation and use of Splunk) 158 | - http://blog.csdn.net/a1043498776/article/details/68500059 159 | 160 | 161 | Kafka Util 162 | ------------ 163 | * 操作kafka工具类,提供每天记录主题的偏移量,主要用于日重新计算、小时重新计算等功能。
164 | Operate the tool class of kafka, provide offset to record topic by day, mainly used for day recalculation, hour recalculation and other functions  
165 | - https://github.com/LinMingQiang/spark-util/tree/kafka-util 166 | 167 | 168 | Hbase Util 169 | ------------ 170 | * 操作Hbase的工具类,查询HBase表的region信息,用于手动分割过大的region
171 | The tool class that operates Hbase, inquires the region information of HBase table, used for manual split some excessive region  
172 | - https://github.com/LinMingQiang/spark-util/tree/hbase-util 173 | 174 | 175 | database util 176 | ------------ 177 | * Provides a connection tool for each database. include: es,hbase,mysql,mongo
178 | - https://github.com/LinMingQiang/spark-util/tree/database-util 179 | 180 | 181 | Elasticserach shade 182 | ------------ 183 | * Resolving conflicts between ES and spark and Hadoop related packages
184 | - https://github.com/LinMingQiang/spark-util/tree/es-shaed 185 | 186 | 187 | Rabbitmq util 188 | ------------ 189 | * A tool class for sending and consuming MQ messages  
190 | https://github.com/LinMingQiang/spark-util/tree/rabbitmq-util 191 | 192 | -------------------------------------------------------------------------------- /language-setting.scala: -------------------------------------------------------------------------------- 1 | 2 | //用于设置项目语言。 3 | -------------------------------------------------------------------------------- /update.log: -------------------------------------------------------------------------------- 1 | 更新日志: 2 | 3 | 更新 spark-hbase 4 | 重新封装 SparkHbaseContext 5 | 6 | 1: 添加了sparkstreaming 1.6 + kafka 0.10的集成jar。目前网上没有集成好的 sparkstereaming 1.6 + kafka 010 的jar。 7 | kafka 010 之后才支持ssl,所以对于集群spark还是1.6,但是kafka要使用ssl的来说,这个包就正合适 8 | spark-streaming-kafka-0-10_2.10-1.6.0.jar 9 | 10 | 11 | 2: kafka 0.10 默认是将offset存储在自身的topic里而不是之前版本的zookeeper里面 12 | 所以,想自己实现存储zookeeper的可以使用kafka-util工具来自行封装 13 | 14 | 3: sparkstreaming的批次时间一经设定就没办法改变,但是在实际生产中,数据室友低峰期和高峰期的,数据低峰期的时候希望批次间隔小一点,高峰期的时候希望批次大一点。 15 | 我封装了 StreamingDynamicContext 来实现动态调整批次时间。 由用户返回 ture 或者 false 来决定是否马上执行下一个批次。 16 | 举个简单的例子: 我们希望在kafka中有数据的时候马上执行计算,而不是等待固定时长之后才执行 17 | 18 | 19 | --------------------------------------------------------------------------------