新闻详情

新闻详情

首页 / 资讯中心 / 详情

大数据 之 Snappy

发布时间:2026/9/2 21:06:04来源:尧图网络
大数据 之 Snappy
Hadoop 之 压缩Using snappy-java in SnappyCodechttps://issues.apache.org/jira/browse/HADOOP-17125https://github.com/apache/hadoop/pull/2201/files大数据各类引擎关于 Snappy 的使用形式各自相应的jiraparquet-cpp各个依赖项对比Hadoop NativeTask/usr/lib64/libsnappy.so.1/usr/local/hadoop-3.3.3/lib/native/libnativetask.soNativeTask JVM 启动 │ ▼ System.loadLibrary(nativetask)[NativeRuntime.java:53]│ ▼ ld.so 解析 DT_NEEDED → 找 libsnappy.so.1│ ├── 查找顺序:│1.LD_LIBRARY_PATH │2./etc/ld.so.cache由/etc/ld.so.conf*构建 │3.默认路径/usr/lib64,/lib64,/usr/lib,/lib │ ├── ✅ 找到如/usr/lib64/libsnappy.so.1 │ → libnativetask.so 加载成功 │ →supportsCompressionCodec(SnappyCodec)JNI_TRUE │ → spill 压缩走系统 libsnappy 的snappy_compress()│ └── ❌ 找不到 → UnsatisfiedLinkError → NativeRuntime 静态块catchnativeLibraryLoadedfalse → NativeMapOutputCollectorDelegator.init()抛 InvalidJobConfException → createSortingCollector 回退 MapOutputBufferJavaNativeTask 回退机制static{try{System.loadLibrary(nativetask);// ← libnativetask.so 加载LOG.info(Nativetask JNI library loaded.);nativeLibraryLoadedtrue;}catch(finalThrowable t){// Ignore failuresLOG.error(Failed to load nativetask JNI library with error: t);LOG.info(java.library.pathSystem.getProperty(java.library.path));LOG.info(LD_LIBRARY_PATHSystem.getenv(LD_LIBRARY_PATH));// nativeLibraryLoaded 保持 false不抛异常}}publicvoidinit(Context context)throws IOException,ClassNotFoundException{this.contextcontext;this.jobcontext.getJobConf();Platforms.init(job);if(job.getNumReduceTasks()0){String messageThere is no reducer, no need to use native output collector;LOG.error(message);thrownewInvalidJobConfException(message);}Class?comparatorClassjob.getClass(MRJobConfig.KEY_COMPARATOR,null,RawComparator.class);if(comparatorClass!null!Platforms.define(comparatorClass)){String messageNative output collector doesnt support customized java comparator job.get(MRJobConfig.KEY_COMPARATOR);LOG.error(message);thrownewInvalidJobConfException(message);}if(!QuickSort.class.getName().equals(job.get(Constants.MAP_SORT_CLASS))){String messageNative-Task doesnt support sort class job.get(Constants.MAP_SORT_CLASS);LOG.error(message);thrownewInvalidJobConfException(message);}if(job.getBoolean(MRConfig.SHUFFLE_SSL_ENABLED_KEY,false)true){String messageNative-Task doesnt support secure shuffle;LOG.error(message);thrownewInvalidJobConfException(message);}finalClass?keyClsjob.getMapOutputKeyClass();try{SuppressWarnings(rawtypes)finalINativeSerializer serializerNativeSerialization.getInstance().getSerializer(keyCls);if(nullserializer){String messageKey type not supported. Cannot find serializer for keyCls.getName();LOG.error(message);thrownewInvalidJobConfException(message);}elseif(!Platforms.support(keyCls.getName(),serializer,job)){String messageNative output collector doesnt support this key, this key is not comparable in native: keyCls.getName();LOG.error(message);thrownewInvalidJobConfException(message);}}catch(finalIOException e){String messageCannot find serializer for keyCls.getName();LOG.error(message);thrownewIOException(message);}finalboolean retNativeRuntime.isNativeLibraryLoaded();if(ret){if(job.getBoolean(MRJobConfig.MAP_OUTPUT_COMPRESS,false)){String codecjob.get(MRJobConfig.MAP_OUTPUT_COMPRESS_CODEC);if(!NativeRuntime.supportsCompressionCodec(codec.getBytes(Charsets.UTF_8))){String messageNative output collector doesnt support compression codec codec;LOG.error(message);thrownewInvalidJobConfException(message);}}NativeRuntime.configure(job);finallongupdateIntervaljob.getLong(Constants.NATIVE_STATUS_UPDATE_INTERVAL,Constants.NATIVE_STATUS_UPDATE_INTERVAL_DEFVAL);updaternewStatusReportChecker(context.getReporter(),updateInterval);updater.start();}else{String messageNativeRuntime cannot be loaded, please check that libnativetask.so is in hadoop library dir;LOG.error(message);thrownewInvalidJobConfException(message);}this.handlernull;try{finalClassKoKClass(ClassK)job.getMapOutputKeyClass();finalClassKoVClass(ClassK)job.getMapOutputValueClass();finalTaskAttemptID idcontext.getMapTask().getTaskID();finalTaskContext taskContextnewTaskContext(job,null,null,oKClass,oVClass,context.getReporter(),id);handlerNativeCollectorOnlyHandler.create(taskContext);}catch(finalIOException e){String messageNative output collector cannot be loaded;;LOG.error(message);thrownewIOException(message,e);}LOG.info(Native output collector can be successfully enabled!);}回退点位出现了hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/MapTask.javaClass?[]collectorClassesjob.getClasses(JobContext.MAP_OUTPUT_COLLECTOR_CLASS_ATTR,MapOutputBuffer.class);// ↑ 读取 mapreduce.job.map.output.collector.class// 你的配置: NativeMapOutputCollectorDelegator, MapTask$MapOutputBuffer// 逗号分隔 → 数组 [Delegator, MapOutputBuffer]intremainingCollectorscollectorClasses.length;Exception lastExceptionnull;for(Class clazz:collectorClasses){try{// 校验实现接口if(!MapOutputCollector.class.isAssignableFrom(clazz)){throw...;}// 实例化 初始化MapOutputCollectorKEY,VALUEcollectorReflectionUtils.newInstance(subclazz,job);collector.init(context);// ← ①失败就在这里抛LOG.info(Map output collector class collector.getClass().getName());returncollector;// ← 成功即返回}catch(Exception e){String msgUnable to initialize MapOutputCollector clazz.getName();if(--remainingCollectors0){msg (remainingCollectors more collector(s) to try);}lastExceptione;LOG.warn(msg,e);// ← 打 WARN 继续试下一个}}// 全部失败才抛 IOExceptionOS /usr/lib64/libsnappy.so.1#rpm-qi snappyName:snappy Version:1.1.9Release:2.oe2203sp3 Architecture:x86_64 Install Date:Wed17Dec202503:03:47PM CST Group:Unspecified Size:50212License:BSD Signature:RSA/SHA256,Fri05Jan202410:30:58AM CST,Key ID b943e4ef06bfb671 Source RPM:snappy-1.1.9-2.oe2203sp3.src.rpm Build Date:Thu28Dec202301:30:01PM CST Build Host:dc-64g.compass-ci Packager:http://openeuler.orgURL:https://github.com/google/snappySummary:A fast compressor/decompressor Description:Snappy is a compression/decompression library.It doesnotaimformaximum compression,orcompatibility with any other compression library;instead,it aimsforvery high speedsandreasonable compression./usr/local/hadoop-3.3.3/share/hadoop/hdfs/lib/snappy-java-1.1.8.2.jarhttps://github.com/xerial/snappy-javaunzip snappy-java-1.1.8.2.jar-d snappy-java-unzip:/tmp/snappy-java-unzip# find./-name*.so./org/xerial/snappy/native/Linux/x86_64/libsnappyjava.so./org/xerial/snappy/native/Linux/x86/libsnappyjava.so./org/xerial/snappy/native/Linux/android-arm/libsnappyjava.so./org/xerial/snappy/native/Linux/aarch64/libsnappyjava.so./org/xerial/snappy/native/Linux/ppc64le/libsnappyjava.so./org/xerial/snappy/native/Linux/ppc/libsnappyjava.so./org/xerial/snappy/native/Linux/ppc64/libsnappyjava.so./org/xerial/snappy/native/Linux/s390x/libsnappyjava.so./org/xerial/snappy/native/Linux/armv7/libsnappyjava.so./org/xerial/snappy/native/Linux/arm/libsnappyjava.so./org/xerial/snappy/native/Linux/armv6/libsnappyjava.so./org/xerial/snappy/native/FreeBSD/x86_64/libsnappyjava.so./org/xerial/snappy/native/SunOS/sparc/libsnappyjava.so./org/xerial/snappy/native/SunOS/x86_64/libsnappyjava.so./org/xerial/snappy/native/SunOS/x86/libsnappyjava.solibsnappyjava.so 来源不同hadoop version 对 snappy lib 的使用方式snappy-java 跨平台设计完整流程图
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

JSP+Spring+JDBC+Servlet图书馆管理系统开发实战详解 2026/9/2 22:00:16

JSP+Spring+JDBC+Servlet图书馆管理系统开发实战详解

简介:这是一套围绕大学图书馆业务设计的Java Web管理系统,采用JSP、Spring、JDBC与Servlet技术组合,适合Java Web学习者、课程设计学生或需要搭建后台管理系统的开发者参考。项目清晰划分学生端与管理端:学生端覆盖图书查询、借阅…

阅读更多 →
离散事件仿真引擎原理:从事件队列到时间推进机制的深度剖析 2026/9/2 22:00:16

离散事件仿真引擎原理:从事件队列到时间推进机制的深度剖析

离散事件仿真引擎原理:从事件队列到时间推进机制的深度剖析本文面向仿真工程师和系统架构师,深入拆解离散事件仿真(DES)引擎的核心机制,包括事件队列管理、时间推进算法、实体调度策略,以及在工业仿真中的工…

阅读更多 →
PDI 7.1社区版部署实战:从安装到跑通ETL任务全记录 2026/9/2 22:00:16

PDI 7.1社区版部署实战:从安装到跑通ETL任务全记录

简介:这是Pentaho Data Integration(简称PDI,又称Kettle)社区版7.1.0.0-12的完整安装压缩包,属于2018年发布的7.1分支,面向数据集成工程师、ETL开发者和运维人员,用于解决跨数据库、文件、接口等…

阅读更多 →
恶劣天气下加开56XXX次巡检列车:铁路“先巡后放”如何保安全? 2026/9/2 22:00:16

恶劣天气下加开56XXX次巡检列车:铁路“先巡后放”如何保安全?

广铁集团加开56XXX次巡视线路安全的这则消息,初看像是一条偏专业的调度公告,很多人可能匆匆略过,心里想的是“恶劣天气来了,又是晚点和停运”。但如果把这条消息和后续出现的限速调整、部分区间停运、列车折返等信息放在一起看&am…

阅读更多 →
UDS 19服务详解:从DTC状态掩码到快照与扩展数据 2026/9/2 22:00:16

UDS 19服务详解:从DTC状态掩码到快照与扩展数据

在实际车载诊断项目里,第一次接触 UDS 的朋友,看到“19 02 FF”或“19 04 0A 05 01”这类报文时,很容易被参数和响应结构绕晕。19 服务是 UDS 中读取故障码信息的核心服务,涵盖数量统计、故障码列表、快照记录、扩展数据等多个子功…

阅读更多 →
AI创新进入工程落地期:开发者如何从模型追新转向稳定交付 2026/9/2 21:57:14

AI创新进入工程落地期:开发者如何从模型追新转向稳定交付

最近AI圈出现了一种奇妙的反差:一边是各类AI产品发布依旧密集,一边是越来越多从业者感觉“技术没有质变”。于是“AI发展遇瓶颈、创新趋缓”成了热议话题。我的判断是:AI并不是不创新了,而是创新重心发生了转移——从模型架构的“…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞