栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

软件体系结构实验二

软件体系结构实验二

软件体系结构实验二 1. 实现”四则运算“的简易翻译器 1.1 要求
  • 实现加减乘除四则运算,允许同时有多个操作数,如:4+6*5-8 结果是26;
  • 被操作数为整数,整数可以有多位;
  • 处理空格;
  • 输入错误显示错误提示,并返回命令状态“CALC"。
1.2 思路

由于乘除优于加减运算,因此不妨先进行所有的乘除运算,并且将这些乘除运算后的整数值放回原来表达式的相应位置,则随后整个表达式的值,就等于一系列整数加减后的值。

基于此,我们可以用一个栈,保存这些(进行乘除运算后的)整数的值,对于加减号后的数字,将其直接压入栈中;对于乘除号后的数字,可以直接与栈顶元素进行计算,并且换栈顶元素为计算后的结果。

具体来说,遍历表达式字符串express,并用变量preSign记录每个数字之前的运算符,对于第一个数字,其之前的运算符视为加号。每次遍历到数字末尾时,根据preSign来决定计算方式:

  • 加号:将数字压入栈;
  • 减号:将数字的相反数压入栈;
  • 乘除号:计算数字与栈顶元素,并将栈顶元素替换为计算结果。

代码实现中,若读到一个运算符,或者遍历到字符串末尾,即认为是遍历到了数字末尾。处理完该数字后,更新preSign为当前遍历的字符。

遍历完表达式字符串express后,将栈中元素相加,即为该表达式的值。

import java.util.Deque;
import java.util.linkedList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        final String cmd = "CALC> ";
        Scanner in = new Scanner(System.in);
        while (true){
            System.out.print(cmd);
            String expression = in.nextLine();
            System.out.println(calculate(expression));
        }
    }
    public static int calculate(String expression) {
        //处理空格
        expression.trim();
        Deque stack = new linkedList();
        char preSign = '+';
        int num = 0;
        int n = expression.length();
        for (int i = 0; i < n; ++i) {
            if (Character.isDigit(expression.charAt(i))) {
                num = num * 10 + expression.charAt(i) - '0';
            }
            if (!Character.isDigit(expression.charAt(i)) && expression.charAt(i) != ' ' || i == n - 1) {
                switch (preSign) {
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*':
                        stack.push(stack.pop() * num);
                        break;
                    default:
                        stack.push(stack.pop() / num);
                }
                preSign = expression.charAt(i);
                num = 0;
            }
        }
        int ans = 0;
        while (!stack.isEmpty()) {
            ans += stack.pop();
        }
        return ans;
    }
}

2. 搭建Hadoop平台,实现wordcloud算法
  1. 下载Hadoop,下载地址: http://hadoop.apache.org/releases.html

  2. 安装JDK。注:Hadoop依赖JDK且要求路径中不能有空格,所以将JDK安装在没有空格的目录中(一般默认安装在C盘的Program file文件夹中,但是这个目录有空格,所以选择安装在别的目录,这里建议安装在D盘 建立一个Java文件夹,安装在这个文件夹下,当然其他文件下也是没有问题的,就是要保证路径中没有空格, 如果安装在program files文件夹下,请注意看配置5)

  3. 将下载的Hadoop解压缩,下载winutils,将里面的bin替换Hadoop的bin文件

  4. 配置环境变量,增加HADOOP_HOME变量,在path变量中增加%HADOOP_HOME%bin变量

  5. Hadoop配置,在hadoop-3.2.2/etc/hadoop/文件夹下修改这些文件:

    • ore-site.xml

      
      	
             fs.default.name
             hdfs://localhost:9000
         
      
      
    • mapred-site.xml

      
      	
             mapreduce.framework.name
             yarn
         
      
      
    • 在hadoop-3.2.2目录下创建data目录,作为数据存储路径

      在hadoop-3.2.2/data目录下创建datanode目录;

      在hadoop-3.2.2/data目录下创建namenode目录;

    • hdfs-site.xml配置:((配置过程中,将Hadoop设置成自己的路径))

      
      
          
              dfs.replication
              1
          
      	 
           dfs.permissions 
           false 
        
         
             dfs.namenode.name.dir
             /D:/hadoop-3.2.2/data/namenode
         
      	   
             dfs.datanode.data.dir
             /D:/hadoop-3.2.2/data/datanode
         
      
      
    • 在Hadoop-env.cmd中设置Java_Home


这里如果有有jdk环境也可以不用更改。

  • yarn-site.xml

    
       
           yarn.nodemanager.aux-services
           mapreduce_shuffle
       
       
           yarn.nodemanager.aux-services.mapreduce.shuffle.class
           org.apache.hadoop.mapred.ShuffleHandler
       
    
            
            yarn.nodemanager.local-dirs
            /D:/hadoop-3.2.2/tmp
        
    
    
    

    将hadoop的bin文件下的hadoop.dll拷贝至c盘windows/system32文件夹下

  1. 配置完成之后,使用管理员权限打开cmd命令行,切换至hadoop的bin文件夹下,启动hdfs namenode -format配置文件格式

  2. 进入Hadoop的sbin文件夹start-all.cmd启动Hadoop服务会出现四个窗口

  3. 1. 重新打开一个cmd命令行,进入Hadoop bin,运行hadoop fs -mkdir /user创建新的文件夹,新建一个txt文件,在里面输入一段英文文字,使用命令

    hadoop fs -put “你创建的文件” /user

    上传你的文件,hdfs dfs -cat /user/input_file.txt来查看文件的内容,如下图所示

  4. 下载MapReduceClient.jar文件,在刚才命令行里运行>hadoop jar D:/MapReduceClient.jar wordcount /user /output 实现wordcount算法,会看到以下结果:

  5. 最后使用命令hdfs dfs -cat /output/*查看词的统计结果,如下图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/389259.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号