准备
前面我们已经编译好了 hadoop2.7.7
,在 /opt/hadoop/hadoop-2.7.7/hadoop-dist/target/
下 生成了 hadoop-2.7.7.tar.gz
首先我们创建一个 /opt/bigdata
目录,并修改所属为当前用户
1 2
| sudo mkdir /opt/bigdata sudo chown -R $USER:$GROUPS /opt/bigdata
|
将安装包复制到 /opt/bigdata/
1
| cp /opt/hadoop/hadoop-2.7.7/hadoop-dist/target/hadoop-2.7.7.tar.gz /opt/bigdata/
|
解压安装包
1 2
| cd /opt/bigdata/ tar -zxvf hadoop-2.7.7.tar.gz
|
配置环境变量
配置 HADOOP_HOME
变量,将 hadoop
的 bin
目录加入到 PATH
变量中
1 2
| export HADOOP_HOME=/opt/bigdata/hadoop-2.7.7 PATH=$PATH:$HADOOP_HOME/bin
|
前言
Hadoop
的集中安装模式
- 本地模式:
Hadoop
本地模式只是用于本地开发调试,或者快速安装体验 Hadoop
- 伪分布式模式: 学习
Hadoop
一般是在伪分布式模式下进行。这种模式是在一台机器上各个进程上运行 Hadoop
的各个模块,伪分布式的意思是虽然各个模块是在各个进程上分开运行的,但是只是运行在一个操作系统上的,并不是真正的分布式。 - 完全分布式安装: 完全分布式模式才是生产环境采用的模式,
Hadoop
运行在服务器集群上,生产环境一般都会做 HA
,以实现高可用。 - HA 完全分布式:
HA
是指高可用,为了解决 Hadoop
单点故障问题,生产环境一般都做 HA
部署。
不同模式安装的区分的依据是NameNode
、DataNode
、ResourceManager
、NodeManager
等模块运行在几个 JVM 进程、几个机器。
模式名称 | 各个模块占用的 JVM 进程数 | 各个模块运行在几个机器数上 |
---|
本地模式 | 1 个 | 1 个 |
伪分布式模式 | N 个 | 1 个 |
完全分布式模式 | N 个 | N 个 |
HA 完全分布式 | N 个 | N 个 |
本地模式也就是单机模式,本地模式是最简单的模式,所有模块都运行与一个JVM
进程中,使用的本地文件系统,而不是HDFS
,本地模式主要是用于本地开发过程中的运行调试用。
Linux
环境
前面编译hadoop
到时候已经配置过JDK
相关环境变量,下面我们直接运行hadoop
自带的wordcount
示例
首先创建一个 words
文件,
随机输入一些单词
1 2 3 4
| java hadoop spark python scala hive hive hbase scala spark java php spark hadoop
|
运行 hadoop
的 wordcount mapreduce
示例
1
| hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount words output
|
查看output
目录下生成了两个文件 part-r-00000
和 _SUCCESS
_SUCCESS
说明运行成功了,我们查看 part-r-00000
的输出结果
1 2 3 4 5 6 7 8
| hadoop 2 hbase 1 hive 2 java 2 php 1 python 1 scala 2 spark 3
|
Windows
环境
windows
需要配置 hadoop
环境,配置 HADOOP_HOME
环境变量
windows
环境需要 hadoop.dll
动态链接库, winutils.exe
文件。
关于这些文件,我们可以选择自己编译,也可以下载别人已经编译好的。
贴心的博主在github
找到了已经编译好的hadoop2.7.7文件。
- 将
hadoop2.7.7
下载下来, 配置好环境 HADOOP_HOME
以及 PATH
变量。(可选) - 将 bin 目录下的
hadoop.dll
复制到 C:\Windows\System32
下。
windows
我们直接使用 IDE
写一个 wordcount
示例运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
public class WordCount {
static { System.setProperty("hadoop.home.dir","D:\\Program Files\\hadoop-2.7.7"); }
public static class WordCountMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable ONE = new IntWritable(1); private Text text = new Text();
@Override 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()) { String token = tokenizer.nextToken(); if (StringUtils.isNotBlank(token)) { text.set(token); output.collect(text, ONE); } } } }
private static class WordCountReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
@Override 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 IOException { JobConf conf = new JobConf(WordCount.class); conf.setJobName("WordCount"); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(WordCountMapper.class); conf.setCombinerClass(WordCountReducer.class); conf.setReducerClass(WordCountReducer.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path("words")); FileOutputFormat.setOutputPath(conf, new Path("output")); JobClient.runJob(conf); } }
|
运行一下,看看结果。

我们再看一下输出目录 output
。

_SUCCESS
说明运行成功了,我们查看 part-00000
的输出结果。
1 2 3 4 5 6 7 8
| hadoop 2 hbase 1 hive 2 java 2 php 1 python 1 scala 2 spark 3
|