云计算与海量数据管理实验

这篇具有很好参考价值的文章主要介绍了云计算与海量数据管理实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

撰文目的:记录 NUAA 2022-2023 学年第一学期选修实验课的过程,也希望对后面学这门课程的同学有所帮助。

主要参考链接:https://blog.csdn.net/catharryy/article/details/9186757

Hadoop实验教程部分由老师给出,这部分内容非常详细,我在自己实践的基础上稍加改动了一些。

Hadoop实验教程

一、安装虚拟机软件VirtualBox (Vmware Workstation也可)

这里我选择的是Vmware Workstation。

二、使用VirtualBox新建虚拟机并安装Ubuntu系统

提示:硬盘不要分太小,后续计算有出问题的可能性

Ubuntu镜像下载地址  https://ubuntu.com/download/desktop

若遇到关于虚拟机的安装问题,请自行解决,此处不做过多阐述。

唯一要提醒大家的是:虚拟机用户名尽量能体现自己的身份(比如名字拼写之类的),这样就可以跳过第三个步骤了。

三、创建一个新账户(教程中红色hadoop为用户名,黑色hadoop为文件夹)

  1、使用CTRL+ALT+T打开命令行终端,输入命令创建新用户

    sudo useradd -m hadoop -s /bin/bash  

    说明:-m表示自动创建用户目录(/home/hadoop),hadoop是用户名,-s表示使用/bin/bash作为shell  (注意用户名能体现是自己做的)

  2、给新用户设置密码

    sudo passwd hadoop

    说明:输入两次新密码

  3、给新用户增加管理员权限

    sudo adduser hadoop sudo

  4、注销当前用户,并以新用户登录(登录新建的hadoop账户)

四、在Ubuntu中挂载共享文件夹

VirtualBox

  1、“设备”->“共享文件夹”,记住共享文件夹的共享名

  2、“设备”->“安装增强功能“

    说明:安装好了,桌面上会出现光盘图标VBox_GAs_5.2.18和一个虚拟盘sf_VirtualBoxShare

3、进入目录/media/hadoop/VBox_GAs_5.2.18,执行命令./VBoxLinuxAddtion.run

  4、将共享文件夹挂载到Ubuntu的一个文件夹

    (1)创建挂载的目标文件夹

      mkdir ~/share

    (2)挂载

      格式:mount -t vboxsf 共享名 本地目录

      mount -t vboxsf VirtualBoxShare ~/share

      说明:VirtualBox是共享文件夹的共享名,share目录需要事先在家目录(~,即/home/hadoop) 下创建

  5、设置vbox共享粘贴板

    “设备”->“共享粘贴板”->“双向“

    说明:这样在真机和虚拟机之间可以任意的复制和粘贴。

Vmware Workstation

1.依次点击VMWare窗口左上方的“虚拟机”、“设置”

2.弹出的对话框中依次点击“选项”、“共享文件夹”、“下一步”

3.选择要共享的文件夹路径,并填写名称。

云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

4.进入虚拟机,安装VMware Tools:依次点击“虚拟机”、“重新安装VMware Tools”(1. 具体安装方法自行查找2. 如果该选项是灰色,说明已经安装好,无需再次安装

5.至此,在/mnt/hgfs/下应该就能看到刚才在虚拟机中设置的windows下的共享文件夹vmshare了

云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

6.如果到上面一步时/mnt/hgfs/下没有共享文件夹,再加一条命令即可:

vmhgfs-fuse .host:/  /mnt/hgfs/

这时把你在windows下的文件放入共享文件夹vmshare中,再回到Ubuntu中,cd 到/mnt/hgfs/vmshare,就可以看到这些共享的文件了。

云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

五、安装一些必要的工具

  1、更新apt-get

    sudo apt-get update (执行这一步之前可将用户模式切换到根模式——输入sudo -s)

    说明:apt-get是用来安装软件的工具

  2、安装ssh服务

    apt-get install openssh-server

    说明:ssh是机器之间远程登录的服务

  3、安装vim (如果不习惯使用vim编辑器可不安装)

    apt-get install vim 

六、配置免密登录

  1、禁用防火墙  

    ufw disable

    ufw status //查看防火墙状态

2、生成密钥对

      ssh localhost(测试一下 SSH 是否可用,要在用户模式下登录——在此之前输入 su hadoop

      exit

    云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

    cd ~/.ssh

    ssh-keygen -t rsa

    说明:一路回车,在~/.ssh目录会生成一个两个文件,id_rsa和id_rsa.pub

  3、将公钥复制到localhost

    ssh-copy-id localhost

    说明:也可cat  ./id_rsa.pub >> ./authorized_keys,这样~/.ssh目录又会多一个文件authorized_keys

  4、登录测试  

    ssh localhost (看是否需要输入密码

  5、退出与localhost的连接

    exit

七、安装并配置jdk

  1、在家目录(~)下新建/app 文件夹

    mkdir ~/app

     说明:后面的jdk、hadoop等都安装在此

2、在真机中将jdk、hadoop的安装包复制到真机的共享文件夹中

jdk、hadoop安装包下载地址(hadoop尽量下载最新的适用版本,jdk下载jdk8的版本

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.10.1/

  3、安装jdk

tar -zxvf /mnt/hgfs/vmshare/jdk-8u311-linux-x64.tar.gz -C ~/app

    mv ~/app/jdk1.8.0_311 ~/app/jdk   (注意文件名匹配)

  4、配置jdk

  (1)编辑配置文件.bashrc

    vim ~/.bashrc (不习惯用vim编辑器可改用 gedit ~/.bashrc,下同)(稍微提一下vim,可能经常用到的:i -> 插入模式,此时可以在文件任意位置编辑内容;编辑完成后,按下Esc键,依次输入 :wq 即可完成保存

     export JAVA_HOME=/home/hadoop/app/jdk
     export JRE_HOME=$JAVA_HOME/jre
     export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
     export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

                这段内容可以复制到文件末尾,注意修改红字部分

  (2)编译配置文件

    source ~/.bashrc

  (3)测试jdk

    java -version

云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

八、安装hadoop

  1、安装hadoop

   tar -zxvf /mnt/hgfs/vmshare/hadoop-2.10.1.tar.gz -C ~/app //解压

   mv ~/app/hadoop-2.10.1 ~/app/hadoop //改名 (注意文件名匹配)

        sudo chown -R hadoop ./hadoop //修改hadoop权限

  2、配置hadoop

    (1)配置环境变量

      vim ~/.bashrc,添加或修改以下语句:

export HADOOP_HOME=/app/hadoop

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

      source ~/.bashrc //编译生效

    (2)配置hadoop-env.sh

      vim ~/app/hadoop/etc/hadoop/hadoop-env.sh

      找到export JAVA_HOME=${JAVA_HOME}这一行,将其修改为:
      export JAVA_HOME=/home/hadoop/app/jdk

    (3)配置core-site.xml (均位于~/app/hadoop/etc/hadoop/,下同)  

      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://localhost:9000</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/home/hadoop/app/hadoop/tmp</value>

        </property>
      </configuration>

    (4)配置hdfs-site.xml    

      <configuration>
        <property>

          <!--配置块的副本数 -->
          <name>dfs.replication</name>
          <value>1</value>
        </property>
      </configuration>

    (5)配置mapred-site.xml

      说明:需将mapred-site.xml.template复制成mapred-site.xml

      <configuration>
        <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
        </property>
      </configuration>

    (6)配置yarn-site.xml

      <configuration>

        <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
      </configuration>

九、运行hadoop

  1、格式化namenode

    cd ~/app/hadoop/bin

./hadoop namenode -format

    说明:首次运行须格式化,以后运行就不需要这一步。格式化后会在core-site.xml中hadoop.tmp.dir所指定的目录中生成name文件夹。

  2、运行hadoop (要在用户模式下)

    cd ~/app/hadoop/sbin

    ./start-all.sh

  3、查看进程:

    jps     

      14262 NameNode
      15976 NodeManager
      14385 DataNode
      15884 ResourceManager
      14601 SecondaryNameNode
      16120 Jps
    如果出现以上进程(前面的数字不一定一致),说明hadoop环境搭建成功,分布式系统启动完成。  

  4、webUI查看(在虚拟机中的网络浏览器查看)

    http://localhost:50070 //查看hdfs

    http://localhost:8088 //查看mapreduce作业情况

十、测试wordcount程序

  1、生成单词文件

    mkdir ~/tmp
    echo 'hello world hello hadoop' > ~/tmp/word1.txt
    echo 'hive run on hadoop' > ~/tmp/word2.txt  

  2、上传至hdfs

    (1)在hdfs上新建输入数据的目录(~/app/hadoop/bin目录下)
      ./hdfs dfs -mkdir /input
    (2)上传文件

      ./hdfs dfs -put ~/tmp/word*.txt /input

  3、运行hadoop自带的单词计数程序  

    ./hadoop jar ~/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input output

注:这里的红字部分可能需要修改,这时你需要去对应的路径下查看文件名,按实际情况进行修改,比如我在做这一步骤的时候,就将2.7.3修改成了2.10.1

云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

4、查看结果

./hdfs dfs -cat /user/hadoop/output/part-r-00000

    可以看到每个单词出现的次数

十一、实现并测试矩阵相乘程序(必做)

由于伪分布式环境下,节点性能有限,尤其是跑在虚拟机环境下,试了一下跑500*500的矩阵,Map到66%左右就发现虚拟机硬盘爆了,所以,为了测试算法的正确性,下面使用50*50的矩阵来运行。只要算法是恰当的,数据规模可以随硬件支持程度而改变。


参考博客 https://blog.csdn.net/catharryy/article/details/9186757

若对具体实现思路有兴趣,可以看看上面这篇文章,这里只说要实际操作的部分。

1、在~/app/hadoop目录下新建一个名为 local_matrix 的文件夹

2、在 local_matrix 文件夹下新建一个名为 MartrixMultiplication 的java文件,

参考 https://github.com/intergret/snippet/blob/master/MartrixMultiplication.java

文件内容如下(在链接所示的代码基础上略微改动):

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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 org.apache.hadoop.util.GenericOptionsParser;


public class MartrixMultiplication{

  public static class MartrixMapper extends Mapper<Object, Text, Text, Text>{
    
    private Text map_key = new Text();
    private Text map_value = new Text();
    
    int rNumber = 50;
    int cNumber = 50;
    String fileTarget;
    String i, j, k, ij, jk;
    
      
    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
      
        String eachterm[] = value.toString().split("#");
        fileTarget = eachterm[0];
        
        if(fileTarget.equals("M")){
          i = eachterm[1];
          j = eachterm[2];
          ij = eachterm[3];
            
          for(int c = 1; c<=cNumber; c++){
              map_key.set(i + "#" + String.valueOf(c));
              map_value.set("M" + "#" + j + "#" + ij);
              context.write(map_key, map_value);
          }
            
        }else if(fileTarget.equals("N")){
          j = eachterm[1];
          k = eachterm[2];
          jk = eachterm[3];

          for(int r = 1; r<=rNumber; r++){
              map_key.set(String.valueOf(r) + "#" +k);
              map_value.set("N" + "#" + j + "#" + jk);
              context.write(map_key, map_value);
          }
        }
    }

  } 
  
  
  public static class MartrixReducer extends Reducer<Text,Text,Text,Text> {
    
    private Text reduce_value = new Text();
    
    int jNumber = 50;

    int M_ij[] = new int[jNumber+1];
    int N_jk[] = new int[jNumber+1];

    int j, ij, jk;

    String fileTarget;
    int jsum = 0;
    
    public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
      
      jsum = 0; 

      for (Text val : values) {
        String eachterm[] = val.toString().split("#");
        
        fileTarget = eachterm[0];
        j = Integer.parseInt(eachterm[1]);
        
        if(fileTarget.equals("M")){
      	  ij = Integer.parseInt(eachterm[2]);
      	  M_ij[j] = ij;
        }else if(fileTarget.equals("N")){
      	  jk = Integer.parseInt(eachterm[2]);
      	  N_jk[j] = jk;
        }
        
      }
      
      for(int d = 1; d<=jNumber; d++){
    	 jsum +=  M_ij[d] * N_jk[d];
      }
      
      reduce_value.set(String.valueOf(jsum));
      context.write(key, reduce_value); 
    }

  }
  

  public static void main(String[] args) throws Exception {

      Configuration conf = new Configuration();
      String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
      if (otherArgs.length != 2) {
	  System.err.println("Usage: MartrixMultiplication <in> <out>");
	  System.exit(2);
      }
	    
      Job job = new Job(conf, "martrixmultiplication");
      job.setJarByClass(MartrixMultiplication.class);
      job.setMapperClass(MartrixMapper.class);
      job.setReducerClass(MartrixReducer.class);
	    
      job.setOutputKeyClass(Text.class);
      job.setOutputValueClass(Text.class);
	    
      FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
      FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
	    
      System.exit(job.waitForCompletion(true) ? 0 : 1);
	    		    
  }
  
}

3、进入 local_matrix 文件目录下,在终端输入

javac MartrixMultiplication.java -cp $(~/app/hadoop/bin/hadoop classpath) ,

此时目录下多出了一个MartrixMultiplication.class文件

4、接着在终端依次输入:

cd ..

jar -cvf local_matrix/MartrixMultiplication.jar -C local_matrix/ .

此时 local_matrix文件夹下又多出两个class文件和一个jar文件

5、回到根目录,创建一个名为 input2 的文件夹,在里面新建两个文件 M.data 和 N.data

M.data中的数据形式为:(一行一个数据)

M#a#b#c    表示M矩阵第a行第b列的值是c;

N.data中的数据形式为:(一行一个数据)

N#a#b#c    表示M矩阵第a行第b列的值是c;

注:1  <= a,b <= 50,c = 1

6、在hdfs上新建输入数据的目录(~/app/hadoop/bin目录下)
      ./hdfs dfs -mkdir /input2
7、上传文件

      ./hdfs dfs -put ~/input2/*.data /input2

8、运行

./hadoop jar ~/app/hadoop/local_matrix/MartrixMultiplication.jar MartrixMultiplication /input2 output2

9、查看结果

./hdfs dfs -cat /user/hadoop/output2/part-r-00000

正确的结果图(部分)

云计算与海量数据管理实验,大学,云计算,bash,分布式,linux,大数据

 文章来源地址https://www.toymoban.com/news/detail-705344.html

到了这里,关于云计算与海量数据管理实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【山东大学】web数据管理——复习笔记

    写在前面 若有图片加载失败,请 科学上网 。 本文为对软件学院连老师的PPT课件总结所得的复习笔记,仅供参考。不保证对考点的全覆盖,以PPT为主。 对往年考过的题相关知识点前面都标注了“考过”,并高亮,供参考。 写的比较匆忙,有遗漏、错误之处敬请指正。 笔记中

    2024年02月08日
    浏览(56)
  • 数据库系统实现 大学生宿舍管理系统

    目录 目录 第一章绪论 1.1项目研究的背景 第二章可行性分析与需求分析 2.1可行性分析 2.1.1操作可行性 2.1.2技术可行性 2.1.3设计可行性 2.2需求分析 2.2.1处理对象分析 2.2.2功能需求分析 2.2.3安全性与完整性分析 第三章系统设计 3.1系统架构图 3.2 E-R图 3.3 数据结构 3.3.1 用户信息结

    2024年02月06日
    浏览(44)
  • 数据库实验 实验一 数据库创建与管理

    注:此内容仅仅只是记录成长与分享学习,不能保证绝对正确 实验一 数据库的创建与管理 实验日期:   2022   年 3 月   25 日  星期   五     实验地点:   宿舍      一 实验目的 1. 熟练掌握创建、删除数据库。 2. 查看和修改数据库属性。 二 实验要求 1. 请大家务必动

    2024年02月01日
    浏览(64)
  • 基于springboot大学生兼职平台管理系统(完整源码+数据库)

    本项目是一套基于springboot大学生兼职平台管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值 jdk版本

    2024年04月13日
    浏览(46)
  • SNMP 计算机网络管理 实验1(二) 练习与使用Wireshark抓取SNMP数据包抓包之 任务三分析并验证TCP三次握手建立连接时三次握手工作过程

    ⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 🙉联系作者🙈by QQ:813942269🐧 🌈致亲爱的读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事

    2024年02月12日
    浏览(55)
  • 1.数据库的管理(实验报告)

    目录 一﹑实验目的 二﹑实验平台 三﹑实验内容和步骤 四﹑命令(代码)清单 五﹑命令(代码)运行结果 了解SQL Server数据库的逻辑结构和物理结构的特点; 掌握使用SQL Server管理平台对数据库进行管理的方法; 掌握使用Transact-SQL语句对数据库进行管理的方法。 操作系统:Window

    2024年02月02日
    浏览(38)
  • 【数据库 Microsoft SQL Server】实验六 物业收费管理系统数据库设计与实施综合实验

    实验六 物业收费管理系统数据库设计与实施综合实验 一、实验目的 1.掌握数据库概念模型和逻辑模型设计,学会使用数据库规范化理论规范关系模式。 2.熟练掌握和使用SQL语言定义数据库、表、索引和视图等对象。 3.熟练掌握和使用SQL语言完成数据库的完整性和安全性设置

    2024年02月01日
    浏览(50)
  • python数据结构实验设计(单链表):通讯录管理

    目录 摘要 一、课程设计目的及内容 创新功能: 二、算法及设计过程分析 1.总流程 2.主界面 3.文件处理与生成单链表 4.查看所有联系人信息 5.查看人数 6.查找联系人(以姓名或号码为依据) 7.对姓名或号码输入进行模糊查找  8.添加联系人 9.删除联系人  10.合并两个通

    2024年01月16日
    浏览(35)
  • 书店销售管理系统----数据库原理及应用综合实验

    枯木逢春犹再发,人无两度再少年🍂 系统主要模块如下: (1) 书店销售管理系统设计与实现—图书入库管理及查询统计 图书入库管理:维护入库图书信息(如图书编号、书名、作者、价格、图书分类、出版社等)。自动计算库存。 图书查询统计:按图书分类,出版社、书

    2024年02月06日
    浏览(46)
  • 数据库实验——通过SQL Server Management Studio创建及管理数据库

    (1)熟悉SQL Server Management Studio。 (2)掌握通过SQL Server Management Studio管理数据库的方法。 (3)掌握数据库及其物理文件的结构关系。 (4)掌握通过SQL Server Management Studio管理数据表的方法。 1.通过SQL Server Management Studio创建数据库 创建一个名称为学生管理信息Student_info数

    2024年02月08日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包