请教如何在hadoop获取数据

请教如何在hadoop获取数据,第1张

我们的一些应用程序中,常常避免不了要与数据进行交互,而在我们的hadoop中,有时候也需要和数据库进行交互,比如说,数据分析的结果存入数据库,

或者是,读取数据库的信息写入HDFS上,不过直接使用MapReduce *** 作数据库,这种情况在现实开发还是比较少,一般我们会采用Sqoop来进行数

据的迁入,迁出,使用Hive分析数据集,大多数情况下,直接使用Hadoop访问关系型数据库,可能产生比较大的数据访问压力,尤其是在数据库还是单机

的情况下,情况可能更加糟糕,在集群的模式下压力会相对少一些。

那么,今天散仙就来看下,如何直接使用Hadoop1.2.0的MR来读写 *** 作数据库,hadoop的API提供了DBOutputFormat和

DBInputFormat这两个类,来进行与数据库交互,除此之外,我们还需要定义一个类似JAVA

Bean的实体类,来与数据库的每行记录进行对应,通常这个类要实现Writable和DBWritable接口,来重写里面的4个方法以对应获取每行记

您好,很高兴为您解答。

通过Map/Reduce进行批处理递送到Apache Hadoop仍然是中枢环节。,但随着要从“超思维速度“分析方面获取竞争优势的压力递增,因此Hadoop(分布式文件系统)自身经历重大的发展。科技的发展允许实时查询,如Apache Drill,Cloudera Impala和Stinger Initiative正脱颖而出,新一代的资源管理Apache YARN 支持这些。

为了支持这种日渐强调实时性 *** 作,发布一个新MySQL Applier for Hadoop(用于Hadoop的MySQL Applier)组件。它能够把MySQL中变化的事务复制到Hadoop / Hive / HDFS。Applier 组件补充现有基于批处理Apache Sqoop的连接性。

这个组件(MySQL Applier for Hadoop)的复制是通过连接MySQL主服务,一旦二进制日志被提交,就读取二进制日志事务,并且把它们写到HDFS.

这个组件使用libhdfs提供的API,一个C库 *** 作HDFS中的文件。这库由Hadoop版本预编译生成的。

它连接MySQL主服务读二进制日志,然后提取发生在主服务上的行插入事件,解码事件,提取插入到行的每个字段的数据,并使用满意的处理程序得到被要求的格式数据。把它追加到HDFS 中一个文本文件。

数据库被映射为单独的目录,它们的表映射为子目录,保存在数据仓库目录。每个表的数据被写到Hive/ HDFS中文本文件(称为datafile1.txt)。数据可以用逗号格式分隔或其他格式,那可用命令行参数来配置的。

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

实际场景中,我们经常需要通过ftp协议把不同数据源的文件统一汇入到hdfs数据中心,经过实践,有以下的三种方法,分别列出其优缺点及适用场景。

1、 先把文件ftp到本地,然后用命令hdfsdfs –put [local_path] [hdfs_path]

优点:文件在本地可以进行本地化的一系列 *** 作后,再放回hdfs中

缺点:文件传输经过两层,并且从源服务器到本地提取是单机串行,比较消耗时间。

适用于文件放入hfds前需要预处理的情景,如:.zip压缩文件不被hadoop支持的,所以我们可以先在本地转压缩方式然后再放入hdfs中。

2、 hdfs dfs –cp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]

优点:简单,提取速度快

缺点:CLI执行不会显示进度

适用场景:适用于小文件的ftp拷贝。

3、 hadoop distcp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]

优点:简单,能显示拷贝进度,并且是分布式提取的,数据比较快。

缺点: 如果拷贝的文件是不断有其他程序写入,会报错,因为该命令最后要对数据进行checksum导致两边不一致,当然,该命令是主要用于集群间拷贝的。

适用场景:大量文件或大文件的拷贝。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10829641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存