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
结束