hadoop初级班(一)

hadoop的部署

1.Linux安装

(1)如果你的电脑操作系统是Windows7或Windows8的话,请先安装一个Ubuntu系统。安装办法:下载自己可以快速下载的Ubuntu的镜像,我的用的是Ubuntu12.04,来源于中科大自己的http://mirrors.ustc.edu.cn/,下载下来后建个文件夹,将下载的ISO文件拖入,然后解压,解压完成后如图所示

双击wubi.exe,进入安装页面,

目标驱动器尽量不要选择C盘,此处选择D盘,安装大小就是你给Ubuntu的空间,默认18G,口令就是你登录Ubuntu的密码,随便设置。然后点击安装即可,然后提示你重启,重启等待Ubuntu自动安装完成即可。

在重启之后可能会出现联网下载100多个文件,这个步骤可以跳过,进行这一步的时候你可以点击一下展开的箭头,然后选择跳过即可。这一步很慢很慢。

到这里,Ubuntu安装完成

你可以点击左上角的第一个图标,在search里面寻找terminal,然后把terminal的图标拖拽到桌面上即可。

2.JDK的安装

下载http://pan.baidu.com/s/1bncVBmn这里的JDK7。之前在官网上下载JDK8速度挺慢的,在网上百度云盘里找到JDK7的资源,Linux 64位的,下载速度很快。下载下来后我将它解压到了/usr/local/lib目录下。这里注意要使用root权限,也就是sudo tar -zxvf   *******(待解压文件)    /usr/local/lib/ 。

然后修改/etc/profile文件,可以用sudo vim /etc/profile打开,编辑,当然要先安装vim,用apt-get install vim即可。

profile文件必须是root权限才能更改,更改如下:

在最后加入:

export JAVA_HOME=/usr/local/lib/jdk1.7.0_67

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

然后source /etc/profile(使修改的环境变量生效),java -version,就可以看到安装成功了!

3.安装rsync和ssh

sudo apt-get install ssh rsync安装ssh和rsync

配置ssh免登录

ssh-keygen -t dsa -f ~/.ssh/authorized_keys

ssh localhost

第一次执行本命令,会出现一个提示,输入yes,回车即可

4.安装hadoop

下载hadoop,参考http://jingyan.baidu.com/article/d621e8da0a08192865913fac.html,注意我们最后下载的是stable2里的1.2.1版本,现在hadoop有1.X和2.X版本,2.X在配置上与1.X有出入,很多书上讲的还是1.X的安装情况,这里我们也下载1.X,建一个hadoop文件夹,然后下载好的hadoop放进去,解压即可

hadoop的部署模式有三种,单机模式、伪分布式模式和分布式模式。这里我们用伪分布式模式,就是一台电脑模拟集群

修改hadoop1.2.1/conf文件夹下的core-site.xml   ,mapred-site.xml和hdfs-site.xml三个文件

core-site.xml修改如下:在<configuration></configuration>之间加入

<property>

<name>fs.default.name</name>

<value>hdfs://localhost:9000</value>

</property>

mapred-site.xml修改如下:在<configuration></configuration>之间加入

<property>

<name>mapred.job.tracker</name>

<value>localhost:9001</value>

</property>

hdfs-site.xml修改如下:在<configuration></configuration>之间加入

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

在hadoop-env.sh里加入

export JAVA_HOME=/usr/local/lib/jdk1.7.0_67

启动hadoop:

我们可以在hadoop文件夹下的bin文件夹下启动hadoop,也可以将bin文件加入到环境变量里,这样在什么目录下都能用,还是在profile里面

把之前的export PATH改为=$PATH:$JAVA_HOME/bin:/home/ustc/hadoop/hadoop-1.2.1/bin,

然后命令窗

hadoop namenode -format

这是格式化namenode

start-all.sh

这是启动所有节点

输入jps

可以看到六个进程

OK!

使用自带的例程进行测试(引用自最短路径之从零开始学习hadoop)

5.为了能用IDE进行java的编辑,我们下载并安装了eclipse,安装过程不多讲了

6.下载maven,用来帮助在eclipse里编辑mapreduce程序

下载安装maven:http://my.oschina.net/mingpeng/blog/219961

然后再自己的一个文件夹内,比方说eclipse的workspace里,创建一个wordcount

先mvn archetype:generate,这是在生成maven项目框架

要求输入groupID ,artifactID等等,这个自己按意愿输入,详细参考maven相关书籍

mvn eclipse:eclipse生成eclipse可识别的工程,然后启动eclipse,import maven项目,然后编辑POM.xml,在里面的dependencies加入 dependency

<dependency>

<groupId>org.apache.hadoop</hadoop>

<artifactId>hadoop-core</artifactId>

<version>1.2.1</version>

</dependency>

加入这个是为了让maven自动下载hadoop相关的包,使mapreduce正确运行,否则找不到这些包

然后mvn clean install,先清空jar包,然后编译打包生成jar包

最后hadoop jar ./target/wordcount-1.0-SNAPSHOT.jar ustc/hilab/WordCount a tt

上面这句的意思是在hadoop下调用wordcount jar包,ustc/hilab/WordCount这个是调用的类,ustc.hilab包下的WordCount类   a是我自己建的一个文件,里面有几行字母(当然先得按照之前讲的把本地的a put进hdfs里面)   tt是输出文件夹, 如果想看tt,输入 hadoop fs -ls即可,这就是看hadoop的fs

下面是wordcount 代码,引用自http://blog.csdn.net/xw13106209/article/details/6116323

package ustc.hilab;
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
/**
 *
 * 描述:WordCount explains by Felix
 * @author Hadoop Dev Group
 */
public class WordCount
{
    /**
     * MapReduceBase类:实现了Mapper和Reducer接口的基类(其中的方法只是实现接口,而未作任何事情)
     * Mapper接口:
     * WritableComparable接口:实现WritableComparable的类可以相互比较。所有被用作key的类应该实现此接口。
     * Reporter 则可用于报告整个应用的运行进度,本例中未使用。
     *
     */
    public static class Map extends MapReduceBase implements
            Mapper<LongWritable, Text, Text, IntWritable>
    {
        /**
         * LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了WritableComparable接口,
         * 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为long,int,String 的替代品。
         */
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();  

        /**
         * Mapper接口中的map方法:
         * void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)
         * 映射一个单个的输入k/v对到一个中间的k/v对
         * 输出对不需要和输入对是相同的类型,输入对可以映射到0个或多个输出对。
         * OutputCollector接口:收集Mapper和Reducer输出的<k,v>对。
         * OutputCollector接口的collect(k, v)方法:增加一个(k,v)对到output
         */
        public void map(LongWritable key, Text value,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
        {
            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens())
            {
                word.set(tokenizer.nextToken());
                output.collect(word, one);
            }
        }
    }
    public static class Reduce extends MapReduceBase implements
            Reducer<Text, IntWritable, Text, IntWritable>
    {
        public void reduce(Text key, Iterator<IntWritable> values,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
        {
            int sum = 0;
            while (values.hasNext())
            {
                sum += values.next().get();
            }
            output.collect(key, new IntWritable(sum));
        }
    }
    public static void main(String[] args) throws Exception
    {
        /**
         * JobConf:map/reduce的job配置类,向hadoop框架描述map-reduce执行的工作
         * 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf)等
         */
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName("wordcount");           //设置一个用户定义的job名称
        conf.setOutputKeyClass(Text.class);    //为job的输出数据设置Key类
        conf.setOutputValueClass(IntWritable.class);   //为job输出设置value类
        conf.setMapperClass(Map.class);         //为job设置Mapper类
        conf.setCombinerClass(Reduce.class);      //为job设置Combiner类
        conf.setReducerClass(Reduce.class);        //为job设置Reduce类
        conf.setInputFormat(TextInputFormat.class);    //为map-reduce任务设置InputFormat实现类
        conf.setOutputFormat(TextOutputFormat.class);  //为map-reduce任务设置OutputFormat实现类
        /**
         * InputFormat描述map-reduce中对job的输入定义
         * setInputPaths():为map-reduce job设置路径数组作为输入列表
         * setInputPath():为map-reduce job设置路径数组作为输出列表
         */
        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));
        JobClient.runJob(conf);         //运行一个job
    }
}  

时间: 2024-11-09 00:45:21

hadoop初级班(一)的相关文章

老男孩linux实战培训初级班第二次课前考试题

################################################################ 本文内容摘录于老男孩linux实战运维培训中心课前考试题(答案部分) 如有转载,请务必保留本文链接及版权信息. 欢迎广到运维兄弟一起交流linux/unix网站运维技术! 网站运维交流群:114580181 45039636 37081784  老男孩 QQ:31333741  mail:[email protected] ======================

老男孩linux实战培训初级班第三次课课前考试题

################################################################ 本文内容摘录于老男孩linux实战运维培训中心考试题 如有转载,请务必保留本文链接及版权信息. 欢迎广到运维兄弟一起交流linux/unix网站运维技术! 网站运维交流群:114580181 45039636 老男孩 QQ:31333741  mail:[email protected] ========================================

初级班 Linux使用

ifconfig 查看IP地址 重新启动网卡服务 service network restart 笔记 1.通过远程工具登陆到linux后,所在的位置是当前登录用户的家目录(home directory).2.家目录的符号用~表示.3.linux的文件系统是一个树结构. linux文件系统的树根成为根目录,使用符号"/"表示. linux文件系统中使用符号".."表示上级目录. linux文件系统中使用符号"."表示当前目录. linux文件系统

Hadoop初级之shell脚本

Shell脚本   Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive). Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令.Shell脚本和编程语言很相似,也有变量和流程控制语句,包括循环和分支.但Shell脚本是解释执行的,不需 要编译,Shell程序从脚本中一行一

Hadoop MapReduce开发最佳实践(上篇)

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

天草(初级+中级+高级)VIP和黑鹰VIP破解教程(全部iso下载地址)

以下就是我收集的教程地址,之前我收集到的都是一课一课下载的,虽然这样,我也下载完了天草的全部课程.这里分享的是在一起的iso文件,比起一课课下载爽多了.~~ 还有这些教程都是从零起点开始教的,不用担心学不会.~~ 个人建议先看脱壳~然后看破解的 _________________________________________________________________________________ 黑鹰VIP破解教程(50课时)第一课           破解工具的介绍 第二课     

linux运维初级课前实战随机考试题含答案(笔试+上机)

本文出自 "老男孩linux运维" 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/566654 linux运维初级课前随机考试: 一.笔试部分: 1.开机配置服务自启动的文件路径是?解答:/etc/rc.local 2.网卡配置文件的路径解答:/etc/sysconfig/network-scripts/ifcfg-eth0 3.Client 端DNS文件的路径解答:/etc/resolv.conf 提示:服务端DNS默认配置文件路径

初级零基础备考,2月份开始还来得及吗?时间上如何做规划?

2月份,对于2020年来说,是一个特殊的月份,受疫情的影响,很多同学可能在家办公,工作及学习的时间相对灵活,在2019年的2月份,我也同样踏上考初级的道路,在报考之前,我是一个会计小白,没有相关知识,更没有相关的工作经验,完全凭着兴趣就报名了,经过精心的准备以后,实务和经济法都考取了90分以上的成绩,所以也非常希望能把自己的经验分享给大家,让大家可以做一个参考,好好准备,顺利通过初级的考试.世上无难事,只怕有心人.每年都会有很多像我一样的考生,没有任何的基础,就加入初级考试,刚开始也非常的恐慌,

好的学习材料

★论坛视频篇(此部分用于收集发布2014各大网的VIP收费视频教程,每年为一周期,不定期修复失效或更新,大家如若发现失效或有资源分享可以发邮件或本帖回复我!)272.老男孩Linux.shell.RHCE运维初中高级50G全套培训视频教程(解压密码为看雪论坛首页)链接:http://pan.baidu.com/s/1gdBs6gN 密码:ac4p 299.一洋淘宝2014最新培训教程(全套16个模块)—价值2980元!(解压密码为看雪论坛首页)链接:http://pan.baidu.com/s/