我们可能会有一个疑问,hadoop是一种分布式存储和分布式计算的一个开源项目,而Mapreduce 也是基于此的一个分布式计算的模型,而基于分布式存储的列存储数据库Hbase应该是我们要讨论的话题,为什么会说到Mysql
其实Hbase 存储的数据时一些量大简单而有规则的数据,但关系型数据库也有他的优势,那就是提供了友好的方面我们操作的用户接口,我们可以实现简单的查询。并且数据本身并不大,而我们又需要对此数据进行各种复杂的分析和查询,那关系型数据库则帮我们实现。
从Hbase map出数据如何写入Mysql 从网上查估计也能查询到,但是可能不太友好,我做了一个简单的例子,贴出来供大家参考,希望对大家有些帮助。
习惯从main 方法谈起 看代码:
public static void main(String[] args) throws Exception {
Configuration conf = HBaseConfiguration.create();
//在此我用到了 旧的API ,因为我从资料上找不出新的API中有支持DBOutputFormat 的接口或者方法
//希望大家 如果了解这方面的 给我提出意见 我也了解一下新的API中如何实现此功能
JobConf job = new JobConf(conf,CopyHbaseData2Mysql.class);
job.setJarByClass(CopyHbaseData2Mysql.class);
//设定Job 输入类型为 TableInputFormat.class
job.setInputFormat(TableInputFormat.class);
//旧的API 没有 设置输入表的地方,如果看过Hadoop TableInputFormat 的源码 就可以看到下面两个参数 可以设定 输入表 和查询hbase 的columns
job.set("mapred.input.dir", "hbase_table");
job.set("hbase.mapred.tablecolumns", "info:column");//查询column
//下面两个方法是map的输入的key和value 类型
job.setMapOutputKeyClass(ImmutableBytesWritable.class);
job.setMapOutputValueClass(ImmutableBytesWritable.class);
//设定 输入类型为 DBOutputFormat.class
job.setOutputFormat(DBOutputFormat.class);
// 下面是配置 mysql 驱动以及 用户名密码
//此时一定要注意不论是编译还是 打包,都必须把mysql的驱动加入的环境变量中
//此处还要注意的是 192.168.10.10如果是在本机跑,一定要注意你的mysql 用户是否支持远程访问,不然 会拒绝连接
DBConfiguration.configureDB(job, "com.mysql.jdbc.Driver", "jdbc:mysql://192.168.10.10/test", "username", "password");
//下面是 输入表以及相应字段的设定
String[] fields = {"id","username"};
DBOutputFormat.setOutput(job, "user_info", fields);
//设定Map和Reduce
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
//run
JobClient.runJob(job);
}
其实写到这基本上就把具体的流程全部写出来了,候选的map 和reduce 根据大家相关的业务大家自己组织,但是还有一个重要的概念,此处的
我们的输入 为 :DBWritable 为此类为一个接口,并没有实现,所以我们要使用的时候必须 实现这个接口,去实现自己的 Writable类
先不做介绍了。
后续我会把实现DBWritable 的类也贴出来,如果认为有需要的话
贴出来 欢迎大家板砖,本人也是学习没多久,希望大家踊跃提意见,也好提高自己
分享到:
相关推荐
数据迁移的核心在于编写Java代码,将MySQL中的数据读取并写入到HBase中。这里我们使用JDBC连接MySQL,使用HBase Java API操作HBase。以下是一个简单的示例: ```java import org.apache.hadoop.conf.Configuration;...
- 编写代码,使用Table和Put对象将数据从本地文件读取并写入到HBase表中。 - 编译并运行Java程序,完成数据导入。 在整个过程中,确保所有组件的版本兼容,例如HBase与Hadoop、Sqoop与Hadoop之间的版本匹配。同时...
在这个Demo中,你将找到如何设计Dao层来实现Mysql到HBase的数据迁移。 1. **数据模型转换**:Mysql使用表格形式存储数据,每行数据有固定的列,而HBase则以行键(Row Key)、列族(Column Family)、列限定符...
标题中的“hadoop的mapreduce把oracle/mysq导入到hbase和hdfs中的程序”指的是一项数据处理任务,利用Hadoop的MapReduce框架,将关系型数据库(如Oracle和MySQL)中的数据高效地迁移至分布式存储系统HDFS(Hadoop ...
### HBase海量数据全量导入方法详解 在大数据领域,HBase作为一款分布式、...通过深入理解HBase的数据结构和Hadoop生态的集成方式,我们可以更好地设计和实施大数据导入方案,充分发挥HBase在大数据处理领域的优势。
关系型数据库(如MySQL、Oracle、SQL Server等)与非关系型数据库(如Hbase)在数据存储和处理上有着显著的区别。关系型数据库遵循ACID(原子性、一致性、隔离性和持久性)原则,适合结构化数据的存储,而Hbase作为...
2. **HBaseBulkLoad**:HBase提供的工具,允许大量数据通过HFile格式批量加载,提高效率。 3. **MapReduce**:Hadoop的并行处理框架,可用于分布式数据转换和加载。 4. **HBase Coprocessors**:可以在HBase服务器...
在电影推荐项目中,这些步骤都会涉及,例如从各种来源收集用户数据,清洗去除异常值,存储到Hadoop系统,通过MapReduce进行分析,最后将结果展示给用户。 8. **数据挖掘**:在推荐系统中,数据挖掘是寻找用户兴趣...
- HBase主要通过Java API或类似HBase shell的工具进行操作,查询功能相对简单,但在大数据处理中可以配合MapReduce或Spark进行高效计算。 6. 应用场景: - RDBMS适用于需要事务处理、复杂查询和数据一致性的业务...
这个示例,"MR_HBase-Hadoop中的MapReduce使用示例,输入(DBInputFormat),输出(DBOutputFormat)",主要展示了如何利用MapReduce与HBase进行交互,进行数据的读取和写入。下面将详细介绍相关的知识点。 1. **...
本文主要介绍了一种针对海量天文数据的分布式MySQL锥形检索的研究方法,使用数据库中间件技术,通过分库分表的方式将数据存储到分布式数据库集群中,并通过动态索引工具建立伪球面索引,以此来满足锥形检索的需求。...
【标题】:“中国HBase技术社区第4届-MeetUp-上海站_基于HBase实时数仓探索实践.pptx...通过上述实践,上海久耶供应链成功地运用HBase和相关技术构建了实时数仓,满足了互联网行业的实时数据需求,提高了业务决策效率。
本程序的标题是"读写数据库数据的mr程序",这意味着我们将探讨如何利用MapReduce来从MySQL数据库读取数据,并将这些数据存储到HBASE这种分布式数据库中。这个过程通常被称为ETL(Extract, Transform, Load)操作,是...
2. **MySQL到HBase**: - 配置HBase:确保HBase运行正常,创建相应的表结构。 - 导入数据:使用Sqoop命令,指定HBase的表名和列族,将MySQL数据导入HBase。 3. **MySQL到Hive**: - 配置Hive:创建与MySQL表结构...
而当需要将数据输出到MySQL数据库时,MapReduce作业则可能包含一个Reducer类,它将处理后的结果转换为适合存储到MySQL的数据格式,并写入数据库中。 文档还提到了一些实用的参考链接和编辑信息,以及对作者的支持...
- 数据导入HBase:通过Java API编写MapReduce程序,Map阶段清洗数据,Reducer阶段将数据写入HBase。注意,如果数据导入不完整,可能是因为rowkey设计问题,可以考虑使用HBase的export工具进行导入。 - 数据导入...
MapReduce可以用来批量导入数据到HBase,或者对HBase中的数据进行批处理分析。在代码中,可能会有相关的示例展示如何使用MapReduce与HBase API交互,进行数据的读取、写入和更新。 最后,提到的关系型数据库通常指...
2. Sqoop会读取HDFS中的数据,创建对应的SQL语句,并通过MapReduce作业执行,将数据写入MySQL。 ### 四、创建job 创建Sqoop作业是为了持久化导入或导出的配置,这样可以在将来重复使用而无需每次都手动输入参数。...
这种方式下,Hive首先执行MapReduce作业生成结果,然后通过HBase的API将结果写入相应的表中。这有助于提高数据的读取速度,尤其是在需要频繁查询同一组数据的情况下。 综上所述,Hive作为一种基于Hadoop的数据仓库...
"大数据76道面试题及答案" 本文档包含了76道大数据...Sqoop在导入数据到MySQL中,如何不重复导入数据,可以通过增加参数来实现。如果存在数据问题,Sqoop可以通过 FAILED java.util.NoSuchElementException来处理。