Hadoop的开发环境搭建

来源:互联网 发布:数据库概论第5版答案 编辑:程序博客网 时间:2024/05/17 09:11

首先来赞叹maven是真的好用。可以使apache的相关项目配置变得非常简单。。。
1.Windows下的maven安装:
前提:jdk及相关的环境变量配置好。
下载maven:http://mirror.bit.edu.cn/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.zip
解压D:\Java\apache-maven-3.0.5
Maven环境配置:
变量名:MVN_HOME
变量值:D:\Java\apache-maven-3.0.5–根据自己的解压目录修改
找到path
在环境变量值尾部加入:;%MVN_HOME%\bin;—前面注意分号

配置调试
打开命令提示符(win+R,cmd),检查我们的java环境和maven环境是否有误。
mvn -v
如果能打印出maven的版本号,说明配置成功

修改本地仓库配置
修改我们仓库地址,仓库用于存放我们项目所依赖的所有jar包。
我的仓库路径:E:\maven\repo—-这个路径是我自己创建,你可以将路径创建在任何位置。
我们打开D:\Java\apache-maven-3.0.5\conf目录下的setting.xml文件,设置成我们创建的仓库路径

打开命令提示符,输入:mvn help:system
该命令会打印出所有的java系统属性和环境变量。
如果运行的过程中没有错误,打开我们仓库(E:\maven\repo)会发现里面多了一些文件。这些文件就是我们从maven的中央仓库下载到本地仓库的。

Myeclipse 结合Maven快速配置搭建web项目。
1打开Myeclipse, 进入window-preference-myeclipse-maven4myeclipse
设置maven安装路径
2设置当前库地址
3新建一个Web项目
进入Myeclipse,选择File-New Project-web project
完成后,
打开pom.xml可以看到myeclipse自动生成的依赖。
点击项目文件,右键->Run as->Maven install将依赖install至本地maven库
(这时候安装可能会出现一些错误,maven clean一下。然后执行maven install就可以了)
maven工程只要是apache的依赖直接在pom.xml中修改就会自动添加

(my)eclipse的配置
将编译好的hadoop-eclipse-plugin-2.2.0.jar插件拷贝到~\eclipse\plugins下
Hadoop路径,将之前搭建Hadoop集群的压缩包,在Windows中解压一份,window-preference-Hadoop Map/Reduce中设置目录到刚刚解压的Hadoop文件夹
打开Map/Reduce视图
新建并编辑hadoop参数:
Host:master的IP
Prot:8020
然后可以在eclipse中看见hdfs中的信息,证明连接成功。

新建Hadoop的maven工程
以下配置文件涵盖了hadoop、hive、hbase开发支持库的配置。
仅需针对maven工程pom.xml文件做相应更改就可以自动生成hadoop开发支持库。

<properties>   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>   <hadoop.version>2.5.0</hadoop.version>   <hive.version>0.13.1</hive.version>   <hbase.version>0.98.6-hadoop2</hbase.version></properties><dependencies>  <!-- hadoop client -->   <dependency>     <groupId>org.apache.hadoop</groupId>     <artifactId>hadoop-client</artifactId>     <version>${hadoop.version}</version>   </dependency>   <dependency>     <groupId>junit</groupId>     <artifactId>junit</artifactId>     <version>4.10</version>   </dependency>   <!-- hive client -->   <dependency>     <groupId>org.apache.hive</groupId>     <artifactId>hive-jdbc</artifactId>     <version>${hive.version}</version>   </dependency>   <dependency>     <groupId>org.apache.hive</groupId>     <artifactId>hive-exec</artifactId>     <version>${hive.version}</version>   </dependency>   <!-- hbase client -->   <dependency>     <groupId>org.apache.hbase</groupId>     <artifactId>hbase-server</artifactId>     <version>${hbase.version}</version>   </dependency>   <dependency>     <groupId>org.apache.hbase</groupId>     <artifactId>hbase-client</artifactId>     <version>${hbase.version}</version>   </dependency></dependencies>
package mapreduce;import java.io.FileInputStream;import java.io.IOException;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;public class MyWordCountJob {    /**     * @author Edison Chou     * @version 1.0     * @param KEYIN     *            →k1 表示每一行的起始位置(偏移量offset)     * @param VALUEIN     *            →v1 表示每一行的文本内容     * @param KEYOUT     *            →k2 表示每一行中的每个单词     * @param VALUEOUT     *            →v2 表示每一行中的每个单词的出现次数,固定值为1     */    public static class MyMapper extends            Mapper<LongWritable, Text, Text, LongWritable> {        protected void map(LongWritable key, Text value,                Mapper<LongWritable, Text, Text, LongWritable>.Context context)                throws java.io.IOException, InterruptedException {            String[] spilted = value.toString().split(" ");            for (String word : spilted) {                context.write(new Text(word), new LongWritable(1L));            }        };    }    /**     * @author Edison Chou     * @version 1.0     * @param KEYIN     *            →k2 表示每一行中的每个单词     * @param VALUEIN     *            →v2 表示每一行中的每个单词的出现次数,固定值为1     * @param KEYOUT     *            →k3 表示每一行中的每个单词     * @param VALUEOUT     *            →v3 表示每一行中的每个单词的出现次数之和     */    public static class MyReducer extends            Reducer<Text, LongWritable, Text, LongWritable> {        protected void reduce(Text key,                java.lang.Iterable<LongWritable> values,                Reducer<Text, LongWritable, Text, LongWritable>.Context context)                throws java.io.IOException, InterruptedException {            long count = 0L;            for (LongWritable value : values) {                count += value.get();            }            context.write(key, new LongWritable(count));        };    }    // 输入文件路径    public static final String INPUT_PATH = "hdfs://hadoop-master:9000/testdir/input/words.txt";    // 输出文件路径    public static final String OUTPUT_PATH = "hdfs://hadoop-master:9000/testdir/output/wordcount";    public static void main(String[] args) throws Exception {        Configuration conf = new Configuration();        // 0.0:首先删除输出路径的已有生成文件        FileSystem fs = FileSystem.get(new URI(INPUT_PATH), conf);        Path outPath = new Path(OUTPUT_PATH);        if (fs.exists(outPath)) {            fs.delete(outPath, true);        }        Job job = new Job(conf, "WordCount");        job.setJarByClass(MyWordCountJob.class);        // 1.0:指定输入目录        FileInputFormat.setInputPaths(job, new Path(INPUT_PATH));        // 1.1:指定对输入数据进行格式化处理的类(可以省略)        job.setInputFormatClass(TextInputFormat.class);        // 1.2:指定自定义的Mapper类        job.setMapperClass(MyMapper.class);        // 1.3:指定map输出的<K,V>类型(如果<k3,v3>的类型与<k2,v2>的类型一致则可以省略)        job.setMapOutputKeyClass(Text.class);        job.setMapOutputValueClass(LongWritable.class);        // 1.4:分区(可以省略)        job.setPartitionerClass(HashPartitioner.class);        // 1.5:设置要运行的Reducer的数量(可以省略)        job.setNumReduceTasks(1);        // 1.6:指定自定义的Reducer类        job.setReducerClass(MyReducer.class);        // 1.7:指定reduce输出的<K,V>类型        job.setOutputKeyClass(Text.class);        job.setOutputValueClass(LongWritable.class);        // 1.8:指定输出目录        FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PATH));        // 1.9:指定对输出数据进行格式化处理的类(可以省略)        job.setOutputFormatClass(TextOutputFormat.class);        // 2.0:提交作业        boolean success = job.waitForCompletion(true);        if (success) {            System.out.println("Success");            System.exit(0);        } else {            System.out.println("Failed");            System.exit(1);        }    }}

创建mr类。
run as …
可以直接用eclipse查看结果了。
但是这是在pc机上跑的单机模式,要使用集群跑mr程序要打包成mr程序,上传到服务器上去,然后用集群跑。

原创粉丝点击