在日常的使用过程中,可能经常需要将一个集群中hbase的数据迁移到或者拷贝到另外一个集群中,这时候,可能会出很多问题
以下是我在处理的过程中的一些做法和处理方式。
前提,两个hbase的版本一直,否则可能出现不可预知的问题,造成数据迁移失败
当两个集群不能通讯的时候,可以先将数据所在集群中hbase的数据文件拷贝到本地
具体做法如下:
在hadoop目录下执行如下命令,拷贝到本地文件。 bin/hadoop fs -copyToLocal /hbase/tab_keywordflow /home/test/xiaochenbak
然后你懂得,将文件拷贝到你需要的你需要迁移到的那个集群中,目录是你的表的目录,
如果这个集群中也有对应的表文件,那么删除掉,然后拷贝。
/bin/hadoop fs -rmr /hbase/tab_keywordflow /bin/hadoop fs -copyFromLocal /home/other/xiaochenbak /hbase/tab_keywordflow 此时的/home/other/xiaochenbak为你要迁移到数据的集群。
重置该表在.META.表中的分区信息
bin/hbase org.jruby.Main /home/other/hbase/bin/add_table.rb /hbase/tab_keywordflow
/home/other/hbase/bin/add_table.rb为ruby脚本,可以执行,脚本内容如下:另存为add_table.rb即可
# # Copyright 2009 The Apache Software Foundation # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Script adds a table back to a running hbase. # Currently only works on if table data is in place. # # To see usage for this script, run: # # ${HBASE_HOME}/bin/hbase org.jruby.Main addtable.rb # include Java import org.apache.hadoop.hbase.util.Bytes import org.apache.hadoop.hbase.HConstants import org.apache.hadoop.hbase.regionserver.HRegion import org.apache.hadoop.hbase.HRegionInfo import org.apache.hadoop.hbase.client.HTable import org.apache.hadoop.hbase.client.Delete import org.apache.hadoop.hbase.client.Put import org.apache.hadoop.hbase.client.Scan import org.apache.hadoop.hbase.HTableDescriptor import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.util.FSUtils import org.apache.hadoop.hbase.util.Writables import org.apache.hadoop.fs.Path import org.apache.hadoop.fs.FileSystem import org.apache.commons.logging.LogFactory # Name of this script NAME = "add_table" # Print usage for this script def usage puts 'Usage: %s.rb TABLE_DIR [alternate_tablename]' % NAME exit! end # Get configuration to use. c = HBaseConfiguration.new() # Set hadoop filesystem configuration using the hbase.rootdir. # Otherwise, we'll always use localhost though the hbase.rootdir # might be pointing at hdfs location. c.set("fs.default.name", c.get(HConstants::HBASE_DIR)) fs = FileSystem.get(c) # Get a logger and a metautils instance. LOG = LogFactory.getLog(NAME) # Check arguments if ARGV.size < 1 || ARGV.size > 2 usage end # Get cmdline args. srcdir = fs.makeQualified(Path.new(java.lang.String.new(ARGV[0]))) if not fs.exists(srcdir) raise IOError.new("src dir " + srcdir.toString() + " doesn't exist!") end # Get table name tableName = nil if ARGV.size > 1 tableName = ARGV[1] raise IOError.new("Not supported yet") elsif # If none provided use dirname tableName = srcdir.getName() end HTableDescriptor.isLegalTableName(tableName.to_java_bytes) # Figure locations under hbase.rootdir # Move directories into place; be careful not to overwrite. rootdir = FSUtils.getRootDir(c) tableDir = fs.makeQualified(Path.new(rootdir, tableName)) # If a directory currently in place, move it aside. if srcdir.equals(tableDir) LOG.info("Source directory is in place under hbase.rootdir: " + srcdir.toString()); elsif fs.exists(tableDir) movedTableName = tableName + "." + java.lang.System.currentTimeMillis().to_s movedTableDir = Path.new(rootdir, java.lang.String.new(movedTableName)) LOG.warn("Moving " + tableDir.toString() + " aside as " + movedTableDir.toString()); raise IOError.new("Failed move of " + tableDir.toString()) unless fs.rename(tableDir, movedTableDir) LOG.info("Moving " + srcdir.toString() + " to " + tableDir.toString()); raise IOError.new("Failed move of " + srcdir.toString()) unless fs.rename(srcdir, tableDir) end # Clean mentions of table from .META. # Scan the .META. and remove all lines that begin with tablename LOG.info("Deleting mention of " + tableName + " from .META.") metaTable = HTable.new(c, HConstants::META_TABLE_NAME) tableNameMetaPrefix = tableName + HConstants::META_ROW_DELIMITER.chr scan = Scan.new((tableNameMetaPrefix + HConstants::META_ROW_DELIMITER.chr).to_java_bytes) scanner = metaTable.getScanner(scan) # Use java.lang.String doing compares. Ruby String is a bit odd. tableNameStr = java.lang.String.new(tableName) while (result = scanner.next()) rowid = Bytes.toString(result.getRow()) rowidStr = java.lang.String.new(rowid) if not rowidStr.startsWith(tableNameMetaPrefix) # Gone too far, break break end LOG.info("Deleting row from catalog: " + rowid); d = Delete.new(result.getRow()) metaTable.delete(d) end scanner.close() # Now, walk the table and per region, add an entry LOG.info("Walking " + srcdir.toString() + " adding regions to catalog table") statuses = fs.listStatus(srcdir) for status in statuses next unless status.isDir() next if status.getPath().getName() == "compaction.dir" regioninfofile = Path.new(status.getPath(), HRegion::REGIONINFO_FILE) unless fs.exists(regioninfofile) LOG.warn("Missing .regioninfo: " + regioninfofile.toString()) next end is = fs.open(regioninfofile) hri = HRegionInfo.new() hri.readFields(is) is.close() # TODO: Need to redo table descriptor with passed table name and then recalculate the region encoded names. p = Put.new(hri.getRegionName()) p.add(HConstants::CATALOG_FAMILY, HConstants::REGIONINFO_QUALIFIER, Writables.getBytes(hri)) metaTable.put(p) LOG.info("Added to catalog: " + hri.toString()) end
好了,以上就是我的做法,如何集群键可以通信,那就更好办了,相信你懂得,scp
相关推荐
HBase集群通常会与Hadoop集群设置在同一个集群中,这意味着HBase使用的分布式文件系统(HDFS)就是生成HFile文件的MapReduce任务所在的同一集群。这样设置的好处是减少了数据迁移过程中的网络传输,并且可以利用...
本文档详细记录了一次从自建Hadoop集群到华为云MRS(Managed Service for Big Data)的大规模数据迁移项目,涉及到了Hive、Kudu和HBase这三种不同类型的数据存储系统。以下是针对这些系统的迁移策略、流程和解决方案...
而HBase是一款基于Hadoop的分布式、高性能、列式存储的NoSQL数据库,适用于实时查询和分析大规模数据。 1. **简介** 在部署Hadoop和HBase时,我们需要构建一个可靠的分布式环境,确保数据的高可用性和容错性。...
它能够有效地管理Hadoop集群中的各种资源和服务,例如Hadoop NameNode管理和HBase的Master选举及服务器间的通信。 - **Zookeeper的作用**: - **集群管理**:确保集群中服务的高可用性,例如通过选举机制确定当前...
### HBase基于快照的数据迁移 #### 前言 HBase是一款开源的、分布式的、面向列的数据库系统,其设计目标是为了处理大规模数据集(TB甚至PB级别)。随着业务的发展,数据量逐渐增大,可能需要将数据从一个集群迁移...
- **数据迁移与同步:** 将现有数据迁移到HDFS中,并在Hbase中建立相应的表结构。 - **系统优化:** 根据业务需求调整HDFS和Hbase的参数配置,确保性能最优。 **3. 应用场景** - **大数据分析:** 结合Hadoop的...
在HBase这样的分布式数据库系统中,数据迁移是一个常见的任务,特别是在集群扩展、故障恢复或版本升级等场景下。本文档详细介绍了如何在HBase 0.94.1版本上手动进行数据迁移,主要涉及以下几个关键步骤: 1. **数据...
Sqoop则提供了与关系型数据库(RDBMS)的桥梁,方便传统数据库数据迁移到HBase。 总的来说,HBase是大数据和云计算环境中解决大规模结构化数据存储和处理问题的重要工具。通过深入理解其技术原理和使用方法,开发者...
Hadoop是大数据处理的核心组件,它由两个主要集群构成:HDFS(Hadoop Distributed File System)集群和YARN(Yet Another Resource Negotiator)集群。HDFS负责大规模数据的存储,其中包含NameNode、DataNode和...
【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第11期_HBase简介及安装_V1.0 共21页.pdf】这篇文档主要介绍了HBase这一大数据处理的重要组件,以及其在Hadoop生态系统中的角色。HBase是一个基于列族的...
首先,当需要进行HBase集群迁移时,通常是因为硬件升级、灾难恢复或数据中心迁移等原因。在这种情况下,一种常见的方法是使用Hadoop的DistCp(Distributed Copy)工具。然而,值得注意的是,这种迁移方式需要停止源...
首先,爬取滴滴出行的相关数据,然后通过 HDFS 将数据上传至 Hadoop 集群,接着使用 Hbase 存储这些原始数据,确保数据的分布式存储和高效检索。 3.2 数据分析与转换 在 Hbase 中的数据导入到 Hive 表后,利用 ...
它主要用于解决Hadoop集群中的以下问题: 1. **NameNode高可用**:Hadoop的HDFS组件依赖于ZooKeeper来实现NameNode的高可用性。通过在ZooKeeper上维护一个活跃的NameNode列表,可以实现在主NameNode宕机时自动切换...
在构建大数据处理环境时,Hadoop集群是核心基础,而`zookeeper3.4.12+hbase1.4.4+sqoop1.4.7+kafka2.10`这一组合则提供了集群中不可或缺的组件。让我们逐一探讨这些组件的功能、作用以及它们之间的协同工作。 **...
Sqoop是一个用于在Hadoop和传统关系型数据库之间进行数据迁移的工具。通过Sqoop,我们可以将结构化的数据导入到Hadoop的HDFS中,或者将Hadoop中的数据导出到关系数据库。安装Sqoop需要确保已安装Hadoop和JDBC驱动,...
1. **同版本集群迁移**:如果新旧集群版本相同,则可以直接使用`hadoop distcp`命令进行数据复制。例如,从旧集群`namenodeip:9000`复制数据到新集群的命令如下: ```bash hadoop distcp hdfs://namenodeip:9000/...
此外,还需要进一步配置其他必要的文件,如 `hdfs-site.xml`, `mapred-site.xml` 和 `yarn-site.xml` 等,以便启动Hadoop集群。 #### 二、HBase安装 安装完Hadoop之后,下一步是安装HBase。 1. **下载并解压HBase*...
它可以导入导出数据,实现批处理操作,将结构化数据高效地迁移到Hadoop集群或者从Hadoop迁出。 5. **Flume**:日志收集、聚合和传输的系统,设计用于高可用性和可靠性,可以将数据从各种源(如Web服务器日志)收集...
- **Sqoop**:为HBase提供了便捷的数据导入功能,方便将关系型数据库中的数据迁移到HBase中。 #### HBase 的访问接口 为了便于用户访问和操作HBase中的数据,HBase提供了多种访问接口: 1. **Native Java API**:...
而Hive则是一个数据仓库工具,它允许用户使用SQL-like语言(HQL)对Hadoop集群上的大量数据进行分析和查询。 标题“hbase导出csv,文本,html文件”指的是从HBase中导出数据并转换为常见的文本格式,如CSV、文本和...