- 浏览: 199677 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
永立s:
这篇博客帮我解决了一个问题,十分感谢.
HBase表增加snappy压缩 -
BlackWing:
日志是job运行日志,看你怎么配置了,一般就在hadoop安装 ...
解决Exception from container-launch: ExitCodeException exitCode=1的另类错误 -
heymaomao:
heymaomao 写道有两个问题,想请教下楼主 第一是日志楼 ...
解决Exception from container-launch: ExitCodeException exitCode=1的另类错误 -
heymaomao:
有两个问题,想请教下楼主 第一是日志楼主到底看的是哪个日志文件 ...
解决Exception from container-launch: ExitCodeException exitCode=1的另类错误 -
atomduan:
本地的Unix 进程创建失败,检查下服务器内存是否够用,是不是 ...
解决Exception from container-launch: ExitCodeException exitCode=1的另类错误
LoadIncrementalHFiles是copy而不是move的疑惑
转载请标明出处:http://blackwing.iteye.com/blog/1991901
之前在另一篇文章里实现的自定义job生成HFile并使用LoadIncrementalHFiles 入库HBase :http://blackwing.iteye.com/blog/1991380
但发现入库时,非常的慢,而且几次都失败了,明明官方教材说这个操作是move的:
再次验证google的强大,发现官方有这个问题的解释:
主要问题是,批量导入HBase时,如果hdfs地址没有写端口,会认为是两个不同文件系统,所以要copy,而如果当是同一文件系统时,则是move,秒级入库了2GB的文件。
指令差别如下:
copy的场景:
move的场景:
剩下的需要好好看看源码增加理解了。
没有secure authentication时,调用流程如下:
其中ProtobufUtil.bulkLoadHFile()代码如下:
其中client是HRegionServer实例。
之后调用过程为:
在HRegionFileSystem.bulkLoadStoreFile(...)这个方法判断源路径、目标路径是否同一个文件系统:
如果不是一个文件系统,那么就调用:
进行拷贝。
最终进行move操作的其实是一个rename操作:
rename函数如下:
之前在另一篇文章里实现的自定义job生成HFile并使用LoadIncrementalHFiles 入库HBase :http://blackwing.iteye.com/blog/1991380
但发现入库时,非常的慢,而且几次都失败了,明明官方教材说这个操作是move的:
The completebulkload utility will move generated StoreFiles into an HBase table. This utility is often used in conjunction with output from Section 15.1.10, “ImportTsv”.
再次验证google的强大,发现官方有这个问题的解释:
https://issues.apache.org/jira/browse/HBASE-9537 https://issues.apache.org/jira/browse/HBASE-8304
主要问题是,批量导入HBase时,如果hdfs地址没有写端口,会认为是两个不同文件系统,所以要copy,而如果当是同一文件系统时,则是move,秒级入库了2GB的文件。
指令差别如下:
copy的场景:
./hbase-0.96.0-hadoop1/bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://namenode/outputtsv gonghui_test
move的场景:
./hbase-0.96.0-hadoop1/bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://namenode:8020/outputtsv gonghui_test
剩下的需要好好看看源码增加理解了。
没有secure authentication时,调用流程如下:
LoadIncrementalHFiles.doBulkLoad(Path hfofDir, final HTable table) --> LoadIncrementalHFiles.bulkLoadPhase(final HTable table, final HConnection conn,ExecutorService pool, Deque<LoadQueueItem> queue,final Multimap<ByteBuffer, LoadQueueItem> regionGroups) --> LoadIncrementalHFiles.tryAtomicRegionLoad(final HConnection conn,final TableName tableName, final byte[] first, Collection<LoadQueueItem> lqis) --> ProtobufUtil.bulkLoadHFile(final ClientService.BlockingInterface client,final List<Pair<byte[], String>> familyPaths,final byte[] regionName, boolean assignSeqNum) -->
其中ProtobufUtil.bulkLoadHFile()代码如下:
/** * A helper to bulk load a list of HFiles using client protocol. * * @param client * @param familyPaths * @param regionName * @param assignSeqNum * @return true if all are loaded * @throws IOException */ public static boolean bulkLoadHFile(final ClientService.BlockingInterface client, final List<Pair<byte[], String>> familyPaths, final byte[] regionName, boolean assignSeqNum) throws IOException { BulkLoadHFileRequest request = RequestConverter.buildBulkLoadHFileRequest(familyPaths, regionName, assignSeqNum); try { BulkLoadHFileResponse response = client.bulkLoadHFile(null, request); return response.getLoaded(); } catch (ServiceException se) { throw getRemoteException(se); } }
其中client是HRegionServer实例。
之后调用过程为:
HRegionServer --> HRegion.bulkLoadHFiles(...) --> HStore.bulkLoadHFile(...) --> HRegionFileSystem.bulkLoadStoreFile(...)
在HRegionFileSystem.bulkLoadStoreFile(...)这个方法判断源路径、目标路径是否同一个文件系统:
/** * Bulk load: Add a specified store file to the specified family. * If the source file is on the same different file-system is moved from the * source location to the destination location, otherwise is copied over. * * @param familyName Family that will gain the file * @param srcPath {@link Path} to the file to import * @param seqNum Bulk Load sequence number * @return The destination {@link Path} of the bulk loaded file * @throws IOException */ Path bulkLoadStoreFile(final String familyName, Path srcPath, long seqNum) throws IOException { // Copy the file if it's on another filesystem FileSystem srcFs = srcPath.getFileSystem(conf); FileSystem desFs = fs instanceof HFileSystem ? ((HFileSystem)fs).getBackingFs() : fs; // We can't compare FileSystem instances as equals() includes UGI instance // as part of the comparison and won't work when doing SecureBulkLoad // TODO deal with viewFS if (!srcFs.getUri().equals(desFs.getUri())) { LOG.info("Bulk-load file " + srcPath + " is on different filesystem than " + "the destination store. Copying file over to destination filesystem."); Path tmpPath = createTempName(); //不是同一文件系统,则拷贝 FileUtil.copy(srcFs, srcPath, fs, tmpPath, false, conf); LOG.info("Copied " + srcPath + " to temporary path on destination filesystem: " + tmpPath); srcPath = tmpPath; } return commitStoreFile(familyName, srcPath, seqNum, true); }
如果不是一个文件系统,那么就调用:
FileUtil.copy(...)
进行拷贝。
最终进行move操作的其实是一个rename操作:
/** * Move the file from a build/temp location to the main family store directory. * @param familyName Family that will gain the file * @param buildPath {@link Path} to the file to commit. * @param seqNum Sequence Number to append to the file name (less then 0 if no sequence number) * @param generateNewName False if you want to keep the buildPath name * @return The new {@link Path} of the committed file * @throws IOException */ private Path commitStoreFile(final String familyName, final Path buildPath, final long seqNum, final boolean generateNewName) throws IOException { Path storeDir = getStoreDir(familyName); if(!fs.exists(storeDir) && !createDir(storeDir)) throw new IOException("Failed creating " + storeDir); String name = buildPath.getName(); if (generateNewName) { name = generateUniqueName((seqNum < 0) ? null : "_SeqId_" + seqNum + "_"); } Path dstPath = new Path(storeDir, name); if (!fs.exists(buildPath)) { throw new FileNotFoundException(buildPath.toString()); } LOG.debug("Committing store file " + buildPath + " as " + dstPath); // buildPath exists, therefore not doing an exists() check. //在这里进行rename if (!rename(buildPath, dstPath)) { throw new IOException("Failed rename of " + buildPath + " to " + dstPath); } return dstPath; }
rename函数如下:
/** * Renames a directory. Assumes the user has already checked for this directory existence. * @param srcpath * @param dstPath * @return true if rename is successful. * @throws IOException */ boolean rename(Path srcpath, Path dstPath) throws IOException { IOException lastIOE = null; int i = 0; do { try { return fs.rename(srcpath, dstPath); } catch (IOException ioe) { lastIOE = ioe; if (!fs.exists(srcpath) && fs.exists(dstPath)) return true; // successful move // dir is not there, retry after some time. sleepBeforeRetry("Rename Directory", i+1); } } while (++i <= hdfsClientRetriesNumber); throw new IOException("Exception in rename", lastIOE); }
发表评论
-
新版hadoop MultipleOutputs多文件输出
2015-03-11 14:22 3518转载请标明出处:http://blackwing.iteye. ... -
解决直接读HFile时因表数据写入而导致文件目录变化问题
2015-03-02 18:22 1529转载请标明出处:http://blackwing.iteye. ... -
解决Exception from container-launch: ExitCodeException exitCode=1的另类错误
2014-08-21 18:18 23858转载请标明出处:http://blackwing.iteye. ... -
Hadoop生成HFile直接入库HBase心得
2013-12-18 16:15 5262转载请标明出处:http://blackwing.iteye. ... -
NullPointerException SerializationFactory.getSerializer解决
2013-12-04 17:30 1638转载请标明出处:http://blackwing.iteye. ... -
Hadoop的Text类getBytes字节数据put到HBase后有多余字符串问题
2013-11-21 15:53 2140转载请标明出处:http://blackwing.iteye. ... -
编译YCSB 解决Not a host:port pair问题
2013-09-18 17:25 1987转载请标明出处:http://blackwing.iteye. ... -
HBase使用SNAPPY压缩遇到compression test fail问题解决
2013-09-18 10:51 10910转载请标明出处:http://blackwing.iteye. ... -
HBase表增加snappy压缩
2013-09-13 17:54 4370转载请标明来源:http://blackwing.iteye. ... -
hadoop 1.0.3增加snappy压缩
2013-09-11 17:27 1830转载请标明来源:http://blackwing.iteye. ... -
把hadoop的metrics加入ganglia监控
2013-09-04 17:02 1583hadoop的metrics加入ganglia其实是很简单的, ... -
ROOT不在线的另外一种原因及解决办法
2013-07-29 14:28 1508转载请声明出处:http://blackwing.iteye. ... -
enable和disable表时出现表未disable/enable异常处理
2013-07-29 11:42 4975转载请标明出处:http://blackwing.iteye. ... -
MultithreadedMapper多线程读取数据
2013-04-27 15:51 0由于当前业务需求读取HBase表时,会存在数据倾斜,大部分数据 ... -
shuffle & sort解释
2013-04-16 17:31 1248转载请标明出处:http://blackwing.iteye. ... -
hadoop的 IncompatibleClassChangeError
2013-02-06 17:26 2085开发环境中,使用的是官方版的hadoop 1.0.1版,而集群 ... -
HBase的start key和end key疑惑
2013-02-05 15:57 4932转载请标明来源:http://blackwing.iteye. ... -
HBase的coprocessor分拆HRegion
2013-02-04 15:15 3329引用转载请注明出处,文章链接:http://blackwing ... -
分拆TableSplit 让多个mapper同时读取
2013-01-06 18:13 2603默认情况下,一个region是一个tableSplit,对应一 ... -
GET查询HBase无结果时 Result的size也不为空
2012-11-28 11:15 2074用Get查询hbase某个row时,就算该row不存在,但还是 ...
相关推荐
本项目“copy_move_forgery_detection-master.zip_copy move_copy move matla”专注于利用MATLAB实现加速版的Copy-Move伪造检测算法,以提升检测效率和准确性。 MATLAB,全称Matrix Laboratory,是一款强大的数学...
DWT-PCA (EVD) Based Copy-move Image Forgery Detection
这篇文章的标题为《Detecting copy-move forgery under affine transforms for image.pdf》,而描述表明这是一篇关于图像质量评价的文章,研究者可以免费下载。该文章的标签为“image quality access”,说明其内容...
"CMFD_PM_code.rar"这个压缩包文件,标题中的"TAMPERING_copy-move_copy_move_篡改_篡改检测"表明它包含的是关于“copy-move”类型的篡改检测算法或工具。这种篡改类型是指图像或文件中的某一部分被复制并粘贴到同一...
copy move forgery detection matlab program mand source code
在当前信息时代,数字图像的篡改检测技术对于维护网络信息的真实性与完整性显得尤为重要。本文介绍了一种新颖的篡改检测方法,该方法基于KAZE特征,并且能够有效抵抗平滑纹理带来的检测难题。通过理解与分析给定文件...
标题中的“快速copy&move处理文件”指的是使用特定软件来高效地进行文件的复制和移动操作,这在处理大量数据时尤其有用。这种工具通常优化了底层的文件传输机制,以实现比系统自带功能更快的速度。 描述部分提到,...
基于局部Hu矩的图像Copy-Move篡改取证方法 本文提出了一种基于图像矩哈希的篡改检测算法,以检测最常见的图像Copy-Move篡改。该方法将检测图像分为若干相互重叠的区域块,提取各图像块的Hu矩,生成哈希序列,作为该...
综上所述,"copy move forensics" 和 "moveii2" 可能是特定的复制移动检测项目或研究系列,而"区域定位"强调了算法的重点在于确定图像中被篡改的精确位置。通过对Zernike矩的深入理解和应用,我们可以有效地揭示图像...
本项目专注于“MATLAB图像copy-move检测”,这是一种常用的图像篡改检测方法。 Copy-Move篡改是指图像中的某个区域被复制并粘贴到图像的另一位置,以掩盖或伪造信息。在MATLAB中实现这种检测,主要涉及以下几个关键...
21. `/junction`:复制junction点,而不是其下的内容。 22. `/symlink`:用符号链接代替实际文件进行复制。 使用示例: - 将`永恒之塔`文件夹从网络共享位置复制到E盘,使用`sync`命令和自动关闭选项:`fastopy.exe...
高通 Golden Copy 验证方案使用说明 Golden Copy 验证方案是一种在高通平台上验证 Golden Copy 的方法,该方案旨在确保 Golden Copy 的正确性和可靠性。下面是对 Golden Copy 验证方案的详细说明: 一、 目的 ...
而“可整合到右键菜单”意味着用户可以通过鼠标右键直接调用FastCopy,无需打开软件界面,极大地提高了工作效率。小巧方便的特性则意味着FastCopy安装包小,占用系统资源少,对电脑性能影响微乎其微,无论是老旧机器...
《iCopy解码软件详解与应用》 在数字化办公环境中,高效的数据传输和处理是提升工作效率的关键。iCopy解码软件作为一个专为iCopy设备设计的辅助工具,它旨在帮助用户更加便捷地处理由iCopy设备捕获的各类数据,从而...
如果在复制过程中遇到错误,FastCopy会尝试恢复或者跳过错误文件,避免因单个文件问题而中断整个复制任务。 在安全方面,FastCopy也有出色的表现。它支持在复制前先校验源文件的MD5或CRC值,确保目标文件与源文件的...
在日常工作中,我们经常需要处理大量的数据迁移,而系统自带的复制功能可能无法满足对速度的需求,FastCopy正是为此而生。这款软件通过优化文件传输算法,减少了在复制或移动大文件时可能出现的等待时间。 FastCopy...