本帖最后由 武汉分校-小舞 于 2019-1-3 18:00 编辑
### SqoopSqoop导数据的时候发生数据倾斜怎么办? 比如说10个节点的Sqoop运行,数据只往一个节点上跑,如何解决? Sqoop的底层是MapReduce, 加随机数解决? 在哪加,怎么加? 答:使用--split-by 按照字段进行切分,然后-m 提高并行度。可以解決sqoop数据倾斜的问题 假设有一张表test,sqoop命令中–split-by ‘id’,-m 10,会发生怎样奇特的事情。首先呢,sqoop会去查表的元数据等等,重点说一下sqoop是如何根据–split-by进行分区的。首先sqoop会向关系型数据库比如mysql发送一个命令:select max(id),min(id) from test。然后会把max、min之间的区间平均分为10分,最后10个并行的map去找数据库。 注意点: –split-by对非数字类型的字段支持不好。一般用于主键及数字类型的字段 ### Kafka+Spark StreamingKafka消费端数据丢失了,怎么办? 你们公司Kafka消费端有没设置消费一条数据,返回一个确认值? Kafka数据重复消费了怎么办,如何解决重复消费的问题? 答: 名词解释: 同步模式,一条生产者发一条kafka服务端应答一次 异步模式,批量发送,kafka服务端只应答一次 在生产者中指定ack应答机制
Properties props = new Properties(); //broker地址列表 props.put("bootstrap.servers", "192.168.25.142:9092,192.168.25.142:9093,192.168.25.142:9094"); /** * ack应答模式 * 值为all:all是最慢但最安全的 * 值为0:表示生产者只负责发送数据 * 值为1:表示partition的leader收到数据给出响应 * 值为-1:表示某个partition的所有副本都收到数据后给出响应 */ props.put("acks", "all"); |
Kafka数据丢失的情况如下: 使用同步模式的时候,有3种状态保证消息被安全生产,在配置为1(只保证写入leader成功)的话,如果刚好leader partition挂了,数据就会丢失。
还有一种情况可能会丢失消息,就是使用异步模式的时候,当缓冲区满了,如果配置为0(还没有收到确认的情况下,缓冲池一满,就清空缓冲池里的消息),
数据就会被立即丢弃掉。 |
只要能避免上述两种情况,那么就可以保证消息不会被丢失。
1)就是说在同步模式的时候,确认ack设置为-1,也就是让消息写入leader和所有的副本。 2)还有,在异步模式下,如果消息发出去了,但还没有收到确认的时候,缓冲池满了,在配置文件中设置成不限制阻塞超时的时间,也就说让生产端一直阻塞,这样也能保证数据不会丢失。 在数据消费时,避免数据丢失的方法:如果使用了storm,要开启storm的ackfail机制;如果没有使用storm,确认数据被完成处理之后,再更新offset值。 |
### 其他问题集群的堆栈是怎么分配的? 答:集群的堆栈分配需要进行压力测试,这一块由测试人员确定 hivesql和什么sql比较相似? 说oracle,然后被打脸了 貌似mysql? 答:你应该说hive sql和标准sql相似,hive的sql 解析器其实使用的就是标准的sql解析器 怎么解决HDFS上的海量小文件问题?(生产端,存储端,消费端) 生产端:避免出现小文件,如果使用flume是可以做到避免小文件 存储端:进行小文件合并,使用归档,防止小文件多导致元数据元数据太多 消费端:生产端和存储端注意了,消费端就不会出现小文件过多的情况
|