您的位置:首页 > 运维架构 > Linux

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

2016-11-22 15:20 246 查看

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


结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息