搭建:离线部署 CDH 5.12.1 及部署 Hadoop 集群服务
第一章 - 引言
CDH(Cloudera's Distribution Including Apache Hadoop)是一套基于 Apache Hadoop 的大数据解决方案,提供了分布式存储和计算能力。在本文中,我们将详细介绍如何离线部署 CDH 5.12.1,并搭建一个 Hadoop 集群服务,帮助你快速搭建大数据处理平台。
第一节 - 准备工作
步骤一:下载 CDH 5.12.1 安装包
首先,你需要从 Cloudera 官方网站(https://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://<nam enode>: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 集群服务有所帮助。愿你在大数据处理的道路上取得更大的成功!