问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hadoop是什么意思?

发布网友 发布时间:2022-04-24 19:40

我来回答

2个回答

懂视网 时间:2022-05-01 01:04

 
  1. create table student(id INTEGER NOT NULL PRIMARY KEY,name VARCHAR(32) NOT NULL);  

 

技术分享

(3):插入数据

 

[java] view plain copy  
  1. insert into student values(1,"lavimer");  

技术分享

 

 

(4)编写MapReduce程序,我这里使用的版本是hadoop1.2.1,相关知识点都写在注释中了,如下:

 

[java] view plain copy  
  1. /** 
  2.  * 使用DBInputFormat和DBOutputFormat 
  3.  * 要把数据库的jdbc驱动放到各个TaskTracker节点的lib目录下 
  4.  * 重启集群 
  5.  * @author 廖钟民 
  6.  * time : 2015年1月15日下午12:50:55 
  7.  * @version 
  8.  */  
  9. public class MyDBInputFormat {  
  10.   
  11.     //定义输出路径  
  12.     private static final String OUT_PATH = "hdfs://liaozhongmin:9000/out";  
  13.       
  14.     public static void main(String[] args) {  
  15.           
  16.         try {  
  17.             //创建配置信息  
  18.             Configuration conf = new Configuration();  
  19.               
  20.             /*//对Map端的输出进行压缩 
  21.             conf.setBoolean("mapred.compress.map.output", true); 
  22.             //设置map端输出使用的压缩类 
  23.             conf.setClass("mapred.map.output.compression.codec", GzipCodec.class, CompressionCodec.class); 
  24.             //对reduce端输出进行压缩 
  25.             conf.setBoolean("mapred.output.compress", true); 
  26.             //设置reduce端输出使用的压缩类 
  27.             conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);*/  
  28.               
  29.             // 添加配置文件(我们可以在编程的时候动态配置信息,而不需要手动去改变集群)  
  30.             /* 
  31.             * conf.addResource("classpath://hadoop/core-site.xml");  
  32.             * conf.addResource("classpath://hadoop/hdfs-site.xml"); 
  33.             * conf.addResource("classpath://hadoop/hdfs-site.xml"); 
  34.             */  
  35.               
  36.             //通过conf创建数据库配置信息  
  37.             DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver", "jdbc:mysql://liaozhongmin:3306/myDB","root","134045");  
  38.               
  39.             //创建文件系统  
  40.             FileSystem fileSystem = FileSystem.get(new URI(OUT_PATH), conf);  
  41.               
  42.             //如果输出目录存在就删除  
  43.             if (fileSystem.exists(new Path(OUT_PATH))){  
  44.                 fileSystem.delete(new Path(OUT_PATH),true);  
  45.             }  
  46.               
  47.             //创建任务  
  48.             Job job = new Job(conf,MyDBInputFormat.class.getName());  
  49.               
  50.             //1.1 设置输入数据格式化的类和设置数据来源  
  51.             job.setInputFormatClass(DBInputFormat.class);  
  52.             DBInputFormat.setInput(job, Student.class, "student", null, null, new String[]{"id","name"});  
  53.               
  54.             //1.2 设置自定义的Mapper类和Mapper输出的key和value的类型  
  55.             job.setMapperClass(MyDBInputFormatMapper.class);  
  56.             job.setMapOutputKeyClass(Text.class);  
  57.             job.setMapOutputValueClass(Text.class);  
  58.               
  59.             //1.3 设置分区和reduce数量(reduce的数量和分区的数量对应,因为分区只有一个,所以reduce的个数也设置为一个)  
  60.             job.setPartitionerClass(HashPartitioner.class);  
  61.             job.setNumReduceTasks(1);  
  62.               
  63.             //1.4 排序、分组  
  64.             //1.5 归约  
  65.             //2.1 Shuffle把数据从Map端拷贝到Reduce端  
  66.               
  67.             //2.2 指定Reducer类和输出key和value的类型  
  68.             job.setReducerClass(MyDBInputFormatReducer.class);  
  69.             job.setOutputKeyClass(Text.class);  
  70.             job.setOutputValueClass(Text.class);  
  71.               
  72.             //2.3 指定输出的路径和设置输出的格式化类  
  73.             FileOutputFormat.setOutputPath(job, new Path(OUT_PATH));  
  74.             job.setOutputFormatClass(TextOutputFormat.class);  
  75.               
  76.             //提交作业 然后关闭虚拟机正常退出  
  77.             System.exit(job.waitForCompletion(true) ? 0 : 1);  
  78.               
  79.         } catch (Exception e) {  
  80.             e.printStackTrace();  
  81.         }  
  82.     }  
  83.       
  84.     /** 
  85.      * 自定义Mapper类 
  86.      * @author 廖钟民 
  87.      * time : 2015年1月15日下午1:22:57 
  88.      * @version 
  89.      */  
  90.     public static class MyDBInputFormatMapper extends Mapper<LongWritable, Student, Text, Text>{  
  91.         //创建map输出时的key类型  
  92.          private Text mapOutKey = new Text();  
  93.          //创建map输出时的value类型  
  94.          private Text mapOutValue = new Text();  
  95.            
  96.         @Override  
  97.         protected void map(LongWritable key, Student value, Mapper<LongWritable, Student, Text, Text>.Context context) throws IOException, InterruptedException {  
  98.               
  99.             //创建输出的key:把id当做key  
  100.             mapOutKey.set(String.valueOf(value.getId()));  
  101.             //创建输出的value:把name当做value  
  102.             mapOutValue.set(value.getName());  
  103.               
  104.             //通过context写出去  
  105.             context.write(mapOutKey, mapOutValue);  
  106.         }  
  107.     }  
  108.       
  109.     /** 
  110.      * 自定义Reducer类 
  111.      * @author 廖钟民 
  112.      * time : 2015年1月15日下午1:23:28 
  113.      * @version 
  114.      */  
  115.     public static class MyDBInputFormatReducer extends Reducer<Text, Text, Text, Text>{  
  116.           
  117.         @Override  
  118.         protected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException {  
  119.               
  120.             //遍历把结果写到HDFS中  
  121.             for (Text t : values){  
  122.                   
  123.                 context.write(key, t);  
  124.             }  
  125.         }  
  126.     }  
  127. }  
  128.   
  129. /** 
  130.  * 自定义实体类 用于对应数据库表中的字段 
  131.  * @author 廖钟民 
  132.  * time : 2015年1月15日下午12:52:58 
  133.  * @version 
  134.  */  
  135. class Student implements Writable,DBWritable{  
  136.   
  137.     //学生id字段  
  138.     private Integer id;  
  139.     //学生姓名  
  140.     private String name;  
  141.       
  142.       
  143.     //无参构造方法  
  144.     public Student() {  
  145.     }  
  146.   
  147.     //有参构造方法  
  148.     public Student(Integer id, String name) {  
  149.         this.id = id;  
  150.         this.name = name;  
  151.     }  
  152.   
  153.   
  154.     public Integer getId() {  
  155.         return id;  
  156.     }  
  157.   
  158.     public void setId(Integer id) {  
  159.         this.id = id;  
  160.     }  
  161.   
  162.     public String getName() {  
  163.         return name;  
  164.     }  
  165.   
  166.     public void setName(String name) {  
  167.         this.name = name;  
  168.     }  
  169.   
  170.     //实现DBWritable接口要实现的方法  
  171.     public void readFields(ResultSet resultSet) throws SQLException {  
  172.         this.id = resultSet.getInt(1);  
  173.         this.name = resultSet.getString(2);  
  174.     }  
  175.       
  176.     //实现DBWritable接口要实现的方法  
  177.     public void write(PreparedStatement preparedStatement) throws SQLException {  
  178.         preparedStatement.setInt(1, this.id);  
  179.         preparedStatement.setString(2, this.name);  
  180.     }  
  181.   
  182.     //实现Writable接口要实现的方法  
  183.     public void readFields(DataInput dataInput) throws IOException {  
  184.         this.id = dataInput.readInt();  
  185.         this.name = Text.readString(dataInput);  
  186.     }  
  187.       
  188.     //实现Writable接口要实现的方法  
  189.     public void write(DataOutput dataOutput) throws IOException {  
  190.         dataOutput.writeInt(this.id);  
  191.         Text.writeString(dataOutput, this.name);  
  192.     }  
  193.   
  194.       
  195.     @Override  
  196.     public int hashCode() {  
  197.         final int prime = 31;  
  198.         int result = 1;  
  199.         result = prime * result + ((id == null) ? 0 : id.hashCode());  
  200.         result = prime * result + ((name == null) ? 0 : name.hashCode());  
  201.         return result;  
  202.     }  
  203.   
  204.     @Override  
  205.     public boolean equals(Object obj) {  
  206.         if (this == obj)  
  207.             return true;  
  208.         if (obj == null)  
  209.             return false;  
  210.         if (getClass() != obj.getClass())  
  211.             return false;  
  212.         Student other = (Student) obj;  
  213.         if (id == null) {  
  214.             if (other.id != null)  
  215.                 return false;  
  216.         } else if (!id.equals(other.id))  
  217.             return false;  
  218.         if (name == null) {  
  219.             if (other.name != null)  
  220.                 return false;  
  221.         } else if (!name.equals(other.name))  
  222.             return false;  
  223.         return true;  
  224.     }  
  225.   
  226.     @Override  
  227.     public String toString() {  
  228.         return "Student [id=" + id + ", name=" + name + "]";  
  229.     }  
  230.       
  231.       
  232. }  


程序运行的结果是数据库中的数据成功导入到HDFS中,如下:

 

技术分享

 

注:程序运行时,会碰到一个常见的数据库远程连接错误,大致如下:

 

[java] view plain copy  
  1. Access denied for user ‘root‘@‘%‘ to database ‘xxxx’  


原因:创建完数据库后,需要进行授权(在本地访问一般不会出现这个问题)

 

解决方法就是进行授权:

 

[java] view plain copy  
  1. grant all on xxxx.* to ‘root‘@‘%‘ identified by ‘password‘ with grant option;  
  2.   
  3. xxxx代表创建的数据库;  
  4. password为用户密码,在此为root的密码  


另外一个常见的错误就是MYSQL驱动没有导入到hadoop/lib目录下,解决方案有两种,传统的方式我就不多说了,这里说另外一种方式:

(1):把包上传到集群上

 

[java] view plain copy  
  1. hadoop fs -put mysql-connector-java-5.1.0- bin.jar /lib  

(2):在MR程序提交job前,添加语句:

 

 

[java] view plain copy  
    1. DistributedCache.addFileToClassPath(new Path("/lib/mysql- connector-java- 5.1.0-bin.jar"), conf);  

Hadoop中的DBInputFormat

标签:

热心网友 时间:2022-04-30 22:12

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

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

扩展资料:

Hadoop的优点:

1、高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。

2、高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

3、高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

4、高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

5、低成本:与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

参考资料来源:

百度百科-hadoop

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 学完hadoop组件可以做什么项目 hadoop是什么意思?与大数据有什么关系? hadoop能做什么 hadoop可以做什么 Hadoop:是什么,如何工作,可以用来做什么 大数据的Hadoop是做什么的? 锌合金水桶和不锈钢水桶装水食用哪个好? 请问用不锈钢桶盛放自来水,对人体有害吗? 装配式不锈钢水箱可以做多高的? 组装个玩游戏电脑要多少钱 不锈钢水箱需要些什么样的材料? 自己组装一台电脑需要多少钱 天台不锈钢水桶水发绿怎么办 自己组装电脑大概需要多少钱? 我想自己花钱组装一个笔记本电脑(不是品牌货),配置要高,大约要多少钱? 注意配置要高啊 不锈钢水桶冬天有水会冻烂吗 不锈钢水箱有几种材质? 组装一台笔记本电脑要多少钱呢? 组装个笔记本电脑要多少钱 镀锌水桶和不锈钢水桶有何区别 hadoop应用在哪些领域或场景 Hadoop能做什么? hadoop的三大组件及其作用是什么? Hadoop是什么?能不能给点具体的解释?怎么用? 什么是hadoop 梦见猫丢了是什么意思? 是一个很小的猫 很可爱 丢了我还在哭呢 可是有人捡到猫了 在敲诈我 说让我给多少多 梦见捡到小花猫,然后又正在捡到是什么预兆? 做梦梦到捡到一只猫,很温顺很漂亮,还会变身人形,是个小姑娘。 梦见一只小猫 特别可爱 能听懂我说话 会点头摇头 但事实别人家的 我捡来的 是什么意思 是好是坏???? 梦见自己丢弃的猫被有钱人捡走 解梦,梦见猫 各种水表怎么看 数字水表怎么看的 家用水表怎么看 水表怎么读? 怎样认水表 那个水表用了多少水,应该怎么看?红色的字是什么意思,是50还是5? 水表上数字怎样归零 酒驾撞人保险公司是否理赔 我酒驾撞了人保险公司能赔钱吗?但是责任五五分? 酒驾保险公司理赔吗 酒后撞人保险公司赔吗