云计算实验二手册

打印 上一主题 下一主题

主题 927|帖子 927|积分 2781

云计算实验二手册,主要包罗四个部分,Hadoop的安装、Hadoop的设置、WordCount和KMeans。
  一、Hadoop本体安装

实验使用操作系统Ubuntu22.04
1. 安装java

Hadoop 根本组件及其外围项目大多是基于 Java 的,要运行 Hadoop,我们必要在系统中安装 Java 运行时情况(JRE)。有多种 JRE 可供选择,我们使用 openjdk-11 作为 JRE。Hadoop 官方文档中分析白对 Java 版本的支持情况。Hadoop 框架使用 SSH 协议与本地(或远程计算机)进行通讯,我们必要在本地计算机中安装 SSH 服务器保卫步调。
  1. sudo apt install openjdk-11-jdk openssh-server -y
复制代码
2. 创建ssh密钥并添加到本身的本地计算机

Hadoop 通常运行于分布式情况中。在这种情况下,它使用 SSH 协议与本身(或其他服务器)进行通讯,为了可以或许设置 Hadoop 更安全地与服务器进行通讯,我们为本地情况 hadoop 用户生成公-私密钥对,以支持 SSH 中的密钥对认证:
  1. ssh-keygen -b 4096 -C "for hadoop use"  # 为了方便这里可以直接一路回车,如果有需要可以自己按照提示修改
  2. ssh -p '22' 'localhost'
复制代码
上述命令生成带备注信息的长度为 4096 位的 RSA 密钥,并将密钥复制至本地计算机中,用于支持 SSH 密钥对认证方式。
这时间可以尝试使用ssh localhost,应该可以无密码登录。
3. 下载并解压hadoop

Hadoop 的各种发行版本通常从 Hadoop 官方网站的下载页面下载。
我们使用来自 Hadoop 官方网站的发行版本 3.3.6 举例。我们预备将干系发行版本安装至文件系统的 /opt 目录下。
首先从下载页面获得 Hadoop 的发行版文件:
  1. wget "https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz"
复制代码
如果以上官方链接无法访问或者速率较慢,可以使用以下命令替代:
  1. wget "https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz"
复制代码
该压缩包较大,因此下载必要的时间可能较长。
下载好压缩包后,解压到/opt目录。
  1. sudo tar -zxvf hadoop-3.3.6.tar.gz -C /opt
复制代码
二、Hadoop 设置

Hadoop 并非是单个软件,而是一系列大数据存储及处置处罚的工具集合。以是,有必要针对常用的根本组件进行设置,以完成 Hadoop 情况的搭建。
1. 设置情况变量

安装 Hadoop 后,我们必要精确设置以下情况变量。可以将这些添加情况变量的命令添加至 ~/.bashrc 文件末尾,以避免每次登录时都必要执行,注意以下命令必要一次性复制和运行,不可以分多次:
  1. cat << 'EOF' >> ~/.bashrc
  2. export HADOOP_HOME=/opt/hadoop-3.3.6
  3. export HADOOP_INSTALL=$HADOOP_HOME
  4. export HADOOP_MAPRED_HOME=$HADOOP_HOME
  5. export HADOOP_COMMON_HOME=$HADOOP_HOME
  6. export HADOOP_HDFS_HOME=$HADOOP_HOME
  7. export YARN_HOME=$HADOOP_HOME
  8. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  9. export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
  10. export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
  11. EOF
复制代码
然后执行source ~/.bashrc使设置生效或者直接重启shell。
2. 设置Hadoop根本框架

接下来的Hadoop设置操作都必要以/opt/hadoop-3.3.6/etc/hadoop作为当前路径,另外注意以下命令同样必要一次性复制和运行。

设置Hadoop 有关 Java 运行时情况(JRE)的位置信息。Hadoop 框架的根本设置文件位于 ./hadoop-env.sh 中,只必要修改其中的 JAVA_HOME 行。如果你使用其他方式(比如非标准端口)通过 SSH 客户端连接到(本地)服务器,则必要额外修改 HADOOP_SSH_OPTS 行。
  1. cat << 'EOF' >> ./hadoop-env.sh
  2. export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
  3. export HADOOP_SSH_OPTS="-p 22"
  4. EOF
复制代码
根据系统架构不同,Java 可执行文件的位置或名称是略有不同的。
如果不是/usr/lib/jvm/java-11-openjdk-amd64,必要根据现实修改。
3. 核心变量设置

Hadoop 生态的大多数组件采用 .xml文件的方式进行设置。它们采用了统一的格式:即将设置项填写在每个设置文件的 <configuration> 与 </configuration> 之间,每个设置项通过以下的方式呈现:
  1. <property>
  2. <name>配置项名称</name>
  3. <value>配置值</value>
  4. </property>
复制代码
首先必要修改./etc/hadoop/core-site.xml,我们必要设置fs.defaultFS为hdfs://localhost/,也就是说,必要把以下内容添加到./etc/hadoop/core-site.xml的<configuration> </configuration> 之间。
  1.         <property>
  2.                 <name>fs.defaultFS</name>
  3.                 <value>hdfs://localhost/</value>
  4.         </property>
复制代码
4. 设置 HDFS(Hadoop 文件系统)

为了支持Hadoop的运行,我们必要使用能支持分布式的文件系统,HDFS就是为了Hadoop使用的,你可以从这里找到HDFS的更多信息。
在使用 Hadoop 文件系统(HDFS)之前,我们必要显式设置 HDFS,以指定 NameNode 与 DataNode 的存储位置。我们操持将 NameNode 与 DataNode 存储于本地文件系统上,即存放于 ~/hdfs 中:
  1. mkdir -p ~/hdfs/namenode ~/hdfs/datanode
复制代码
然后,修改hdfs-site.xml,将以下内容放到该文件的<configuration> </configuration>之间。请注意必要更换其中的xxxx为你的ubuntu用户名
  1.         <property>
  2.                 <name>dfs.replication</name>
  3.                 <value>1</value>
  4.         </property>
  5.         <property>
  6.                 <name>dfs.name.dir</name>
  7.                 <value>/home/xxxx/hadoop/namenode</value>
  8.         </property>
  9.         <property>
  10.                 <name>dfs.data.dir</name>
  11.                 <value>/home/xxxx/hadoop/datanode</value>
  12.         </property>
复制代码
首次启动 Hadoop 情况之前,我们必要格式化 Namenode 节点数据,使用以下命令:
  1. hdfs namenode -format
复制代码
避免重复格式化
5. 设置 MapReduce(由 YARN 驱动)

MapReduce 是一种简朴的用于数据处置处罚的编程模子,YARN(Yet Another Resource Negotiator)是 Hadoop 的集群资源管理系统。
将以下内容放到mapred-site.xml的<configuration> </configuration>之间。
  1.         <property>
  2.                 <name>mapreduce.framework.name</name>
  3.                 <value>yarn</value>
  4.         </property>
  5.         <property>
  6.                 <name>yarn.app.mapreduce.am.env</name>
  7.                 <value>HADOOP_MAPRED_HOME=/opt/hadoop-3.3.6/</value>
  8.         </property>
  9.         <property>
  10.                 <name>mapreduce.map.env</name>
  11.                 <value>HADOOP_MAPRED_HOME=/opt/hadoop-3.3.6/</value>
  12.         </property>
  13.         <property>
  14.                 <name>mapreduce.reduce.env</name>
  15.                 <value>HADOOP_MAPRED_HOME=/opt/hadoop-3.3.6/</value>
  16.         </property>
复制代码
将以下内容放到yarn-site.xml的<configuration> </configuration>之间。
  1.         <property>
  2.                 <name>yarn.nodemanager.aux-services</name>
  3.                 <value>mapreduce_shuffle</value>
  4.         </property>
  5.         <property>
  6.                 <name>yarn.resourcemanager.hostname</name>
  7.                 <value>localhost</value>
  8.         </property>
复制代码
6. 启动Hadoop集群

使用以下命令:
  1. start-dfs.sh
  2. start-yarn.sh
  3. mr-jobhistory-daemon.sh start historyserver
复制代码
可能会出现ssh的提示Are you sure you want to continue connecting (yes/no/[fingerprint])?,直接yes就可以。
这将启动以下保卫进程:一个 namenode、一个辅助 namenode、一个 datanode(HDFS)、一个资源管理器、一个节点管理器(YARN)以及一个历史服务器(MapReduce)。为验证 Hadoop 干系服务启动乐成,可以使用jps命令。
你可以使用欣赏器访问该主机的 9870 端口,以查看 HFS 的干系情况,如果统统正常,应该能在欣赏器看到以下类似画面。

大功告成!此时hadoop根本的组件已经安装完成。如果你发现某些组件未按预期工作,你可以在 Hadoop 安装目录的 ./logs 下找到各服务对应的运行日记进行排查。
三、WordCount实验

1.安装maven

首先使用命令sudo apt-get install maven。
将设置文件复制到~/.m2目录:
  1. mkdir ~/.m2 && cp /etc/maven/settings.xml ~/.m2
复制代码
编辑~/.m2/settings.xml文件,将以下内容添加到<mirrors></mirrors>中间。
  1. <mirror>
  2.     <id>alimaven</id>
  3.     <name>aliyun maven</name>
  4.     <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
  5.     <mirrorOf>central</mirrorOf>
  6. </mirror>
复制代码
2. 创建项目

使用以下命令,这将在当前文件夹创建一个workcount文件夹,请选择一个合适的路径来创建项目。
如果下载速率慢,确认依靠包下载路径是否为aliyun,如果不是则查抄~/.m2/settings.xml设置文件文件
  1. mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=cn.edu.seu.ys -DartifactId=wordcount -DpackageName=cn.edu.seu.experiment -Dversion=1.0-SNAPSHOT -DinteractiveMode=false         
复制代码
3. 编辑pom.xml

进入workcount文件夹,下面的操作可以直接使用vim或者gedit如许简朴的文本编辑器,或者为了方便也可以使用VSCode之类的文本编辑器或者IDEA之类的Java IDE。
编辑pom.xml,在<dependencies></dependencies>之间添添加如下内容:
::: details
  1. <dependency>
  2.   <groupId>commons-cli</groupId>
  3.   <artifactId>commons-cli</artifactId>
  4.   <version>1.2</version>
  5. </dependency>
  6. <dependency>
  7.   <groupId>commons-logging</groupId>
  8.   <artifactId>commons-logging</artifactId>
  9.   <version>1.2</version>
  10. </dependency>
  11. <dependency>
  12.   <groupId>org.apache.hadoop</groupId>
  13.   <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
  14.   <version>2.8.5</version>
  15.   <scope>provided</scope>
  16. </dependency>
  17. <dependency>
  18.   <groupId>org.apache.hadoop</groupId>
  19.   <artifactId>hadoop-common</artifactId>
  20.   <version>2.8.5</version>
  21.   <scope>provided</scope>
  22. </dependency>
复制代码
在</dependencies>背面增加如下内容:
  1. <build>
  2.   <plugins>
  3.     <plugin>
  4.       <groupId>org.apache.maven.plugins</groupId>
  5.       <artifactId>maven-compiler-plugin</artifactId>
  6.       <configuration>
  7.         <source>1.7</source>
  8.         <target>1.7</target>
  9.       </configuration>
  10.     </plugin>
  11.   </plugins>
  12. </build>
复制代码
使用mvn clean install -DskipTests同步依靠,或者直接使用IDE。
新建src/main/java/cn/edu/seu/{你的姓名}/WordCount.java
内容如下,就是给出的word文档里面的原文没有修改,注意更换第一行的包名:
  1. package cn.edu.seu.liyaning;
  2. import java.io.IOException;
  3. import java.util.StringTokenizer;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.fs.Path;
  6. import org.apache.hadoop.io.IntWritable;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.mapreduce.Job;
  9. import org.apache.hadoop.mapreduce.Mapper;
  10. import org.apache.hadoop.mapreduce.Reducer;
  11. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  12. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  13. import org.apache.hadoop.util.GenericOptionsParser;
  14. public class WordCount {
  15.     public static class TokenizerMapper
  16.             extends Mapper<Object, Text, Text, IntWritable>{
  17.         private final static IntWritable one = new IntWritable(1);
  18.         private Text word = new Text();
  19.         public void map(Object key, Text value, Context context
  20.         ) throws IOException, InterruptedException {
  21.             StringTokenizer itr = new StringTokenizer(value.toString());
  22.             while (itr.hasMoreTokens()) {
  23.                 word.set(itr.nextToken());
  24.                 context.write(word, one);
  25.             }
  26.         }
  27.     }
  28.     public static class IntSumReducer
  29.             extends Reducer<Text,IntWritable,Text,IntWritable> {
  30.         private IntWritable result = new IntWritable();
  31.         public void reduce(Text key, Iterable<IntWritable> values,
  32.                            Context context
  33.         ) throws IOException, InterruptedException {
  34.             int sum = 0;
  35.             for (IntWritable val : values) {
  36.                 sum += val.get();
  37.             }
  38.             result.set(sum);
  39.             context.write(key, result);
  40.         }
  41.     }
  42.     public static void main(String[] args) throws Exception {
  43.         Configuration conf = new Configuration();
  44.         String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
  45.         if (otherArgs.length < 2) {
  46.             System.err.println("Usage: wordcount <in> [<in>...] <out>");
  47.             System.exit(2);
  48.         }
  49.         Job job = Job.getInstance(conf, "word count");
  50.         job.setJarByClass(WordCount.class);
  51.         job.setMapperClass(TokenizerMapper.class);
  52.         job.setCombinerClass(IntSumReducer.class);
  53.         job.setReducerClass(IntSumReducer.class);
  54.         job.setOutputKeyClass(Text.class);
  55.         job.setOutputValueClass(IntWritable.class);
  56.         for (int i = 0; i < otherArgs.length - 1; ++i) {
  57.             FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
  58.         }
  59.         FileOutputFormat.setOutputPath(job,
  60.                 new Path(otherArgs[otherArgs.length - 1]));
  61.         System.exit(job.waitForCompletion(true) ? 0 : 1);
  62.     }
  63. }
复制代码
:::
然后使用命令mvn clean install -Dmaven.test.skip=true打包,应该可以看到当前目录的target文件夹下多了一个wordcount-1.0-SNAPSHOT.jar文件。
4. 在HDFS中创建一个文本文件

  1. hdfs dfs -mkdir /txtdir # 创建文件夹
  2. hdfs dfs -ls /  # 应该可以看到textdir这个文件夹
复制代码
在本地创建一个test.txt,随便写一些内容,原版实验手册中给出的文本内容如下:
  1. Long long ago, there is one cat that is expected at using the cat utility on Linux. One day, it saw a spring in the spring in spring. He is astonished and laughing to death.
  2. Years later, people mark the 9 May as the Dying Cat Linux Day to celebrate the people who is struggling at using Linux.
  3. Written by a people who loves cat.
  4. Please add your own student id and name here:
  5. 1845** Zhang Shan
复制代码
然后把这个文件放到hdfs中去:
  1. hdfs dfs -put test.txt /txtdir/
  2. hdfs dfs -ls /txtdir
复制代码
5. 使用Hadoop运行编译的jar文件

进入wordcount项目目录下,注意更换其中的文件真实路径以及包名:
  1. hadoop jar ./target/wordcount-1.0-SNAPSHOT.jar cn.edu.seu.ys.WordCount /txtdir/test.txt /txtdir/output/
复制代码
等待大概1分钟之后运行完毕,使用hdfs dfs -ls /miao/output命令可以看到有一个_SUCCESS文件和一个part-r-00000文件。
使用hdfs dfs -cat /txtdir/output/part-r-00000可以看到运行的结果。

Hadoop实验完成。
四、KMeans实验

1. 预备干系文件

首先解压KMeans.zip。
  1. unzip KMeans.zip
  2. cd KMeans/
复制代码
使用java -jar ProcessCorpus.jar将文本文件转化成词向量,该步调会要求你输入一些信息,可以按照以下内容输入:
Enter the directory where the corpus is located: 20_newsgroups
Enter the name of the file to write the result to: vectors
Enter the max number of docs to use in each subdirectory: 100
How many of those words do you want to use to process the docs? 10000
使用java -jar GetCentroids.jar初始化集群起始点,该步调会要求你输入一些信息,可以按照以下内容输入:
Enter the data file to select the clusters from: vectors
Enter the name of the file to write the result to: clusters
Enter the number of clusters to select: 20
然后把刚刚创建的文件复制到HDFS中:
  1. hdfs dfs -mkdir /data
  2. hdfs dfs -mkdir /clusters
  3. hdfs dfs -copyFromLocal vectors /data
  4. hdfs dfs -copyFromLocal clusters /clusters
复制代码
2. 构建项目

首先使用如下命令创建项目,请注意必要更换其中的ys为你的ubuntu用户名。
  1. mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=cn.edu.seu.ys -DartifactId=kmeans_project -DpackageName=cn.edu.seu.ys -Dversion=1.0-SNAPSHOT -DinteractiveMode=false
复制代码
然后编辑pom.xml,操作方法同wordcount中的pom.xml。
再然后,把KMeans文件夹中,KMeans/MapRedKMeans下的所有文件复制到kmeans_project/src/main/java/cn/edu/seu/XXX/,可能根据必要修改以下命令:
  1. cp ./KMeans/MapRedKMeans/* ./kmeans_project/src/main/java/cn/edu/seu/ys/
复制代码
然后进入kmeans_project目录使用mvn clean install -Dmaven.test.skip=true构建项目,应该可以看到当前目录的target文件夹下多了一个kmeans-1.0-SNAPSHOT.jar文件。
3. 运行项目

使用命令提交到Hadoop运行:
  1. hadoop jar target/kmeans-1.0-SNAPSHOT.jar KMeans /data /clusters 3
复制代码
其中3是kmeans的迭代次数,可以本身定义,当然次数越多必要的时间可能也越久。
执行完毕后,使用命令将结果从HDFS拷贝回本地,方便后续查抄结果:
  1. hdfs dfs -copyToLocal /clustersXXX/part-r-00000 # 替换XXX为你的迭代次数
复制代码
4. 查抄结果

使用命令java -jar GetDistribution.jar运行查抄结果的jar文件。按照如下信息输入:
Enter the file with the data vectors: vectors
Enter the name of the file where the clusers are loated: part-r-00000
结果信息:

::: tip 参考链接
PeaceSheep’s blog 云计算实验二手册
在 Ubuntu 22.04 LTS 上搭建 Hadoop 情况
Hadoop官网
:::

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表