搭建:離線部署 CDH 5.12.1 及部署 Hadoop 集群服務(wù)
第一章 - 引言
CDH(Cloudera's Distribution Including Apache Hadoop)是一套基于 Apache Hadoop 的大數(shù)據(jù)解決方案,提供了分布式存儲和計算能力。在本文中,我們將詳細介紹如何離線部署 CDH 5.12.1,并搭建一個 Hadoop 集群服務(wù),幫助你快速搭建大數(shù)據(jù)處理平臺。
第一節(jié) - 準備工作
步驟一:下載 CDH 5.12.1 安裝包
首先,你需要從 Cloudera 官方網(wǎng)站(https://www.cloudera.com/)下載 CDH 5.12.1 的離線安裝包。
步驟二:準備服務(wù)器
在搭建 Hadoop 集群之前,你需要準備一組服務(wù)器。確保這些服務(wù)器能夠相互通信,并且滿足 Hadoop 的硬件和操作系統(tǒng)要求。
第二節(jié) - 離線部署 CDH 5.12.1
步驟一:上傳安裝包
將下載的 CDH 5.12.1 安裝包上傳到所有服務(wù)器的相同目錄下。
步驟二:解壓安裝包
在所有服務(wù)器上執(zhí)行以下命令,解壓 CDH 5.12.1 安裝包:
$ tar?-xzvf?CDH-5.12.1.tar.gz
步驟三:安裝依賴包
在所有服務(wù)器上執(zhí)行以下命令,安裝 CDH 5.12.1 所需的依賴包:
$ sudo?yum install?-y?java-1.8.0-openjdk-devel
$ sudo?yum install?-y?mysql-connector-java
步驟四:配置主機名
在所有服務(wù)器上執(zhí)行以下命令,配置主機名:
$ sudo?hostnamectl set-hostname <hostname>
其中 <hostname>
是服務(wù)器的主機名。
步驟五:設(shè)置 hosts 文件
在所有服務(wù)器上執(zhí)行以下命令,編輯 /etc/hosts
文件:
$ sudo?vi?/etc/hosts
添加所有服務(wù)器的 IP 地址和主機名:
<server1_IP> <server1_hostname>
<server2_IP> <server2_hostname>
...
保存并退出文件。
第三節(jié) - 部署 Hadoop 集群服務(wù)
步驟一:配置 SSH 免密登錄
在其中一臺服務(wù)器上執(zhí)行以下命令,生成 SSH 密鑰并將其分發(fā)到其他服務(wù)器上:
$ ssh-keygen?-t?rsa
$ ssh-copy-id?<server2>
$ ssh-copy-id?<server3>
...
其中 <server2>
、<server3>
等是其他服務(wù)器的主機名。
步驟二:配置 Hadoop 集群
在其中一臺服務(wù)器上執(zhí)行以下命令,配置 Hadoop 集群的相關(guān)文件:
步驟一:編輯 core-site.xml 文件
在其中一臺服務(wù)器上,編輯 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 的服務(wù)器的主機名。
步驟二:編輯 hdfs-site.xml 文件
在同一臺服務(wù)器上,編輯 hdfs-site.xml
文件:
$ sudo?vi?hdfs-site.xml
將以下配置添加到文件中:
<configuration>
<property>
?<name>dfs.replication</name>
?<value>3</value>
</property>
</configuration>
這將設(shè)置副本數(shù)量為 3,即每個數(shù)據(jù)塊將在集群中的 3 個節(jié)點上進行復制。
步驟三:編輯 yarn-site.xml 文件
在同一臺服務(wù)器上,編輯 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 的服務(wù)器的主機名。
步驟四:編輯 mapred-site.xml 文件
在同一臺服務(wù)器上,編輯 mapred-site.xml
文件:
$ sudo?vi?mapred-site.xml
將以下配置添加到文件中:
<configuration>
<property>
?<name>mapreduce.framework.name</name>
?<value>yarn</value>
</property>
</configuration>
步驟五:分發(fā)配置文件
在同一臺服務(wù)器上,執(zhí)行以下命令,將配置文件分發(fā)到其他服務(wù)器上:
$ 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>
等是其他服務(wù)器的主機名,<hadoop_path>
是 Hadoop 安裝目錄的路徑。
步驟六:格式化 HDFS
在其中一臺服務(wù)器上,執(zhí)行以下命令,格式化 HDFS:
$ hdfs?namenode?-format
步驟七:啟動 Hadoop 服務(wù)
在其中一臺服務(wù)器上,執(zhí)行以下命令,啟動 Hadoop 服務(wù):
$ start-dfs.sh
$ start-yarn.sh
步驟八:驗證 Hadoop 集群
在瀏覽器中訪問其中一臺服務(wù)器的主機名和端口號 50070
(如 http://<nam enode>:50070)來訪問 Hadoop 的 Web UI,確保集群已成功部署并運行。
第四節(jié) - 案例:使用 Hadoop 集群進行數(shù)據(jù)處理
現(xiàn)在,你已經(jīng)成功搭建了 CDH 5.12.1 的離線部署和 Hadoop 集群服務(wù)。接下來,我們將演示如何使用 Hadoop 集群進行數(shù)據(jù)處理。
案例:WordCount
我們將使用經(jīng)典的 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
。
在集群的其中一臺服務(wù)器上,執(zhí)行以下命令運行 WordCount 作業(yè):
$ hadoop?jar WordCount.jar WordCount <input_path> <output_path>
其中 <input_path>
是輸入文件的路徑,<output_path>
是輸出結(jié)果的路徑。
第五節(jié) - 結(jié)語
通過本文的介紹,你已經(jīng)學習了如何離線部署 CDH 5.12.1 和搭建 Hadoop 集群服務(wù)。你還了解了如何使用 Hadoop 集群進行數(shù)據(jù)處理,并通過一個簡單的 WordCount 案例進行了演示。
希望本文能夠幫助你快速搭建起一個可靠的大數(shù)據(jù)處理平臺,并了解了如何使用 Hadoop 集群進行數(shù)據(jù)處理。
CDH 提供了強大的分布式存儲和計算能力,可以滿足大規(guī)模數(shù)據(jù)處理的需求。通過搭建 Hadoop 集群,你可以充分利用集群的計算資源,實現(xiàn)高效的數(shù)據(jù)處理和分析。
希望本文對你理解和使用 CDH 5.12.1 及 Hadoop 集群服務(wù)有所幫助。愿你在大數(shù)據(jù)處理的道路上取得更大的成功!