hadoop是做什么的?
发布网友
发布时间:2022-04-23 21:37
我来回答
共6个回答
懂视网
时间:2022-04-09 00:06
- create table student(id INTEGER NOT NULL PRIMARY KEY,name VARCHAR(32) NOT NULL);
(3):插入数据
[java] view plain copy
- insert into student values(1,"lavimer");
(4)编写MapReduce程序,我这里使用的版本是hadoop1.2.1,相关知识点都写在注释中了,如下:
[java] view plain copy
- /**
- * 使用DBInputFormat和DBOutputFormat
- * 要把数据库的jdbc驱动放到各个TaskTracker节点的lib目录下
- * 重启集群
- * @author 廖钟民
- * time : 2015年1月15日下午12:50:55
- * @version
- */
- public class MyDBInputFormat {
-
- //定义输出路径
- private static final String OUT_PATH = "hdfs://liaozhongmin:9000/out";
-
- public static void main(String[] args) {
-
- try {
- //创建配置信息
- Configuration conf = new Configuration();
-
- /*//对Map端的输出进行压缩
- conf.setBoolean("mapred.compress.map.output", true);
- //设置map端输出使用的压缩类
- conf.setClass("mapred.map.output.compression.codec", GzipCodec.class, CompressionCodec.class);
- //对reduce端输出进行压缩
- conf.setBoolean("mapred.output.compress", true);
- //设置reduce端输出使用的压缩类
- conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);*/
-
- // 添加配置文件(我们可以在编程的时候动态配置信息,而不需要手动去改变集群)
- /*
- * conf.addResource("classpath://hadoop/core-site.xml");
- * conf.addResource("classpath://hadoop/hdfs-site.xml");
- * conf.addResource("classpath://hadoop/hdfs-site.xml");
- */
-
- //通过conf创建数据库配置信息
- DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver", "jdbc:mysql://liaozhongmin:3306/myDB","root","134045");
-
- //创建文件系统
- FileSystem fileSystem = FileSystem.get(new URI(OUT_PATH), conf);
-
- //如果输出目录存在就删除
- if (fileSystem.exists(new Path(OUT_PATH))){
- fileSystem.delete(new Path(OUT_PATH),true);
- }
-
- //创建任务
- Job job = new Job(conf,MyDBInputFormat.class.getName());
-
- //1.1 设置输入数据格式化的类和设置数据来源
- job.setInputFormatClass(DBInputFormat.class);
- DBInputFormat.setInput(job, Student.class, "student", null, null, new String[]{"id","name"});
-
- //1.2 设置自定义的Mapper类和Mapper输出的key和value的类型
- job.setMapperClass(MyDBInputFormatMapper.class);
- job.setMapOutputKeyClass(Text.class);
- job.setMapOutputValueClass(Text.class);
-
- //1.3 设置分区和reduce数量(reduce的数量和分区的数量对应,因为分区只有一个,所以reduce的个数也设置为一个)
- job.setPartitionerClass(HashPartitioner.class);
- job.setNumReduceTasks(1);
-
- //1.4 排序、分组
- //1.5 归约
- //2.1 Shuffle把数据从Map端拷贝到Reduce端
-
- //2.2 指定Reducer类和输出key和value的类型
- job.setReducerClass(MyDBInputFormatReducer.class);
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(Text.class);
-
- //2.3 指定输出的路径和设置输出的格式化类
- FileOutputFormat.setOutputPath(job, new Path(OUT_PATH));
- job.setOutputFormatClass(TextOutputFormat.class);
-
- //提交作业 然后关闭虚拟机正常退出
- System.exit(job.waitForCompletion(true) ? 0 : 1);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 自定义Mapper类
- * @author 廖钟民
- * time : 2015年1月15日下午1:22:57
- * @version
- */
- public static class MyDBInputFormatMapper extends Mapper<LongWritable, Student, Text, Text>{
- //创建map输出时的key类型
- private Text mapOutKey = new Text();
- //创建map输出时的value类型
- private Text mapOutValue = new Text();
-
- @Override
- protected void map(LongWritable key, Student value, Mapper<LongWritable, Student, Text, Text>.Context context) throws IOException, InterruptedException {
-
- //创建输出的key:把id当做key
- mapOutKey.set(String.valueOf(value.getId()));
- //创建输出的value:把name当做value
- mapOutValue.set(value.getName());
-
- //通过context写出去
- context.write(mapOutKey, mapOutValue);
- }
- }
-
- /**
- * 自定义Reducer类
- * @author 廖钟民
- * time : 2015年1月15日下午1:23:28
- * @version
- */
- public static class MyDBInputFormatReducer extends Reducer<Text, Text, Text, Text>{
-
- @Override
- protected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException {
-
- //遍历把结果写到HDFS中
- for (Text t : values){
-
- context.write(key, t);
- }
- }
- }
- }
-
- /**
- * 自定义实体类 用于对应数据库表中的字段
- * @author 廖钟民
- * time : 2015年1月15日下午12:52:58
- * @version
- */
- class Student implements Writable,DBWritable{
-
- //学生id字段
- private Integer id;
- //学生姓名
- private String name;
-
-
- //无参构造方法
- public Student() {
- }
-
- //有参构造方法
- public Student(Integer id, String name) {
- this.id = id;
- this.name = name;
- }
-
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- //实现DBWritable接口要实现的方法
- public void readFields(ResultSet resultSet) throws SQLException {
- this.id = resultSet.getInt(1);
- this.name = resultSet.getString(2);
- }
-
- //实现DBWritable接口要实现的方法
- public void write(PreparedStatement preparedStatement) throws SQLException {
- preparedStatement.setInt(1, this.id);
- preparedStatement.setString(2, this.name);
- }
-
- //实现Writable接口要实现的方法
- public void readFields(DataInput dataInput) throws IOException {
- this.id = dataInput.readInt();
- this.name = Text.readString(dataInput);
- }
-
- //实现Writable接口要实现的方法
- public void write(DataOutput dataOutput) throws IOException {
- dataOutput.writeInt(this.id);
- Text.writeString(dataOutput, this.name);
- }
-
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((id == null) ? 0 : id.hashCode());
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- Student other = (Student) obj;
- if (id == null) {
- if (other.id != null)
- return false;
- } else if (!id.equals(other.id))
- return false;
- if (name == null) {
- if (other.name != null)
- return false;
- } else if (!name.equals(other.name))
- return false;
- return true;
- }
-
- @Override
- public String toString() {
- return "Student [id=" + id + ", name=" + name + "]";
- }
-
-
- }
程序运行的结果是数据库中的数据成功导入到HDFS中,如下:
注:程序运行时,会碰到一个常见的数据库远程连接错误,大致如下:
[java] view plain copy
- Access denied for user ‘root‘@‘%‘ to database ‘xxxx’
原因:创建完数据库后,需要进行授权(在本地访问一般不会出现这个问题)
解决方法就是进行授权:
[java] view plain copy
- grant all on xxxx.* to ‘root‘@‘%‘ identified by ‘password‘ with grant option;
-
- xxxx代表创建的数据库;
- password为用户密码,在此为root的密码
另外一个常见的错误就是MYSQL驱动没有导入到hadoop/lib目录下,解决方案有两种,传统的方式我就不多说了,这里说另外一种方式:
(1):把包上传到集群上
[java] view plain copy
- hadoop fs -put mysql-connector-java-5.1.0- bin.jar /lib
(2):在MR程序提交job前,添加语句:
[java] view plain copy
- DistributedCache.addFileToClassPath(new Path("/lib/mysql- connector-java- 5.1.0-bin.jar"), conf);
Hadoop中的DBInputFormat
标签:
热心网友
时间:2022-04-08 21:14
提供海量数据存储和计算的,需要java语言基础。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
特点
1、快照支持在一个特定时间存储一个数据拷贝,快照可以将失效的集群回滚到之前一个正常的时间点上。HDFS已经支持元数据快照。
2、HDFS的设计是用于支持大文件的。运行在HDFS上的程序也是用于处理大数据集的。这些程序仅写一次数据,一次或多次读数据请求,并且这些读操作要求满足流式传输速度。
HDFS支持文件的一次写多次读操作。HDFS中典型的块大小是64MB,一个HDFS文件可以被切分成多个64MB大小的块,如果需要,每一个块可以分布在不同的数据节点上。
3、阶段状态:一个客户端创建一个文件的请求并不会立即转发到名字节点。实际上,一开始HDFS客户端将文件数据缓存在本地的临时文件中。
热心网友
时间:2022-04-08 22:32
一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS。
HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
扩展资料
Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势。Hadoop的分布式架构,将大数据处理引擎尽可能地靠近存储,对例如像ETL这样的批处理操作相对合适,因为类似这样操作的批处理结果可以直接走向存储。
Hadoop的MapRece功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Rece)到数据仓库里。
参考资料来源:百度百科-Hadoop
热心网友
时间:2022-04-09 00:07
1、Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
2、Hadoop是一种用于业务分析处理的环境。允许大量的计算算来处理超大型非结构化数据集。这些数据可以来自于各种源,但是最常见的数据是通过作为物联网的一部分的传感器创造的数据。为了让其分析处理是有价值的,Hadoop必须快速处理这些数据集,而且要通过Hadoop分布式文件系统(HDFS)实现。
3、Hadoop架构是一个开源的、基于Java的编程框架,设计用于跨电脑集群来处理大数据。Hadoop架构管理多个节点之间的数据传输,确保即使有一个节点坏掉了,系统仍然保有适当的功能。
4、传统Hadoop存储架构的替代品利用了共享的存储环境,这个环境是计算结点连接的。厂商提供了这种解决方案,既可以用他们自己的HDFS兼容的插件,也可以利用亚马逊简单存储服务(S3)接口的Hadoop存储模式。
5、Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。
热心网友
时间:2022-04-09 01:58
Hadoop是一个分布式计算的解决方案还是一个开源的框架。
Hadoop可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,但不适合那种对几个记录随机读写的在线事务处理模式。Hadoop=HDFS(文件系统,数据存储技术相关)+ Maprece(数据处理),Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,拥有更灵活的处理能力,无论任何数据形式最终会转化为key/value,key/value是基本数据单元。用函数式变成Maprece代替SQL,SQL是查询语句,而Maprece则是使用脚本和代码,而对于适用于关系型数据库,习惯SQL的Hadoop有开源工具hive代替。
想了解更多有关Hadoop的详情,推荐咨询达内教育。达内教育已从事19年IT技术培训,累计培养100万学员,并且独创TTS8.0教学系统,1v1督学,跟踪式学习,有疑问随时沟通;自主研发的26大课程体系更是紧跟企业需求,企业级项目,课程穿插大厂真实项目讲解,对标企业人才标准,制定专业学习计划,囊括主流热点技术,助力学员更好的提高。感兴趣的话点击此处,免费学习一下
热心网友
时间:2022-04-09 04:06
Hadoop是一个用于运行应用程序在大型集群的廉价硬件设备上的框架。Hadoop为应用程序透明的提供了一组稳定/可靠的接口和数据运动。在Hadoop中实现了Google的MapRece算法,它能够把应用程序分割成许多很小的工作单元,每个单元可以在任何集群节点上执行或重复执行。此外,Hadoop还提供一个分布式文件系统用来在各个计算节点上存储数据,并提供了对数据读写的高吞吐率。由于应用了map/rece和分布式文件系统使得Hadoop框架具有高容错性,它会自动处理失败节点。已经在具有600个节点的集群测试过Hadoop框架。