spark、HDFS在工业上一般怎么使用?

小伍
  • 27

系统之前使用关系型数据库,现在业务数据量大,有一张实时监测的数据表,每天大几百万条数据,处理能力有限,所以打算用mongodb或spark,但因为不熟悉spark,最近一直在研究学习,有很多疑问,请前辈指教。

HDFS

1、数据一般以什么样的形式保存在HDFS上?文本文件?
2、一个数据文件大小如果小于HDFS的block大小的话,是不是就不会分割成多块分散到其他DataNode?
3、HDFS是不是更适合保存比较大的文件?
4、在工业一般怎么使用spark?可否举个详细的具体的例子?

spark

1、如开头所述,每天大几百万条的监测数据我想使用spark处理,以什么样的形式保存数据到HDFS上?
2、如果使用mongodb保存监测数据,再使用spark sql处理,是不是就不用HDFS了?
3、spark链接mongodb,数据的提取传输是不是又成为瓶颈了?
4、spark使用nosql,除了mongodb,还有其他的推荐吗?各适合什么业务场景?
5、程序开发好之后(以java maven为例),一般采用何总方式提交任务到spark集群(非local模式)?【打包->上传到HDFS->调用spark-submit脚本】都是这样吗?岂不是很麻烦?
6、想本地起程序链接spark集群,调试程序,同步接收计算结果,是不可能吗?计算结果一般都是再保存的方式异步调用吗?

小弟菜鸟,问题各种多,还望能者多劳,知无不尽,多谢分享~

回复
阅读 3.6k
1 个回答

以下是我的理解,欢迎指正

HDFS
1、数据一般以什么样的形式保存在HDFS上?文本文件?

 -- 数据会分块然后冗余存放,作为二进制文件存放。

2、一个数据文件大小如果小于HDFS的block大小的话,是不是就不会分割成多块分散到其他DataNode?

 -- 小于的话一个DataNode只会有一个block,但是会冗余存放在若干个DataNodes中,以提高可靠性。

3、HDFS是不是更适合保存比较大的文件?

 -- 是的

4、在工业一般怎么使用spark?可否举个详细的具体的例子?

 -- 你就把spark作为一个分布式的海量数据的数据库系统来用就行了,spark的流式API就是特殊形式的SQL而已。例子:腾讯朋友圈推荐的广告好像就是用spark搞,Yahoo使用Spark来搞用户兴趣分析,还有好多公司的BI现在也都用spark.

spark
1、如开头所述,每天大几百万条的监测数据我想使用spark处理,以什么样的形式保存数据到HDFS上?
-- HDFS好像没有限定形式,就是一个大Array,顺序存放,木有索引

2、如果使用mongodb保存监测数据,再使用spark sql处理,是不是就不用HDFS了?
-- 每天几百万数据,每月就是上亿数据,mongodb也是完全没问题的,HDFS完全可以被MongoDB所取代,而且MongoDB中还可以对数据建立索引,省得每次都全部扫描一遍了。MongoDB官方就有个Mongo Spark Connector 连接器来专门对接Spark.

3、spark链接mongodb,数据的提取传输是不是又成为瓶颈了?
-- 使用MongoDB + spark,最重要的是“条件下推”,即尽量利用MongoDB的索引功能。比如你们的监测数据可以对时间戳建立索引,然后数据提取的时候一定要让MongoDB来处理时间范围的筛选条件,而不是到了spark里面才进行筛选。这样尽量减少数据传输的开销。

4、spark使用nosql,除了mongodb,还有其他的推荐吗?各适合什么业务场景?
-- 对于监测数据,肯定要按时间来排列吧,可以考虑下InfluxDB而非MongoDB. InfluxDB对于时间序列的数据有优化。 其他很多NoSQL也有和spark对接的connector,你可以自己搜下。

5、程序开发好之后(以java maven为例),一般采用何总方式提交任务到spark集群(非local模式)?【打包->上传到HDFS->调用spark-submit脚本】都是这样吗?岂不是很麻烦?

-- Java就是这么麻烦,人生苦短,不如Python

6、想本地起程序链接spark集群,调试程序,同步接收计算结果,是不可能吗?计算结果一般都是再保存的方式异步调用吗?

-- 本地调试一般用小数据量的伪集群吧。spark本身可以直接返回计算结果的呀,但是线上数据那么多,得等多久呀。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏