当前位置:首页 » 操作系统 » hdfs写数据库

hdfs写数据库

发布时间: 2022-05-03 04:42:28

❶ 怎么通过sqoop将hdfs上数据导入到mysql

sqoop是一个能把数据在关系型数据库和HDFS之间互相传输的工具。在这里,我写一下用java 程序来实现sqoop把数据从HDFS写入到MYSQL。
在接触sqoop之前,我自己写了一个传输类来实现数据从HDFS到MYSQL。这里简单说一下时间的思想:
1、在MYSQL中创建一个参数表A,用来记录要传输的表的表名B和字段。
2、HDFS上的数据的格式和MYSQL中参数表A中B表的字段的数量一样。
3、从MYSQL的参数表A中,读取要传输的表B。把这些字段拼凑成一个insert语句,例如
,拼凑为insert into b(column1,column2..) values(value1,value2...)
4、从HDFS相应的目录逐行读取数据,通过JDBC,把数据批量导入到MYSQL的B表中。
我现在用sqoop来代替原来传输的那个功能。先做一下准备工作:
1、hadoop的每个节点下lib文件夹中要有mysql的jar包和sqoop的jar包。
2、在HDFS的某个目录上的数据格式和MYSQL相应的表中的字段数量一致。
实现类如下:
package sqoop;
import java .util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.sqoop.Sqoop;
import org.apache.sqoop.tool.ExportTool;
/**
* 用SQOOP来把数据从HDFS导入到MYSQL。
* */
public class Test {
public static void main(String[] args) {
List<String> generatedJarsList = new ArrayList<String>();
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://master:9000");
conf.set("hadoop.job.ugi", "hadooper,hadoopgroup");
conf.set("mapred.job.tracker", "master:9001");
ArrayList<String> list = new ArrayList<String>(); //定义一个list
list.add("--table");
list.add("a_baat_client"); //mysql中的表。将来数据要导入到这个表中。
list.add("--export-dir");
list.add("/tmp/datathree/"); //hdfs上的目录。这个目录下的数据要导入到a_baat_client这个表中。
list.add("--connect");
list.add("jdbc:mysql://192.168.1.10:3306/report"); //mysql的链接
list.add("--username");
list.add("root"); //mysql的用户名
list.add("--password");
list.add("root"); //mysql的密码
list.add("--lines-terminated-by");
list.add("\\n"); //数据的换行符号
list.add("-m");
list.add("1");//定义maprece的数量。
String[] arg = new String[1];
ExportTool exporter = new ExportTool();
Sqoop sqoop = new Sqoop(exporter);
sqoop.setConf(conf);
arg = list.toArray(new String[0]);
int result = Sqoop.runSqoop(sqoop, arg);
System.out.println("res:" + result); //打印执行结果。
}
}
这个导出类执行过程中,可以在浏览器中看一下http://master:50030页面。会发现导出数据也是一个把任务转换为maprece执行的过程。
当然,上面的java代码,也可以用命令行来实现。命令如下:
bin/sqoop export --connect jdbc:mysql://192.168.1.10:3306/report \
--table a_baat_client --username root --password root \
--export-dir /tmp/datathree/ -m 1
关于sqoop把数据从HDFS导入到MYSQL就说这么多。把数据从HIVE导入到MYSQL,其实可以理解为把HIVE表所对应的HDFS路径的数据导入到MYSQL,这里就不多说了。

❷ hadoop是做什么的

提供海量数据存储和计算的,需要java语言基础。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

特点

1、快照支持在一个特定时间存储一个数据拷贝,快照可以将失效的集群回滚到之前一个正常的时间点上。HDFS已经支持元数据快照。

2、HDFS的设计是用于支持大文件的。运行在HDFS上的程序也是用于处理大数据集的。这些程序仅写一次数据,一次或多次读数据请求,并且这些读操作要求满足流式传输速度。

HDFS支持文件的一次写多次读操作。HDFS中典型的块大小是64MB,一个HDFS文件可以被切分成多个64MB大小的块,如果需要,每一个块可以分布在不同的数据节点上。

3、阶段状态:一个客户端创建一个文件的请求并不会立即转发到名字节点。实际上,一开始HDFS客户端将文件数据缓存在本地的临时文件中。

❸ hdfs的特点有哪些

hdfs的特点
一、hdfs的优点
1.支持海量数据的存储:一般来说,HDFS存储的文件可以支持TB和PB级别的数据。
2.检测和快速应对硬件故障:在集群环境中,硬件故障是常见性问题。因为有上千台服务器连在一起,故障率很高,因此故障检测和自动恢复hdfs文件系统的一个设计目标。假设某一个datanode挂掉之后,因为数据是有备份的,还可以从其他节点里找到。namenode通过心跳机制来检测datanode是否还存活。
3.流式数据访问:(HDFS不能做到低延迟的数据访问,但是HDFS的吞吐量大)=》Hadoop适用于处理离线数据,不适合处理实时数据。HDFS的数据处理规模比较大,应用一次需要大量的数据,同时这些应用一般都是批量处理,而不是用户交互式处理。应用程序能以流的形式访问数据库。主要的是数据的吞吐量,而不是访问速度。访问速度最终是要受制于网络和磁盘的速度,机器节点再多,也不能突破物理的局限。
4.简化的一致性模型:对于外部使用用户,不需要了解hadoop底层细节,比如文件的切块,文件的存储,节点的管理。一个文件存储在HDFS上后,适合一次写入,多次读取的场景。因为存储在HDFS上的文件都是超大文件,当上传完这个文件到hadoop集群后,会进行文件切块,分发,复制等操作。如果文件被修改,会导致重新触发这个过程,而这个过程耗时是最长的。所以在hadoop里,2.0版本允许数据的追加,单不允许数据的修改。
5.高容错性:数据自动保存多个副本,副本丢失后自动恢复。可构建在廉价的机器上,实现线性扩展。当集群增加新节点之后,namenode也可以感知,将数据分发和备份到相应的节点上。
6.商用硬件:Hadoop并不需要运行在昂贵且高可靠的硬件上。它是设计运行在商用硬件(在各种零售店都能买到的普通硬件)的集群上的,因此至少对于庞大的集群来说,节点故障的几率还是非常高的。HDFS遇到上述故障时,被设计成能够继续运行且不让用户察觉到明显的中断。
二、HDFS缺点(局限性)
1、不能做到低延迟数据访问:由于hadoop针对高数据吞吐量做了优化,牺牲了获取数据的延迟,所以对于低延迟数据访问,不适合hadoop。对于低延迟的访问需求,HBase是更好的选择。
2、不适合大量的小文件存储 :由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。根据经验,每个文件、目录和数据块的存储信息大约占150字节。因此,如果有一百万个小文件,每个小文件都会占一个数据块,那至少需要300MB内存。如果是上亿级别的,就会超出当前硬件的能力。
3、修改文件:对于上传到HDFS上的文件,不支持修改文件。Hadoop2.0虽然支持了文件的追加功能,但是还是不建议对HDFS上的文件进行修改。因为效率低下。HDFS适合一次写入,然后多次读取的场景。
4、不支持用户的并行写:同一时间内,只能有一个用户执行写操作。

❹ hdfs和mysql有什么区别大数据离线数据存储在mysql还是hdfs比较好

这区别可大了,不是一个概念。mysql是传统的关系型数据库。hdfs是nosql hadoop的存储方式。hdfs是分布式的自带高可用存储,文件格式跟mysql的存储引擎不一样。大数据离线存储,当然是hdfs更合适

❺ HbBase可以随机写入为什么还要依赖于HDFS

他们的关系是:hbase是一个内存数据库,而hdfs是一个存储空间;是物品和房子的关系。
hdfs只是一个存储空间,他的完整名字是分布式文件系统。从名字可知他的作用了。hbase是一个内存数据库,简单点说hbase把表啊什么的存在hdfs上。
所以即使HbBase可以随机,它还是要依赖于HDFS。
希望可以帮到您,感谢您的采纳!

❻ Hadoop MapRece中把分析数据写入mysql中

你的job类并没有设置outputformat,如需要输出到数据库,需要特定的输出如下:

job.setJarByClass(TextCheckerJob.class);
job.setMapperClass(TextMapper.class);
job.setRecerClass(TextRece.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(MysqlDBOutputFormat.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setNumReceTasks(1);
MysqlDBOutputFormat.setOutput(job,"data_chck_result",newString[]{"tblName","colName","wrongValue","count"});

同时,job初始化之前,你需要把连接数据库的信息写入conf中,如下

conf.set("maprece.jdbc.driver.class",clazz);
conf.set("maprece.jdbc.username",username);
conf.set("maprece.jdbc.password",password);
conf.set("maprece.jdbc.url",url);

上面的MysqlDBOutputFormat类是我自己重写了,你可以直接使用DBOutputFormat这个类

❼ 如何进行MySQL数据库与HDFS的实时数据同步

您好,很高兴为您解答。

通过Map/Rece进行批处理递送到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主服务,一旦二进制日志被提交,就读取二进制日志事务,并且把它们写到HDFS.

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

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

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

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

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

~ O(∩_∩)O~

❽ 怎样将hdfs中的数据导入到mysql中 命令

您好,很高兴为您解答。
通过map/rece进行批处理递送到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~

❾ 怎样将数据库数据写入到hdfs中

如下面这个shell脚本
#Oracle的连接字符串,其中包含了Oracle的地址,SID,和端口号
CONNECTURL=jdbc:oracle:thin:@20.135.60.21:1521:DWRAC2
#使用的用户名
ORACLENAME=kkaa
#使用的密码
ORACLEPASSWORD=kkaa123
#需要从Oracle中导入的表名
oralceTableName=tt
#需要从Oracle中导入的表中的字段名
columns=AREA_ID,TEAM_NAME
#将Oracle中的数据导入到HDFS后的存放路径
hdfsPath=apps/as/hive/$oralceTableName
#执行导入逻辑。将Oracle中的数据导入到HDFS中
sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --target-dir $hdfsPath --num-mappers 1 --table $oralceTableName --columns $columns --fields-terminated-by '\001'
执行这个脚本之后,导入程序就完成了。

热点内容
华强北耳机连安卓手机下什么软件 发布:2024-10-06 08:21:53 浏览:251
儿科发现传染病的应急演练脚本 发布:2024-10-06 08:21:48 浏览:598
玩王者荣耀的时候要买哪个配置 发布:2024-10-06 08:19:41 浏览:620
imovie怎么清理缓存 发布:2024-10-06 08:14:30 浏览:17
python字典list 发布:2024-10-06 08:14:26 浏览:578
amhip访问 发布:2024-10-06 08:03:54 浏览:437
joy加密 发布:2024-10-06 07:53:27 浏览:201
结构是由哪种脚本语言填写的 发布:2024-10-06 07:24:27 浏览:744
客户端反编译教学 发布:2024-10-06 07:10:42 浏览:783
阿里云香港服务器被墙 发布:2024-10-06 06:45:46 浏览:230