当数据很大时,如何将数据从cassandra缓存到spark?
When the data is big, How can I cache data from cassandra to spark?
我从cassandra中取出一些数据到spark,当数据足够大并且一次无法缓存在内存中时,我必须使用spark.cassandra.input.split.size_in_mb来设置一次机器可以有多大的数据get.But 我也想缓存数据以供更多时间使用,代码如下:
val conf = new SparkConf().setAppName("CassandraLogAnalyse")
.set("spark.cassandra.connection.host", "xxx")
.set("spark.cassandra.auth.username", "xxx")
.set("spark.cassandra.auth.password", "xxx")
.set("spark.cassandra.input.split.size_in_mb",'512')
//Select Data from cassandra
val sc = new SparkContext(conf)
val loggly_http_in = sc.cassandraTable("loggly", "http_in").select("uid", "cjj_id", "request_uri", "request_body").where("app_context = ? and log_time > ?", "news", batch_time)
loggly_http_in.cache()
val rdd1 = loggly_http_in.map(...).filter(...)......
val rdd2 = loggly_http_in.map(...).filter(...)......
是否正确?
如果它是正确的,它是如何工作的?
错误的时候,正确的方法是什么?
spark.cassandra.input.split.size_in_mb
设置与缓存无关。此设置确定每个 Spark 分区的大小。如果你设置太大,你可能会得到太少的任务,你的一些节点可能会保持未使用状态。如果您将其设置得太低,您将从任务调度中获得更多开销。
Spark 可以缓存一个 RDD(和多个 RDD)的多个分区。因此,当您调用 cache()
时,这将尝试缓存尽可能多的 RDD 分区,因为它可以找到可用内存。如果你需要缓存的比实际缓存的多,唯一的办法就是为你的应用程序分配更多的 Spark 集群内存。
您对 cache
的使用看起来不错。
不要忘记您还可以缓存任何转换后的 RDD。例如。过滤后缓存 RDD 可能比缓存从 Cassandra 获取的原始 RDD 需要更少的内存。
我从cassandra中取出一些数据到spark,当数据足够大并且一次无法缓存在内存中时,我必须使用spark.cassandra.input.split.size_in_mb来设置一次机器可以有多大的数据get.But 我也想缓存数据以供更多时间使用,代码如下:
val conf = new SparkConf().setAppName("CassandraLogAnalyse")
.set("spark.cassandra.connection.host", "xxx")
.set("spark.cassandra.auth.username", "xxx")
.set("spark.cassandra.auth.password", "xxx")
.set("spark.cassandra.input.split.size_in_mb",'512')
//Select Data from cassandra
val sc = new SparkContext(conf)
val loggly_http_in = sc.cassandraTable("loggly", "http_in").select("uid", "cjj_id", "request_uri", "request_body").where("app_context = ? and log_time > ?", "news", batch_time)
loggly_http_in.cache()
val rdd1 = loggly_http_in.map(...).filter(...)......
val rdd2 = loggly_http_in.map(...).filter(...)......
是否正确? 如果它是正确的,它是如何工作的? 错误的时候,正确的方法是什么?
spark.cassandra.input.split.size_in_mb
设置与缓存无关。此设置确定每个 Spark 分区的大小。如果你设置太大,你可能会得到太少的任务,你的一些节点可能会保持未使用状态。如果您将其设置得太低,您将从任务调度中获得更多开销。
Spark 可以缓存一个 RDD(和多个 RDD)的多个分区。因此,当您调用 cache()
时,这将尝试缓存尽可能多的 RDD 分区,因为它可以找到可用内存。如果你需要缓存的比实际缓存的多,唯一的办法就是为你的应用程序分配更多的 Spark 集群内存。
您对 cache
的使用看起来不错。
不要忘记您还可以缓存任何转换后的 RDD。例如。过滤后缓存 RDD 可能比缓存从 Cassandra 获取的原始 RDD 需要更少的内存。