前几天给大家写了个hadoop文件系统的操作类,今天来实际应用一下:从本地文件系统读入一个文件,运算后将结果再写回本地。
闲话少说,直接上代码:
public class mywordcount { public static class wordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException{ String line = value.toString(); StringTokenizer itr = new StringTokenizer(line); while(itr.hasMoreElements()){ word.set(itr.nextToken()); context.write(word, one); } } } public static class wordcountReduce extends Reducer<Text, IntWritable, Text, IntWritable>{ public void reduce(Text key, Iterable<IntWritable>values, Context context)throws IOException, InterruptedException{ int sum = 0; for (IntWritable str : values){ sum += str.get(); } context.write(key, new IntWritable(sum)); } } public static void main(String args[])throws Exception{ //首先定义两个临时文件夹,这里可以使用随机函数+文件名,这样重名的几率就很小。 String dstFile = "temp_src"; String srcFile = "temp_dst"; //这里生成文件操作对象。 HDFS_File file = new HDFS_File(); Configuration conf = new Configuration(); //从本地上传文件到HDFS,可以是文件也可以是目录 file.PutFile(conf, args[1], dstFile); System.out.println("up ok"); Job job = new Job(conf, "mywordcount"); job.setJarByClass(mywordcount.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); job.setMapperClass(wordcountMapper.class); job.setReducerClass(wordcountReduce.class); job.setCombinerClass(wordcountReduce.class); //注意这里的输入输出都应该是在HDFS下的文件或目录 FileInputFormat.setInputPaths(job, new Path(dstFile)); FileOutputFormat.setOutputPath(job, new Path(srcFile)); //开始运行 job.waitForCompletion(true); //从HDFS取回文件保存至本地 file.GetFile(conf, srcFile, args[2]); System.out.println("down ok"); //删除临时文件或目录 file.DelFile(conf, dstFile, true); file.DelFile(conf, srcFile, true); System.out.println("del ok"); } }
最后需要注意的是,在使用命令时文件或目录路径要使用绝对路径,防止出错。
您还没有登录,请您登录后再发表评论
RPC机制允许Hadoop的不同组件像本地方法调用一样进行通信,而实际上它们分布在不同的机器上。 Hadoop读写数据的过程涉及到客户端程序、NameNode(管理元数据)、DataNode(存储实际数据)等组件之间的交互。写入...
- **HBase**:是一个分布式的、面向列的开源数据库,基于Hadoop HDFS设计,能够实时读取、写入和管理大量的非结构化和半结构化数据。 - **Hive**:是一个建立在Hadoop之上的数据仓库工具,可以将SQL语句转换为...
Hadoop的核心思想是“存储与计算分离”,确保数据的本地化处理,提高运算效率。 二、Hadoop核心组件 1. HDFS(Hadoop Distributed File System):Hadoop的分布式文件系统,用于存储大量数据。它将大文件分割成多个...
了解HDFS的基本操作,如文件的创建、读取、写入以及权限管理等,对于任何一个Hadoop用户来说都是基础且必要的。 综上所述,Hadoop作为一个成熟的分布式处理框架,拥有庞大的生态系统和丰富的功能。无论是初学者还是...
- **数据读写流程**:客户端通过与NameNode交互获取文件所在的DataNode信息后,直接与DataNode通信完成数据的读取或写入操作。 #### 三、MapReduce原理与应用 - **工作原理**:MapReduce的工作过程分为Map阶段和...
编写代码涉及到使用HDFS的Java API进行文件系统的操作,例如创建、读取、写入和删除文件。开发者需要使用Hadoop的HDFS API提供的类和方法来实现这些操作。编写代码之后,就是运行测试用例,以验证代码逻辑的正确性和...
Pig是一个基于Hadoop的大规模数据分析平台,定义了一种类似于SQL的数据流语言-Pig Latin,提供了各种操作符,程序员可以利用它们开发自己的用于读取、写入和处理数据功能的程序。 Mahout是机器学习和数据挖掘的一个...
- **数据流模型**:客户端通过NameNode查询文件块的位置信息,然后直接与DataNode通信进行数据的读取或写入。这种设计减少了NameNode的负载,提高了数据访问效率。 #### 三、MapReduce详解 - **工作原理**:...
- **不支持并发写入和随机修改**:HDFS仅支持顺序写入,一个文件在同一时刻只能有一个写入者,并且只支持数据追加。 #### 五、HDFS的设计思想 - **主从架构**:HDFS采用一个中心化的命名空间和一个分布式的存储块...
- 特点:高容错性、适合一次写入多次读取的数据访问模式、适合大数据块的存储。 - 工作原理:将大文件分割成多个数据块,每个数据块默认大小为128MB,然后存储在不同的节点上。 2. **MapReduce**: - 是一种编程...
每个块都有一个偏移量(offset),表示它在文件中的起始位置。HDFS支持数据的高可靠性存储,因为每个块都可以设置多个副本,并分散存储在不同的节点上,以防单点故障。HDFS的写入机制是支持一次写入多次读取的模型,...
- 简单一致性模型:HDFS只提供一次写入多次读取的文件访问模型,简化了数据的管理。 2. MapReduce是一种分布式计算模型,用于在Hadoop集群上执行大规模数据集的并行运算。它包含两个关键操作:Map(映射)和Reduce...
- **客户端与数据节点通信**:客户端在读写文件时会直接与数据节点通信,而不会通过命名节点,这有助于提高效率。 - **系统吞吐量**:随着节点数量的增长,文件系统的吞吐量几乎呈线性增长。 - **多种访问接口**...
- **写入流程**:客户端向NameNode请求写入文件,NameNode根据文件大小和块配置信息返回部分DataNode的信息;客户端将文件分割成块,依次写入各个DataNode。 - **读取流程**:客户端向NameNode发起文件读取请求,...
- **应用场景**:适用于一次写入多次读取的场景,例如日志聚合、数据备份等。 2. **MapReduce**: - **概念**:一种编程模型,用于大规模数据集的并行运算。 - **工作原理**:MapReduce 包含两个阶段,即 Map ...
- **HDFS**:提供了一个高吞吐量的数据访问机制,非常适合一次写入多次读取的数据模型。 - **MapReduce**:是一种编程模型,用于大规模数据集(大于1TB)的并行运算。 **1.2 为什么要选择Hadoop?** - **系统特点*...
10. **HBase介绍**:HBase是一个分布式的、面向列的开源数据库,是Hadoop生态系统中的一个重要组成部分,尤其适用于需要随机读取/写入大量数据的情况。 11. **HBase架构与设计**:HBase基于Google的Bigtable论文...
Spark与Hadoop的集成,使得Spark可以无缝地读取和写入Hadoop的数据,进一步增强了其在大数据领域的应用。 Spark的核心特性包括: 1. **弹性分布式数据集(Resilient Distributed Datasets, RDD)**:RDD是Spark的...
HDFS的设计目标是将大规模数据集分布存储在商用硬件组成的集群中,并为用户提供高吞吐量的数据访问服务,适用于一次写入多次读取的应用场景。 2. **MapReduce**:是一种编程模型,用于大规模数据集(大于1TB)的...
相关推荐
RPC机制允许Hadoop的不同组件像本地方法调用一样进行通信,而实际上它们分布在不同的机器上。 Hadoop读写数据的过程涉及到客户端程序、NameNode(管理元数据)、DataNode(存储实际数据)等组件之间的交互。写入...
- **HBase**:是一个分布式的、面向列的开源数据库,基于Hadoop HDFS设计,能够实时读取、写入和管理大量的非结构化和半结构化数据。 - **Hive**:是一个建立在Hadoop之上的数据仓库工具,可以将SQL语句转换为...
Hadoop的核心思想是“存储与计算分离”,确保数据的本地化处理,提高运算效率。 二、Hadoop核心组件 1. HDFS(Hadoop Distributed File System):Hadoop的分布式文件系统,用于存储大量数据。它将大文件分割成多个...
了解HDFS的基本操作,如文件的创建、读取、写入以及权限管理等,对于任何一个Hadoop用户来说都是基础且必要的。 综上所述,Hadoop作为一个成熟的分布式处理框架,拥有庞大的生态系统和丰富的功能。无论是初学者还是...
- **数据读写流程**:客户端通过与NameNode交互获取文件所在的DataNode信息后,直接与DataNode通信完成数据的读取或写入操作。 #### 三、MapReduce原理与应用 - **工作原理**:MapReduce的工作过程分为Map阶段和...
编写代码涉及到使用HDFS的Java API进行文件系统的操作,例如创建、读取、写入和删除文件。开发者需要使用Hadoop的HDFS API提供的类和方法来实现这些操作。编写代码之后,就是运行测试用例,以验证代码逻辑的正确性和...
Pig是一个基于Hadoop的大规模数据分析平台,定义了一种类似于SQL的数据流语言-Pig Latin,提供了各种操作符,程序员可以利用它们开发自己的用于读取、写入和处理数据功能的程序。 Mahout是机器学习和数据挖掘的一个...
- **数据流模型**:客户端通过NameNode查询文件块的位置信息,然后直接与DataNode通信进行数据的读取或写入。这种设计减少了NameNode的负载,提高了数据访问效率。 #### 三、MapReduce详解 - **工作原理**:...
- **不支持并发写入和随机修改**:HDFS仅支持顺序写入,一个文件在同一时刻只能有一个写入者,并且只支持数据追加。 #### 五、HDFS的设计思想 - **主从架构**:HDFS采用一个中心化的命名空间和一个分布式的存储块...
- 特点:高容错性、适合一次写入多次读取的数据访问模式、适合大数据块的存储。 - 工作原理:将大文件分割成多个数据块,每个数据块默认大小为128MB,然后存储在不同的节点上。 2. **MapReduce**: - 是一种编程...
每个块都有一个偏移量(offset),表示它在文件中的起始位置。HDFS支持数据的高可靠性存储,因为每个块都可以设置多个副本,并分散存储在不同的节点上,以防单点故障。HDFS的写入机制是支持一次写入多次读取的模型,...
- 简单一致性模型:HDFS只提供一次写入多次读取的文件访问模型,简化了数据的管理。 2. MapReduce是一种分布式计算模型,用于在Hadoop集群上执行大规模数据集的并行运算。它包含两个关键操作:Map(映射)和Reduce...
- **客户端与数据节点通信**:客户端在读写文件时会直接与数据节点通信,而不会通过命名节点,这有助于提高效率。 - **系统吞吐量**:随着节点数量的增长,文件系统的吞吐量几乎呈线性增长。 - **多种访问接口**...
- **写入流程**:客户端向NameNode请求写入文件,NameNode根据文件大小和块配置信息返回部分DataNode的信息;客户端将文件分割成块,依次写入各个DataNode。 - **读取流程**:客户端向NameNode发起文件读取请求,...
- **应用场景**:适用于一次写入多次读取的场景,例如日志聚合、数据备份等。 2. **MapReduce**: - **概念**:一种编程模型,用于大规模数据集的并行运算。 - **工作原理**:MapReduce 包含两个阶段,即 Map ...
- **HDFS**:提供了一个高吞吐量的数据访问机制,非常适合一次写入多次读取的数据模型。 - **MapReduce**:是一种编程模型,用于大规模数据集(大于1TB)的并行运算。 **1.2 为什么要选择Hadoop?** - **系统特点*...
10. **HBase介绍**:HBase是一个分布式的、面向列的开源数据库,是Hadoop生态系统中的一个重要组成部分,尤其适用于需要随机读取/写入大量数据的情况。 11. **HBase架构与设计**:HBase基于Google的Bigtable论文...
Spark与Hadoop的集成,使得Spark可以无缝地读取和写入Hadoop的数据,进一步增强了其在大数据领域的应用。 Spark的核心特性包括: 1. **弹性分布式数据集(Resilient Distributed Datasets, RDD)**:RDD是Spark的...
HDFS的设计目标是将大规模数据集分布存储在商用硬件组成的集群中,并为用户提供高吞吐量的数据访问服务,适用于一次写入多次读取的应用场景。 2. **MapReduce**:是一种编程模型,用于大规模数据集(大于1TB)的...