1.Spark Streaming包含三种计算模式:nonstate.stateful .window
2.kafka可通过配置文件使用自带的zookeeper集群
3.Spark一切操作归根结底是对RDD的操作
4.部署Spark任务,不用拷贝整个架包,只需拷贝被修改的文件,然后在目标服务器上编译打包。
5.kafka的log.dirs不要设置成/tmp下的目录,貌似tmp目录有文件数和磁盘容量限制
6.ES的分片类似kafka的partition
7spark Graph根据边集合构建图,顶点集合只是指定图中哪些顶点有效
8.presto集群没必要采用on yarn模式,因为hadoop依赖HDFS,如果部分机器磁盘很小,hadoop会很尴尬,而presto是纯内存计算,不依赖磁盘,独立安装可以跨越多个集群,可以说有内存的地方就可以有presto
9.presto进程一旦启动,JVM server会一直占用内存
10.编译spark,hive onspark就不要加-Phive参数,若需sparkSQL支持hive语法则要加-Phive参数
11.通过hive源文件pom.xml查看适配的spark版本,只要打版本保持一致就行,例如spark1.6.0和1.6.2都能匹配
12.kafka的comsumer groupID对于sparkdirect streaming无效
13.shuffle write就是在一个stage结束计算之后,为了下一个stage可以执行shuffle类的算子,而将每个task处理的数据按key进行分类,将相同key都写入同一个磁盘文件中,而每一个磁盘文件都只属于下游stage的一个task,在将数据写入磁盘之前,会先将数据写入内存缓存中,下一个stage的task有多少个,当前stage的每个task就要创建多少份磁盘文件。
14.单个spark任务的excutor核数不宜设置过高,否则会导致其他JOB延迟
15.运行时删除hadoop数据目录会导致依赖HDFS的JOB失效
16.sparkSQL UDAF中update函数的第二个参数input: Row 对应的并非DataFrame的行,而是被inputSchema投影了的行
17.Spark的Driver只有在Action时才会收到结果
18.Spark需要全局聚合变量时应当使用累加器(Accumulator)
19.Kafka以topic与consumergroup划分关系,一个topic的消息会被订阅它的消费者组全部消费,如果希望某个consumer使用topic的全部消息,可将该组只设一个消费者,每个组的消费者数目不能大于topic的partition总数,否则多出的consumer将无消可费
20.所有自定义类要实现serializable接口,否则在集群中无法生效
21.resources资源文件读取要在Spark Driver端进行,以局部变量方式传给闭包函数
22.DStream流转化只产生临时流对象,如果要继续使用,需要一个引用指向该临时流对象
23.提交到yarn cluster的作业不能直接print到控制台,要用log4j输出到日志文件中
24.HDFS文件路径写法为:hdfs://master:9000/文件路径,这里的master是namenode的hostname,9000是hdfs端口号。
25.不要随意格式化HDFS,这会带来数据版本不一致等诸多问题,格式化前要清空数据文件夹
26.搭建集群时要首先配置好主机名,并重启机器让配置的主机名生效
27.linux批量多机互信, 将pub秘钥配成一个
28.小于128M的小文件都会占据一个128M的BLOCK,合并或者删除小文件节省磁盘空间
29.Non DFS Used指的是非HDFS的所有文件
30.spark两个分区方法coalesce和repartition,前者窄依赖,分区后数据不均匀,后者宽依赖,引发shuffle操作,分区后数据均匀
31.spark中数据写入ElasticSearch的操作必须在action中以RDD为单位执行