Apache spark 如何使用SPARK在HDFS中以hive orc表的形式写入大量数据(近800 GB)?
过去3-4个月以及最近,我一直在火花项目工作 我正在用一个巨大的历史文件(800 GB)和一个小的增量文件(3 GB)进行一些计算 使用Apache spark 如何使用SPARK在HDFS中以hive orc表的形式写入大量数据(近800 GB)?,apache-spark,apache-spark-sql,spark-dataframe,Apache Spark,Apache Spark Sql,Spark Dataframe,过去3-4个月以及最近,我一直在火花项目工作 我正在用一个巨大的历史文件(800 GB)和一个小的增量文件(3 GB)进行一些计算 使用hqlContext&dataframe,spark中的计算速度非常快,但是当我尝试使用orc格式将计算结果写入hive表时,这将包含近200亿条记录,数据大小近800 GB,这需要花费太多时间(超过2小时,最终失败) 我的群集详细信息是:19个节点,总内存为1.41 TB,总vCore为361 我正在使用的调谐器 --num-executors 67 --ex
hqlContext
&dataframe
,spark中的计算速度非常快,但是当我尝试使用orc
格式将计算结果写入hive表时,这将包含近200亿条记录,数据大小近800 GB,这需要花费太多时间(超过2小时,最终失败)
我的群集详细信息是:19个节点,总内存为1.41 TB,总vCore为361
我正在使用的调谐器
--num-executors 67
--executor-cores 6
--executor-memory 60g
--driver-memory 50g
--driver-cores 6
--master yarn-cluster
--total-executor-cores 100
--conf "spark.executor.extraJavaOptions=-XX:+UseG1GC"
在运行时
若我对结果进行计数,那个么它将在15分钟内完成,但若我想将结果作为配置单元表写入HDFS中
[ UPDATED_RECORDS.write.format("orc").saveAsTable("HIST_ORC_TARGET") ]
那么我面临的就是上述问题
请为我提供一个建议或任何关于这一点,因为我在这个案件陷入了过去几天
代码格式:
val BASE_RDD_HIST = hqlContext.sql("select * from hist_orc")
val BASE_RDD_INCR = hqlContext.sql("select * from incr_orc")
使用dataframe、配置单元查询和udf进行一些spark计算
最后:
result.write.format("orc").saveAsTable("HIST_ORC_TARGET_TABLE")
朋友们好,几天前我在这里找到了我自己问题的答案
这是我写的
每当我们执行任何spark程序时,我们都不会指定队列
参数,有时默认队列有一些限制,不允许您执行所需的执行器或任务,因此可能会导致处理速度缓慢,并在运行较少的执行器/任务时导致内存问题导致作业失败s、 因此,不要忘记在您的执行命令中提到队列名称:
spark-submit --class com.xx.yy.FactTable_Merging.ScalaHiveHql
--num-executors 25
--executor-cores 5
--executor-memory 20g
--driver-memory 10g
--driver-cores 5
--master yarn-cluster
--name "FactTable HIST & INCR Re Write After Null Merging Seperately"
--queue "your_queue_name"
/tmp/ScalaHiveProgram.jar
/user/poc_user/FactTable_INCR_MERGED_10_PARTITION
/user/poc_user/FactTable_HIST_MERGED_50_PARTITION
当项目失败时,错误消息是什么?是否内存不足?如果是,这些调整提示可能会有所帮助:16/06/30 13:58:19信息MapOutputRackerMasterEndpoint:被要求将随机播放0的地图输出位置发送到g4t7550.houston.hpecorp.net:53074 16/06/30 13:58:41警告TaskSetManager:在阶段2.0中丢失任务22.0(TID 918,g4t7567.houston.hpecorp.net):java.lang.OutOfMemoryError:org.apache.spark.unsafe.memory.HeapMemoryAllocator.allocate(HeapMemoryAllocator.java:66),org.apache.spark.memory.TaskMemoryManager.allocatePage(TaskMemoryManager.java:259),org.apache.spark.spark.memory.MemoryConsumer.allocatePage(MemoryConsumer.java:112)在