centos6.5hadoop2.7部署和简单例子

centos6.5hadoop2.7部署和简单例子

本文所使用的资源文件清单如下:

  • CentOS-6.5-x86_64-bin-DVD.iso
  • hadoop-2.7.3
  • jdk-8u11-linux-x64.tar.gz

此处加一段废话:为了不出现任何诡异错误,安装完虚拟机后什么都不要干!

java及hadoop环境变量配置

将jdk和hadoop复制放家目录
解压jdk和hadoop

tar -zxvf jdk-8u11-linux-x64.tar.gz
tar -zxvf hadoop-2.7.3

通常软件安装到/usr目录下,我们创建/usr/soft这个目录

mkdir /usr/soft

将jdk和hadoop和移动到/usr/soft目录下

mv jdk1.8 /usr/soft
mv hadoop-2.7.3 /usr/soft

打开/etc/profile

vim /etc/profile

在文件最后添加如下几句

export JAVA_HOME=/usr/soft/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_INSTALL=/usr/soft/hadoop-2.7.3
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin 

上面的三行是设置java环境变量,下面两行是设置hadoop环境变量。

使配置生效

source /etc/profile

输入java -version 看看java环境变量有没有设置成功

java -version

输入hadoop version看看hadoop环境变量有没有设置成功

hadoop version

hadoop伪分布模式配置

进入hadoop配置文件目录进行配置

cd /usr/soft/hadoop-2.7.3/etc/hadoop

打开core-site.xml 在内添加如下内容

<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>

打开hdfs-site.xml 在内添加如下内容

<property>
<name>dfs.replication</name>
<value>1</value>
</property>

将mapred-site.xml.template改成mapred-site.xml

mv mapred-site.xml.template mapred-site.xml

打开mapred-site.xml 在内添加如下内容

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

打开yarn-site.xml在内添加如下内容

<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

设置ssh无密码登陆

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cd .ssh
cat id_rsa.pub >> ~/.ssh/authorized_keys
ssh localhost
exit
ssh localhost

这里还有一个坑,打开/usr/soft/hadoop-2.7.3/etc/hadoop/hadoop-env.sh

vim /usr/soft/hadoop-2.7.3/etc/hadoop/hadoop-env.sh 

找到

export JAVA_HOME={$JAVA_HOME}

这个应该在最上头
改成

export JAVA_HOME=/usr/soft/jdk1.8

格式化文件系统

hadoop namenode -format

启动守护程序

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

这是结束命令,依次执行

stop-dfs.sh
stop-yarn.sh
mr-jobhistory-daemon.sh stop historyserver

通过web查看hadoop

http://localhost:50070/
http://localhost:8088/
http://localhost:19888/

hadoop命令与linux命令基本一样.

hadoop fs -mkdir -p /home/taizhimin
hadoop fs -ls /

hadoop简单例子
在hadoop目录里添加测试用例
类似这种格式,这仅仅使一行,自行创建文件吧。这个文件是1901和1902年的天气数据,网上应该能找到。

0029029070999991901010106004+64333+023450FM-12+000599999V0202701N015919999999N0000001N9-00781+99999102001ADDGF108991999999999999999999
hadoop fs -put 1901 /home/hadoop/input/

如果没有这个目录自行创建吧

创建java工程,创建lib目录将hadoop2.7目录下的所有jar包添加 ,build path等等等。。。。。。。然后三个类

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;

/**
 * Mapper类
 * 
 * @author taizhimin
 * 
 */
public class MaxTemperatureMapper
        extends
        org.apache.hadoop.mapreduce.Mapper<LongWritable, Text, Text, IntWritable> {
    private static final int MISSING = 9999;

    // Map方法
    protected void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        String line = value.toString();
        String year = line.substring(15, 19);
        int airTemperature;
        if (line.charAt(87) == '+') {
            airTemperature = Integer.parseInt(line.substring(88, 92));
        } else {
            airTemperature = Integer.parseInt(line.substring(87, 92));
        }
        String quality = line.substring(92, 93);
        if (airTemperature != MISSING && quality.matches("[01459]")) {
            context.write(new Text(year), new IntWritable(airTemperature));
        }

    }
}
import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
/**
 * Reduce类
 * @author taizhimin
 *
 */
public class MaxTemperatureReducer extends
        Reducer<Text, IntWritable, Text, IntWritable> {

    protected void reduce(Text keyin, Iterable<IntWritable> valuein,
            Context context) throws IOException, InterruptedException {
        //定义最大值变量
        int maxValue = Integer.MIN_VALUE;
        for (IntWritable value : valuein) {
            maxValue = Math.max(maxValue, value.get());
        }
        //将reduce的输出写入到上下文
        context.write(keyin, new IntWritable(maxValue));
    }

}
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;
/**
 * 作业类
 * @author taizhimin
 *
 */
public class MaxTemperature {

    public static void main(String[] args) throws Exception {
        // 作业
        Job job = new Job();
        job.setJarByClass(MaxTemperature.class);
        job.setJobName("max temperature");
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        job.setMapperClass(MaxTemperatureMapper.class);
        job.setReducerClass(MaxTemperatureReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        System.out.println(job.waitForCompletion(true));

    }

}

导出为jar包,简单导出就行,不需要其他的如.profile,lib目录下的等统统不要。
复制到linux

export HADOOP_CLASSPATH=hadoopdemo.jar 

切记不可以有/home/hadoop/out目录如果要导出本地文件目录前面加file:///就可以,切记不可以有此目录,不然报错。

hadoop com.rt.MaxTemperature /home/hadoop/input/* /home/hadoop/out

待执行完成

hadoop fs -cat /home/hadoop/out/part-r-00000

结束

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值