基于腾讯云的ckafka消费实践

对于KA,特别是零售商,实时流量、订单统计是主要需求。腾讯数平有各种实时计算工具可用,由于法律约束,KA数据一般不会落地到腾讯内部,那么腾讯云的ckafka即为必选方案。

kafka作为消息中间件,由linkedin发起并开源,有比较成熟的语言和api支持,同时跟hadoop生态系统也有比较好的集成。腾讯云的ckafka无缝兼容kafka,也即kafka的“云化”版本。但是ckafka使用局限于腾讯云CVM主机,无法直接访问,需要架设一个中间层,作为数据转发和适配。ckafka支持分区扩容(1~8个分区),告警管理,可以比较快速的搭建一个消息系统。

有了实时数据,还需要实时统计,可以采用spark streaming+kafka的方案,由于统计逻辑复杂,可能需要redis作为配置缓冲。当然,最终还需要mysql落地。

最近腾讯云推出 流计算服务,目前内测中,可以通过sql的方式进行实时消费,极大的降低开发成本,值得一试。

基于腾讯云的ckafka消费实践

sqoop导出,hive中空值导致的异常

先看问题:

18/09/30 10:52:44 INFO mapreduce.ExportJobBase: Exported 0 records.
18/09/30 10:52:44 ERROR mapreduce.ExportJobBase: Export job failed!
18/09/30 10:52:44 DEBUG util.ClassLoaderStack: Restoring classloader: sun.misc.Launcher$AppClassLoader@6e1567f1
18/09/30 10:52:44 ERROR tool.ExportTool: Error during export:
Export job failed!
at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:445)
at org.apache.sqoop.manager.SqlManager.exportTable(SqlManager.java:931)
at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:80)
at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:99)
at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
at org.apache.sqoop.Sqoop.main(Sqoop.java:252)

sqoop导出任务不间断出问题 ,后来发现hive中的null值在文件按\N存储,所以导致导出字符异常,参考:
https://stackoverflow.com/questions/30736049/sqoop-export-is-failing-when-i-have-n-as-data

增加选项:
--input-null-string "\\\\N" --input-null-non-string "\\\\N"


-------
感觉在不断探坑。。。
sqoop导出,hive中空值导致的异常

sqoop导出,update-key功能空指针异常问题处理

从sqoop导出mysql,涉及hdfs、hive、cos(腾讯云对象存储)等数据源,sqoop 1.4.6导出 hive表到 mysql,如果需要用到update-key功能(根据主key更新或插入),1.4.6版本实现上有bug,1.4.7版本已经解决。

只能通过hdfs、cos方式导出,注意默认hive数据分隔符是 ctrl+a,所以需要制定分隔符"\0001"

问题:
18/09/29 16:25:42 WARN hcat.SqoopHCatUtilities: No files under /usr/local/service/hive/hcatalog/lib to add to distributed cache for hcatalog job
18/09/29 16:25:42 WARN hcat.SqoopHCatUtilities: No files under /usr/local/service/hive/hcatalog/share/hcatalog/storage-handlers to add to distributed cache for hcatalog job
18/09/29 16:25:42 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException
java.lang.NullPointerException
at org.apache.sqoop.mapreduce.ExportJobBase.getFileType(ExportJobBase.java:127)
at org.apache.sqoop.mapreduce.ExportJobBase.isSequenceFiles(ExportJobBase.java:118)
at org.apache.sqoop.mapreduce.ExportJobBase.inputIsSequenceFiles(ExportJobBase.java:492)
at org.apache.sqoop.mapreduce.JdbcUpdateExportJob.getMapperClass(JdbcUpdateExportJob.java:69)
at org.apache.sqoop.mapreduce.ExportJobBase.configureMapper(ExportJobBase.java:268)
at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:426)
at org.apache.sqoop.manager.MySQLManager.upsertTable(MySQLManager.java:136)
at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:74)
at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:100)
at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
at org.apache.sqoop.Sqoop.main(Sqoop.java:236)

解决方案:

sqoop export --connect jdbc:mysql://ip:port/db --table table_name
--username xxx --password xxx
--export-dir hdfs路径or cos路径
--update-key mysql-table-primary-key --update-mode allowinsert
--input-fields-terminated-by "\0001"

sqoop导出,update-key功能空指针异常问题处理

自我介绍

周末到山东接小孩,自然是要聚聚
觥筹交错之间,自我介绍是需要的

记得以前,介绍百度很简单,就是那个百度
然后介绍腾讯,有一段时间,亲人们会提到QQ
但,这次,谈话间,只提微信了

而,百度还是百度

升华下(比较擅长)...
在剧烈变化的行业里面工作,产品一直在迭代。“风口论”催生了很多创业公司
移动互联网的大潮汹涌而来
而今,“风口论”变了,现在是AI论,ALL IN AI,不提AI,都不好意思说在做技术了
AI 跑起来...

测试in AI
数据in AI
运维in AI
APPin AI
后台in AI

ml

自我介绍