[HADOOP] HDFS 사용하여 스파크에 하르 파일을 Gzip으로 압축
HADOOPHDFS 사용하여 스파크에 하르 파일을 Gzip으로 압축
나는 하둡 아카이브 .har 형식으로 큰 데이터를 가지고있다. , HAR은 압축을 포함하지 않기 때문에, 본인은 그것을 gzip을하고 HDFS에 저장하려합니다. 내가 오류없이 작동시킬 수있는 유일한 방법은 다음과 같습니다
harFile.coalesce(1, "true")
.saveAsTextFile("hdfs://namenode/archive/GzipOutput", classOf[org.apache.hadoop.io.compress.GzipCodec])
//`coalesce` because Gzip isn't splittable.
그러나, 이것은 나에게 정확한 결과를 제공하지 않습니다. gzip으로 압축 된 파일이 생성됩니다 만 유효 출력 (한 줄은 RDD 유형 등을 말하는)
어떤 도움을 이해할 수있을 것이다. 나는 또한 다른 접근 방법에 열려입니다.
감사.
해결법
-
==============================
1.자바 코드는 기존 HDFS 파일의 압축 된 버전을 만들 수 있습니다.
자바 코드는 기존 HDFS 파일의 압축 된 버전을 만들 수 있습니다.
비트와 나는 몇 년 전에, 따라서 테스트하지를 쓴 자바 애플 리케이션의 조각에서, 텍스트 편집기, 서둘러 내장; 오타과 격차를 기대할 수있다.
// HDFS API import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.FileStatus; // native Hadoop compression libraries import org.apache.hadoop.io.compress.CompressionCodecFactory; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.Compressor; import org.apache.hadoop.io.compress.GzipCodec; import org.apache.hadoop.io.compress.BZip2Codec; import org.apache.hadoop.io.compress.SnappyCodec; import org.apache.hadoop.io.compress.Lz4Codec; .............. // Hadoop "Configuration" (and its derivatives for HDFS, HBase etc.) constructors try to auto-magically // find their config files by searching CLASSPATH for directories, and searching each dir for hard-coded // name "core-site.xml", plus "hdfs-site.xml" and/or "hbase-site.xml" etc. // WARNING - if these config files are not found, the "Configuration" reverts to hard-coded defaults without // any warning, resulting in bizarre error messages later > let's run some explicit controls here Configuration cnfHadoop = new Configuration() ; String propDefaultFs =cnfHadoop.get("fs.defaultFS") ; if (propDefaultFs ==null || ! propDefaultFs.startsWith("hdfs://")) { throw new IllegalArgumentException( "HDFS configuration is missing - no proper \"core-site.xml\" found, please add\n" +"directory /etc/hadoop/conf/ (or custom dir with custom XML conf files) in CLASSPATH" ) ; } /* // for a Kerberised cluster, either you already have a valid TGT in the default // ticket cache (via "kinit"), or you have to authenticate by code UserGroupInformation.setConfiguration(cnfHadoop) ; UserGroupInformation.loginUserFromKeytab("user@REALM", "/some/path/to/user.keytab") ; */ FileSystem fsCluster =FileSystem.get(cnfHadoop) ; Path source = new Path("/some/hdfs/path/to/XXX.har") ; Path target = new Path("/some/hdfs/path/to/XXX.har.gz") ; // alternative: "BZip2Codec" for better compression (but higher CPU cost) // alternative: "SnappyCodec" or "Lz4Codec" for lower compression (but much lower CPU cost) CompressionCodecFactory codecBootstrap = new CompressionCodecFactory(cnfHadoop) ; CompressionCodec codecHadoop =codecBootstrap.getCodecByClassName(GzipCodec.class.getName()) ; Compressor compressorHadoop =codecHadoop.createCompressor() ; byte[] buffer = new byte[16*1024*1024] ; int bufUsedCapacity ; InputStream sourceStream =fsCluster.open(source) ; OutputStream targetStream =codecHadoop.createOutputStream(fsCluster.create(target, true), compressorHadoop) ; while ((bufUsedCapacity =sourceStream.read(buffer)) >0) { targetStream.write(buffer, 0, bufUsedCapacity) ; } targetStream.close() ; sourceStream.close() ; ..............
from https://stackoverflow.com/questions/43517025/gzipping-har-files-on-hdfs-using-spark by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 어떻게 맵리 듀스가 동시에 얼마나 많은 매퍼를 사용하여 말할? (0) | 2019.10.09 |
---|---|
[HADOOP] 하둡에 InputFormat 사용자 정의 (0) | 2019.10.09 |
[HADOOP] 사용자 정의 이진 입력 - 하둡 (0) | 2019.10.08 |
[HADOOP] 오류가 하둡의 HDFS에 로컬 파일 시스템에서 파일을 복사하는 동안 (0) | 2019.10.08 |
[HADOOP] 계획에 대한 파일 시스템 없습니다 : SFTP (0) | 2019.10.08 |