搭建:离线部署 CDH 5.12.1 及部署 Hadoop 集群服务

172 阅读3分钟

第一章 - 引言

CDH(Cloudera's Distribution Including Apache Hadoop)是一套基于 Apache Hadoop 的大数据解决方案,提供了分布式存储和计算能力。在本文中,我们将详细介绍如何离线部署 CDH 5.12.1,并搭建一个 Hadoop 集群服务,帮助你快速搭建大数据处理平台。

第一节 - 准备工作

步骤一:下载 CDH 5.12.1 安装包

首先,你需要从 Cloudera 官方网站(www.cloudera.com/)下载 CDH 5.12.1 的离线安装包。

步骤二:准备服务器

在搭建 Hadoop 集群之前,你需要准备一组服务器。确保这些服务器能够相互通信,并且满足 Hadoop 的硬件和操作系统要求。

第二节 - 离线部署 CDH 5.12.1

步骤一:上传安装包

将下载的 CDH 5.12.1 安装包上传到所有服务器的相同目录下。

步骤二:解压安装包

在所有服务器上执行以下命令,解压 CDH 5.12.1 安装包:

$ tar -xzvf CDH-5.12.1.tar.gz

步骤三:安装依赖包

在所有服务器上执行以下命令,安装 CDH 5.12.1 所需的依赖包:

$ sudo yum install -y java-1.8.0-openjdk-devel

$ sudo yum install -y mysql-connector-java

步骤四:配置主机名

在所有服务器上执行以下命令,配置主机名:

$ sudo hostnamectl set-hostname <hostname>

其中 <hostname> 是服务器的主机名。

步骤五:设置 hosts 文件

在所有服务器上执行以下命令,编辑 /etc/hosts 文件:

$ sudo vi /etc/hosts

添加所有服务器的 IP 地址和主机名:

<server1_IP> <server1_hostname>

<server2_IP> <server2_hostname>

...

保存并退出文件。

第三节 - 部署 Hadoop 集群服务

步骤一:配置 SSH 免密登录

在其中一台服务器上执行以下命令,生成 SSH 密钥并将其分发到其他服务器上:

$ ssh-keygen -t rsa

$ ssh-copy-id <server2>

$ ssh-copy-id <server3>

...

其中 <server2><server3> 等是其他服务器的主机名。

步骤二:配置 Hadoop 集群

在其中一台服务器上执行以下命令,配置 Hadoop 集群的相关文件:

步骤一:编辑 core-site.xml 文件

在其中一台服务器上,编辑 core-site.xml 文件:

$ cd /path/to/hadoop/conf

$ sudo vi core-site.xml

将以下配置添加到文件中:

<configuration>

<property>

 <name>fs.defaultFS</name>

 <value>hdfs://<namenode>:8020</value>

</property>

</configuration>

其中 <namenode> 是你选择作为 NameNode 的服务器的主机名。

步骤二:编辑 hdfs-site.xml 文件

在同一台服务器上,编辑 hdfs-site.xml 文件:

$ sudo vi hdfs-site.xml

将以下配置添加到文件中:

<configuration>

<property>

 <name>dfs.replication</name>

 <value>3</value>

</property>

</configuration>

这将设置副本数量为 3,即每个数据块将在集群中的 3 个节点上进行复制。

步骤三:编辑 yarn-site.xml 文件

在同一台服务器上,编辑 yarn-site.xml 文件:

$ sudo vi yarn-site.xml

将以下配置添加到文件中:

<configuration>

<property>

 <name>yarn.resourcemanager.hostname</name>

 <value><resourcemanager></value>

</property>

<property>

 <name>yarn.nodemanager.aux-services</name>

 <value>mapreduce_shuffle</value>

</property>

</configuration>

其中 <resourcemanager> 是你选择作为 ResourceManager 的服务器的主机名。

步骤四:编辑 mapred-site.xml 文件

在同一台服务器上,编辑 mapred-site.xml 文件:

$ sudo vi mapred-site.xml

将以下配置添加到文件中:

<configuration>

<property>

 <name>mapreduce.framework.name</name>

 <value>yarn</value>

</property>

</configuration>

步骤五:分发配置文件

在同一台服务器上,执行以下命令,将配置文件分发到其他服务器上:

$ scp core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml <server2>:<hadoop_path>/conf

$ scp core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml <server3>:<hadoop_path>/conf

...

其中 <server2><server3> 等是其他服务器的主机名,<hadoop_path> 是 Hadoop 安装目录的路径。

步骤六:格式化 HDFS

在其中一台服务器上,执行以下命令,格式化 HDFS:

$ hdfs namenode -format

步骤七:启动 Hadoop 服务

在其中一台服务器上,执行以下命令,启动 Hadoop 服务:

$ start-dfs.sh

$ start-yarn.sh

步骤八:验证 Hadoop 集群

在浏览器中访问其中一台服务器的主机名和端口号 50070(如 http://:50070)来访问 Hadoop 的 Web UI,确保集群已成功部署并运行。

第四节 - 案例:使用 Hadoop 集群进行数据处理

现在,你已经成功搭建了 CDH 5.12.1 的离线部署和 Hadoop 集群服务。接下来,我们将演示如何使用 Hadoop 集群进行数据处理。

案例:WordCount

我们将使用经典的 WordCount 作为案例来演示 Hadoop 集群的使用。以下是一个简单的 Java 代码示例:

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;



import java.io.IOException;

import java.util.StringTokenizer;



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);

}

}

使用上述代码编译并打包为 WordCount.jar

在集群的其中一台服务器上,执行以下命令运行 WordCount 作业:

$ hadoop jar WordCount.jar WordCount <input_path> <output_path>

其中 <input_path> 是输入文件的路径,<output_path> 是输出结果的路径。

第五节 - 结语

通过本文的介绍,你已经学习了如何离线部署 CDH 5.12.1 和搭建 Hadoop 集群服务。你还了解了如何使用 Hadoop 集群进行数据处理,并通过一个简单的 WordCount 案例进行了演示。

希望本文能够帮助你快速搭建起一个可靠的大数据处理平台,并了解了如何使用 Hadoop 集群进行数据处理。

CDH 提供了强大的分布式存储和计算能力,可以满足大规模数据处理的需求。通过搭建 Hadoop 集群,你可以充分利用集群的计算资源,实现高效的数据处理和分析。

希望本文对你理解和使用 CDH 5.12.1 及 Hadoop 集群服务有所帮助。愿你在大数据处理的道路上取得更大的成功!