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

来源:互联网 发布:js数组前面添加元素 编辑:程序博客网 时间:2024/05/20 18:54

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.gztar -zxvf hadoop-2.7.3

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

mkdir /usr/soft

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

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

打开/etc/profile

vim /etc/profile

在文件最后添加如下几句

export JAVA_HOME=/usr/soft/jdk1.8export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport HADOOP_INSTALL=/usr/soft/hadoop-2.7.3export 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 .sshcat 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.shstop-yarn.shmr-jobhistory-daemon.sh stop historyserver

通过web查看hadoop

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

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

hadoop fs -mkdir -p /home/taizhiminhadoop 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

结束

1 0
原创粉丝点击