java mapreduce 实例_Java实现MapReduce Wordcount案例

本文通过一个详细的实例介绍了如何使用Java实现MapReduce的Wordcount案例,包括修改pom.xml配置、编写WordcountDriver、WordcountMapper和WordcountReducer类,以及在本地和Hadoop集群上运行的步骤。在运行过程中遇到的问题和解决方案也一并给出。
摘要由CSDN通过智能技术生成

先改pom.xml:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.mcq

mr-1101

0.0.1-SNAPSHOT

jdk.tools

jdk.tools

1.8

system

${JAVA_HOME}/lib/tools.jar

junit

junit

RELEASE

org.apache.logging.log4j

log4j-core

2.8.2

org.apache.hadoop

hadoop-common

2.7.2

org.apache.hadoop

hadoop-client

2.7.2

org.apache.hadoop

hadoop-hdfs

2.7.2

在resources文件夹下添加文件 log4j.properties:

log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender

log4j.appender.logfile.File=target/spring.log

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

WordcountDriver.java:

package com.mcq;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordcountDriver{

public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

System.out.println("hello");

Configuration conf=new Configuration();

//1.获取Job对象

Job job=Job.getInstance(conf);

//2.设置jar存储位置

job.setJarByClass(WordcountDriver.class);

//3.关联Map和Reduce类

job.setMapperClass(WordcountMapper.class);

job.setReducerClass(WordcountReducer.class);

//4.设置Mapper阶段输出数据的key和value类型

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(IntWritable.class);

//5.设置最终输出的key和value类型

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

//6.设置输入路径和输出路径

FileInputFormat.setInputPaths(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

//7.提交Job

//job.submit();

job.waitForCompletion(true);

//boolean res=job.waitForCompletion(true);//true表示打印结果

//System.exit(res?0:1);

}

}

WordcountMapper.java:

package com.mcq;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Mapper;

//map阶段

//KEYIN:输入数据的key(偏移量,比如第一行是0~19,第二行是20~25),必须是LongWritable

//VALUEIN:输入数据的value(比如文本内容是字符串,那就填Text)

//KEYOUT:输出数据的key类型

//VALUEOUT:输出数据的值类型

public class WordcountMapper extends Mapper{

IntWritable v=new IntWritable(1);

Text k = new Text();

@Override

protected void map(LongWritable key, Text value, Mapper.Context context)

throws IOException, InterruptedException {

// TODO Auto-generated method stub

//1.获取一行

String line=value.toString();

//2.切割单词

String[] words=line.split(" ");

//3.循环写出

for(String word:words) {

k.set(word);

context.write(k, v);

}

}

}

WordcountReducer.java:

package com.mcq;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Reducer;

//KEYIN、VALUEIN:map阶段输出的key和value类型

public class WordcountReducer extends Reducer{

IntWritable v=new IntWritable();

@Override

protected void reduce(Text key, Iterable values,

Reducer.Context context) throws IOException, InterruptedException {

// TODO Auto-generated method stub

int sum=0;

for(IntWritable value:values) {

sum+=value.get();

}

v.set(sum);

context.write(key, v);

}

}

在run configuration里加上参数e:/mrtest/in.txt e:/mrtest/out.txt

da165959a074159e395776cb586c9cc1.png

运行时遇到了个bug,参考https://blog.csdn.net/qq_40310148/article/details/86617512解决了

在集群上运行:

用maven打成jar包,需要添加一些打包依赖:

maven-compiler-plugin

2.3.2

1.8

1.8

maven-assembly-plugin

jar-with-dependencies

com.mcq.WordcountDriver

make-assembly

package

single

注意上面mainClass里要填驱动类的主类名,可以点击类名右键copy qualified name。

将程序打成jar包(具体操作:右键工程名run as maven install,然后target文件夹会产生两个jar包,我们把不用依赖的包拷贝到hadoop集群上,因为集群已经配好相关依赖了),上传到集群

输入以下命令运行

hadoop jar mr-1101-0.0.1-SNAPSHOT.jar com.mcq.WordcountDriver /xiaocao.txt /output

注意这里输入输出的路径是集群上的路径。

基于hadoop的Hive数据仓库JavaAPI简单调用的实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 WebGUI是通过浏览器访问 Hive 本文主要介绍的就是第二种用户接口,直接进入正题。 1、Hive 安装: 1)hive的安装请参考网上的相关文章,测试时只在hadoop一个节点上安装hive即可。 2)测试数据data文件'\t'分隔: 1 zhangsan 2 lisi 3 wangwu 3)将测试数据data上传到linux目录下,我放置在:/home/hadoop01/data 2、在使用 JDBC 开发 Hive 程序时, 必须首先开启 Hive 的远程服务接口。使用下面命令进行开启: Java代码 收藏代码 hive --service hiveserver >/dev/null 2>/dev/null & 我们可以通过CLI、Client、Web UI等Hive提供的用户接口来和Hive通信,但这三种方式最常用的是CLI;Client 是Hive的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出Hive Server所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏览器访问 Hive。今天我们来谈谈怎么通过HiveServer来操作Hive。   Hive提供了jdbc驱动,使得我们可以用Java代码来连接Hive并进行一些类关系型数据库的sql语句查询等操作。同关系型数据库一样,我们也需要将Hive的服务打开;在Hive 0.11.0版本之前,只有HiveServer服务可用,你得在程序操作Hive之前,必须在Hive安装的服务器上打开HiveServer服务,如下: 1 [wyp@localhost/home/q/hive-0.11.0]$ bin/hive --service hiveserver -p10002 2 Starting Hive Thrift Server 上面代表你已经成功的在端口为10002(默认的端口是10000)启动了hiveserver服务。这时候,你就可以通过Java代码来连接hiveserver,代码如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值