spark df 가 hive 표를 삽입 한 후 작은 파일 의 수량 이 많 습 니 다. 어떻게 합병 합 니까?
4618 단어 빅 데이터
spark 개발 과정 에서 세입 자의 hive 라 이브 러 리 디 렉 터 리 에 있 는 파일 개수 가 최대 제한 문 제 를 초과 할 수 있 습 니 다.
val conf = new SparkConf().setAppName("MySparkJob")
//.setMaster("local[1]").setMaster("spark://172.21.7.10:7077").setJars(List("xxx.jar")).set("spark.executor.memory", "10g")
val sc = new SparkContext(conf)
val hiveContext = new HiveContext(sc)
hiveContext.sql("use myhivedb")
// toDF() method need this line...
import hiveContext.implicits._
hiveContext.sql("set hive.mapred.supports.subdirectories=true")
hiveContext.sql("set mapreduce.input.fileinputformat.input.dir.recursive=true")
hiveContext.sql("set mapred.max.split.size=256000000")
hiveContext.sql("set mapred.min.split.size.per.node=128000000")
hiveContext.sql("set mapred.min.split.size.per.rack=128000000")
hiveContext.sql("set hive.hadoop.supports.splittable.combineinputformat=true")
hiveContext.sql("set hive.exec.compress.output=true")
hiveContext.sql("set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec")
hiveContext.sql("set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat")
hiveContext.sql("set hive.merge.mapfiles=true")
hiveContext.sql("set hive.merge.mapredfiles=true")
hiveContext.sql("set hive.merge.size.per.task=256000000")
hiveContext.sql("set hive.merge.smallfiles.avgsize=256000000")
hiveContext.sql("set hive.groupby.skewindata=true")
val my_df = my_temp1_df.unionAll(my_temp2_df)
my_df.registerTempTable("temp_temphivetable")
hiveContext.sql("insert into temphivetable select * from temp_temphivetable")
// -rwxrwx---+ 3 jc_rc jc_rc_group 187.9 K 2017-06-28 17:58 /my tenant name/myhivedb/temphivetable/part-37944.gz
// -rwxrwx---+ 3 jc_rc jc_rc_group 188.9 K 2017-06-28 17:56 /my tenant name/myhivedb/temphivetable/part-37945.gz
설정: repartition (1000) 시
// :repartition(1000) ,
// -rwxrwx---+ 3 jc_rc jc_rc_group 10.9 M 2017-07-01 16:31 /my tenant name/myhivedb/temphivetable/part-00998.gz
// -rwxrwx---+ 3 jc_rc jc_rc_group 10.9 M 2017-07-01 16:31 /my tenant name/myhivedb/temphivetable/part-00999.gz
val my_df = my_temp1_df.unionAll(my_temp2_df).repartition(1000).persist()
my_df.registerTempTable("temp_temphivetable")
hiveContext.sql("insert into temphivetable select * from temp_temphivetable")
설정: repartition (100) 시
// :repartition(100) ,
// -rwxrwx---+ 3 jc_rc jc_rc_group 103.0 M 2017-07-01 17:53 /my tenant name/myhivedb/temphivetable/part-00098.gz
// -rwxrwx---+ 3 jc_rc jc_rc_group 103.2 M 2017-07-01 17:53 /my tenant name/myhivedb/temphivetable/part-00099.gz
val my_df = my_temp1_df.unionAll(my_temp2_df).repartition(1000).persist()
my_df.registerTempTable("temp_temphivetable")
hiveContext.sql("insert into temphivetable select * from temp_temphivetable")
hivesql 에서 snappy 방식 으로 압축 하고 합병 합 니 다.
1 set hive.exec.reducers.bytes.per.reducer=500000000;
2 set hive.mapred.supports.subdirectories=true;
3 set mapreduce.input.fileinputformat.input.dir.recursive=true;
4 set mapred.max.split.size=256000000;
5 set mapred.min.split.size.per.node=128000000;
6 set mapred.min.split.size.per.rack=128000000;
7 set hive.hadoop.supports.splittable.combineinputformat=true;
8 set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
9 set hive.merge.mapfiles=true;
10 set hive.merge.mapredfiles=true;
11 set hive.merge.size.per.task=256000000;
12 set hive.merge.smallfiles.avgsize=256000000;
13 set hive.groupby.skewindata=true;
14 set hive.exec.dynamic.partition.mode=nonstrict;
15 set hive.exec.parallel=true;
16 set hive.exec.parallel.thread.number=32;
17 SET hive.exec.compress.output=true;
18 SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
19 SET mapred.output.compression.type=BLOCK;
20 set hive.exec.compress.intermediate=true;
21 set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
22 set hive.intermediate.compression.type=BLOCK;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spark 의 2: 원리 소개Google Map/Reduce 를 바탕 으로 이 루어 진 Hadoop 은 개발 자 에 게 map, reduce 원 어 를 제공 하여 병렬 일괄 처리 프로그램 을 매우 간단 하고 아름 답 게 만 들 었 습 니 다.S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.