本文目录导读:
Hadoop伪分布式集群搭建全流程
环境准备
1、操作系统
图片来源于网络,如有侵权联系删除
- 选择合适的Linux操作系统,如CentOS 7,确保系统已经安装并且网络连接正常。
2、软件安装包
- 下载Hadoop安装包,可以从官方网站(https://hadoop.apache.org/)下载稳定版本的Hadoop,例如hadoop - 3.3.0。
- 同时确保系统已经安装了Java开发工具包(JDK),因为Hadoop是基于Java开发的,可以通过命令java -version
来检查JDK是否安装以及版本信息,如果没有安装,需要先安装JDK。
安装JDK(如果未安装)
1、下载JDK
- 从Oracle官方网站(https://www.oracle.com/java/technologies/javase - downloads.html)下载适合Linux系统的JDK版本。
2、安装JDK
- 将下载的JDK安装包上传到服务器,例如使用scp
命令。
- 解压安装包,例如tar -zxvf jdk - 11.0.11_linux - x64_bin.tar.gz
。
- 设置环境变量,编辑/etc/profile
文件,添加以下内容:
```bash
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
```
- 使环境变量生效,执行source /etc/profile
。
安装和配置Hadoop
1、安装Hadoop
- 解压Hadoop安装包到指定目录,例如tar -zxvf hadoop - 3.3.0.tar.gz -C /usr/local/
。
- 重命名解压后的文件夹为hadoop
,方便管理,如mv hadoop - 3.3.0 hadoop
。
2、配置Hadoop环境变量
- 编辑/etc/profile
文件,添加以下内容:
```bash
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
```
- 执行source /etc/profile
使环境变量生效。
3、配置Hadoop核心文件
- 进入$HADOOP_HOME/etc/hadoop
目录。
hadoop - env.sh
- 编辑hadoop - env.sh
文件,设置JAVA_HOME
变量为之前安装JDK的路径,例如export JAVA_HOME = /usr/local/jdk
。
core - site.xml
- 在core - site.xml
文件中添加以下配置:
```xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
```
hdfs - site.xml
- 编辑hdfs - site.xml
文件,添加如下配置:
```xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
图片来源于网络,如有侵权联系删除
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
```
格式化HDFS
1、执行hdfs namenode - format
命令。
- 此命令会初始化HDFS文件系统,创建必要的目录结构,如/usr/local/hadoop/hdfs/name
等。
- 注意,如果格式化多次可能会导致数据丢失,除非是在重新搭建环境的情况下。
启动Hadoop服务
1、启动HDFS服务
- 执行start - dfs.sh
命令。
- 通过命令jps
可以查看启动的进程,应该能看到NameNode
和DataNode
进程。
2、启动YARN(如果需要)
- 编辑mapred - site.xml
(如果不存在,可以从模板复制),添加以下配置:
```xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
```
- 编辑yarn - site.xml
,添加如下配置:
```xml
<configuration>
<property>
<name>yarn.nodemanager.aux - services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
</configuration>
```
- 执行start - yarn.sh
命令,通过jps
命令可以看到ResourceManager
和NodeManager
进程启动。
测试Hadoop集群
1、HDFS测试
- 使用hdfs dfs -mkdir /test
命令在HDFS上创建一个名为/test
的目录。
- 可以使用hdfs dfs -ls /
命令查看HDFS根目录下的文件和目录,应该能看到刚刚创建的/test
目录。
2、MapReduce测试(简单示例)
- 创建一个简单的MapReduce示例文件,例如wordcount.java
,代码如下:
```java
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
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.Mapper;
图片来源于网络,如有侵权联系删除
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true)? 0 : 1);
}
}
```
- 编译这个Java文件,确保已经安装了hadoop - common
依赖库,使用javac -classpath /usr/local/hadoop/share/hadoop/common/hadoop - common - 3.3.0.jar WordCount.java
。
- 创建输入文件,例如input.txt
为一些单词。
- 将输入文件上传到HDFS,使用hdfs dfs -put input.txt /input
。
- 运行MapReduce作业,使用hadoop jar WordCount.jar /input /output
。
- 查看输出结果,可以使用hdfs dfs -cat /output/part - r - 00000
。
通过以上步骤,就完成了Hadoop伪分布式集群的搭建、配置和基本测试,在实际应用中,可以根据需求进一步优化配置和开发复杂的大数据处理应用。
评论列表