精华内容
下载资源
问答
  • Hadoop云计算实验报告

    2015-06-14 20:46:47
    在虚拟机Ubuntu上安装Hadoop单机模式和集群; 编写一个用Hadoop处理数据的程序,在单机和集群上运行程序。
  • 云计算应用实验报告

    2018-11-12 22:14:17
    通过实验,掌握Hadoop环境的搭建,学会Hadoop的简单编程应用。
  • 云计算实验报告---Hadoop

    千次阅读 2017-04-14 15:25:00
    云计算实验报告 MapReduce ----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy,搭建环境有问题的同学可以评论或者私信一起讨论 -----------...

     

    云计算实验报告

    MapReduce

     

     

     

    ----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy,搭建环境有问题的同学可以评论或者私信一起讨论
    ------------------同类型的实验参考了实验楼的实验,希望大家学习的同时一定要自己亲自手打代码,才有学习的价值,遇到各种错误可以一起学习寻找解决方法

    一、实验题目

    某公司各个部门的相关数据处理

    二、实验环境

    Hadoop搭建环境:

    虚拟机操作系统: ubuntu-14.04.4-desktop-i386

    JDK:jdk-8u101-linux-i586

    Hadoop:hadoop-2.6.0

    三、实验原理

    ·MapReduce简介

    MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据。第一个提出该技术框架的是Google 公司,而Google 的灵感则来自于函数式编程语言,如LISP,Scheme,ML 等。MapReduce 框架的核心步骤主要分两部分:Map 和Reduce。当你向MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出。从高层抽象来看,MapReduce的数据流图如下图所示:

     

    ·MapReduce流程分析

     

    ··Map过程

    1. 每个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块的大小(默认为64M)为一个分片,当然我们也可以设置块的大小。map输出的结果会暂且放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),当该缓冲区快要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),会在本地文件系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件;
    2. 在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做是为了避免有些reduce任务分配到大量数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就是对数据进行hash的过程。然后对每个分区中的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘;
    3. 当map任务输出最后一个记录时,可能会有很多的溢出文件,这时需要将这些文件合并。合并的过程中会不断地进行排序和combia操作,目的有两个:
    • 尽量减少每次写入磁盘的数据量
    • 尽量减少下一复制阶段网络传输的数据量。最后合并成了一个已分区且已排序的文件。为了减少网络传输的数据量,这里可以将数据压缩,只要将mapred.compress.map.out设置为true就可以了
    1. 将分区中的数据拷贝给相对应的reduce任务。有人可能会问:分区中的数据怎么知道它对应的reduce是哪个呢?其实map任务一直和其父TaskTracker保持联系,而TaskTracker又一直和JobTracker保持心跳。所以JobTracker中保存了整个集群中的宏观信息。只要reduce任务向JobTracker获取对应的map输出位置就可以了。

     

    ··Reduce过程

    n Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果reduce端接受的数据量相当小,则直接存储在内存中(缓冲区大小由mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据量超过了该缓冲区大小的一定比例(由mapred.job.shuffle.merge.percent决定),则对数据合并后溢写到磁盘中;

    n 随着溢写文件的增多,后台线程会将它们合并成一个更大的有序的文件,这样做是为了给后面的合并节省时间。其实不管在map端还是reduce端,MapReduce都是反复地执行排序,合并操作;

    n 合并的过程中会产生许多的中间文件(写入磁盘了),但MapReduce会让写入磁盘的数据尽可能地少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。

     

    ·MapReduce工作机制剖析

     

    n 在集群中的任意一个节点提交MapReduce程序;

    n JobClient收到作业后,JobClient向JobTracker请求获取一个Job ID;

    n 将运行作业所需要的资源文件复制到HDFS上(包括MapReduce程序打包的JAR文件、配置文件和客户端计算所得的输入划分信息),这些文件都存放在JobTracker专门为该作业创建的文件夹中,文件夹名为该作业的Job ID;

    n 获得作业ID后,提交作业;

    n JobTracker接收到作业后,将其放在一个作业队列里,等待作业调度器对其进行调度,当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分信息为每个划分创建一个map任务,并将map任务分配给TaskTracker执行;

    n 对于map和reduce任务,TaskTracker根据主机核的数量和内存的大小有固定数量的map槽和reduce槽。这里需要强调的是:map任务不是随随便便地分配给某个TaskTracker的,这里有个概念叫:数据本地化(Data-Local)。意思是:将map任务分配给含有该map处理的数据块的TaskTracker上,同时将程序JAR包复制到该TaskTracker上来运行,这叫“运算移动,数据不移动”;

    n TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行,同时心跳中还携带着很多的信息,比如当前map任务完成的进度等信息。当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消息给用户;

    n 运行的TaskTracker从HDFS中获取运行所需要的资源,这些资源包括MapReduce程序打包的JAR文件、配置文件和客户端计算所得的输入划分等信息;

    n TaskTracker获取资源后启动新的JVM虚拟机;

    n 运行每一个任务。

     

    四、实验内容

               测试数据

    Dept:

             部门的相关信息,“部门编号,部门名称,部门所在城市”

             10,ACCOUNTING,TOKYO

    20,RESEARCH,GUANGZHOU

    30,SALES,PEKING

    40,OPERATIONS,BOSTON

    50,DESIGN,SHANGHAI

    Emp:

    职员相关信息,“员工号,姓氏,名字,编号,入职时间(A-B月-C:20C年B月A日),工资,奖金,所属部门编号”

    0001,SMITH,CLERK,0001,17-12月-02,800,,20

    0002,ALLEN,SALESMAN,0002,20-2月-01,1600,300,30

    0003,WARD,SALESMAN,0003,22-2月-03,1250,500,30

    0004,JONES,MANAGER,0004,02-4月-01,2975,,20

    0005,MARTIN,SALESMAN,0005,28-9月-03,1250,1400,30

    0006,BLAKE,MANAGER,0006,01-5月-02,2850,,30

    0007,CLARK,MANAGER,0007,09-6月-00,2450,,10

    0008,KING,PRESIDENT,0008,17-11月-06,6500,,10

    0009,TURNER,SALESMAN,0009,08-9月-12,1500,0,30

    0010,JAMES,CLERK,0010,03-12月-04,950,,30

    0011,FORD,ANALYST,0011,03-12月-05,3000,,20

    0012,MILLER,CLERK,0012,23-1月-06,1300,,50

     

    上传文件:bin/hdfs dfs -mkdir -p /project/input/

                         bin/hdfs dfs -put ~/emp /project/input/

                         bin/hdfs dfs -put ~/dept /project/input/

    ·求各个部门的总工资(SumDeptSalary.java)

    本次实验采用了Map join中的Map side join。Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样我们可以将小表复制多份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。为了支持文件的复制,Hadoop提供了一个类DistributedCache,使用该类的方法如下:

    1. 用户使用静态方法DistributedCache.addCacheFile()指定要复制的文件,它的参数是文件的URI(如果是HDFS上的文件,可以这样:hdfs://jobtracker:50030/home/XXX/file)。JobTracker在作业启动之前会获取这个URI列表,并将相应的文件拷贝到各个TaskTracker的本地磁盘上。
    2. 用户使用DistributedCache.getLocalCacheFiles()方法获取文件目录,并使用标准的文件读写API读取相应的文件。

    在下面代码中,将会把数据量小的表(部门dept)缓存在内存中,在Mapper阶段对员工部门编号映射成部门名称,该名称作为key输出到Reduce中,在Reduce中计算按照部门计算各个部门的总工资。

     

    具体详细代码在打包的实验代码文件SumDeptSalary.java中:

        编译代码并打成jar包:

    • Javac -cp../share/hadoop/common/hadoop-common- 2.6.0.jar: ../share/hadoop/mapreduce/hadoop-mapreduce-client-core- 2.6.0.jar:../share/hadoop/common/lib/commons-cli-1.2.jar SumDeptSalary.java -d ./
    • jar -cvf SumDeptSalary.jar org/apache/hadoop/examples/ SumDeptSalary *.class

    运行:

    bin/hadoop jar SumDeptSalary.jar SumDeptSalary /project/input/* outputSum

             输出运行结果:

    bin/hdfs dfs -cat outputSum/*

     

    ACCOUNTING 8950

    RESEARCH 6775

    SALES 9400

    DESIGN 1300                                      ----------运行结果

     

    ·求各个部门的人数和平均工资(DeptNumberAveSalary.java)

    关于第二个问题:求各个部门的人数和平均工资,需要得到各部门工资总数和部门人数,通过两者相除获取各部门平均工资。首先和第一个问题类似,在Mapper的Setup阶段缓存部门数据,然后在Mapper阶段抽取出部门编号和员工工资,利用缓存部门数据把部门编号对应为部门名称,接着在Shuffle阶段把传过来的数据处理为部门名称对应该部门所有员工工资的列表,最后在Reduce中按照部门归组,遍历部门所有员工,求出总数和员工数,输出部门名称和平均工资。

     

    具体详细代码在打包的实验代码文件DeptNumberAveSalary.java中:

        编译代码并打成jar包:

    • Javac -cp../share/hadoop/common/hadoop-common- 2.6.0.jar: ../share/hadoop/mapreduce/hadoop-mapreduce-client-core- 2.6.0.jar:../share/hadoop/common/lib/commons-cli-1.2.jar DeptNumberAveSalary.java -d ./
    • jar -cvf DeptNumberAveSalary.jar org/apache/hadoop/examples/ DeptNumberAveSalary *.class

    运行:

    bin/hadoop jar DeptNumberAveSalary.jar DeptNumberAveSalary/project/input/* outputAve

             输出运行结果:

    bin/hdfs dfs -cat outputAve/*

     

    ACCOUNTING Dept Number:2,Ave Salary:4475

    RESEARCH Dept Number:3,Ave Salary:2258

    SALES Dept Number:6,Ave Salary:1566

    DESIGN Dept Number:1,Ave Salary:1300                         ----------运行结果

     

    ·将全体员工按照总收入从高到低排序(SalarySort.java)

    第三个问题:求全体员工总收入降序排列,只需获得所有员工总收入并降序排列即可。在Mapper阶段输出所有员工总工资数据,其中key为员工总工资、value为员工姓名,在Mapper阶段的最后会先调用job.setPartitionerClass对数据进行分区,每个分区映射到一个reducer,每个分区内又调用job.setSortComparatorClass设置的key比较函数类排序。由于在这次的测试中Map的key只有0值,所以可以实现对所有数据进行排序。

     

    具体详细代码在打包的实验代码文件SalarySort.java中:

        编译代码并打成jar包:

    • Javac -cp../share/hadoop/common/hadoop-common- 2.6.0.jar: ../share/hadoop/mapreduce/hadoop-mapreduce-client-core- 2.6.0.jar:../share/hadoop/common/lib/commons-cli-1.2.jar SalarySort.java -d ./
    • jar -cvf SalarySort.jar org/apache/hadoop/examples/ SalarySort *.class

    运行:

    bin/hadoop jar SalarySort.jar SalarySort /project/input/* outputSort

             输出运行结果:

    bin/hdfs dfs -cat outputSort/*

     

    6500           KING

    3000           FORD

    2975           JONES

    2850          BLAKE

    2650           MARTIN

    2450           CLARK

    1900           ALLEN

    1750           WARD

    1500           TURNER

    1300           MILLER

    950              JAMES

    800              SMITH

                         ----------运行结果

     

    五、实验总结

    关于本次的云计算实验project,经过了之前的partA、partB和partC三个部分的练习,对hadoop的集群和MapReduce和数据的分布式处理都有了一些基础的了解,对搭建集群和相关的linux命令也都得到了一定程度的锻炼。

    在实验的partA部分,是通过品高提供的虚拟机平台来实现的,但是在之后的partB部分,却在input文件的部分屡次失败,向助教的师兄师姐和班里的同学求助,但是尝试了重新格式化、关闭防火墙、重启服务等等诸多办法,都找不到问题所在,销毁重做也解决不了问题。最终决定利用VMware Workstation 12 来搭建两台Ubuntu虚拟机来实现hadoop集群的搭建。

    使用虚拟机之后,问题得到了顺利的解决,成功input了需要上传的文件,完成了余下的partB和partC两个部分。

    完成后两个部分之后,对MapReduce有了更近一步的了解,相关的操作也熟能生巧了,通过在网上搜索和学习各种相关算法和代码,最终选择了实验中的三个部分来实现。在实现的过程中,参考了部分的代码,然后自己参照所给的算法重新编写了实验中的三个Java代码。在测试的过程中,使用了多组不同的数据,输出output文件的结果都是正确的,故而判断代码的实现是成功的。

    Hadoop软件库作为一个框架,允许在集群服务器上使用简单的编程模型对大数据集进行分布式处理。而且高可用性并不依赖硬件,其代码库自身就能在应用层侦测并处理硬件故障,能基于服务器集群提供高可用性的服务。在很多方面都有广泛的应用,通过本次的实验和project,对集群和分布式,有了更加深刻的了解,通过之后不断的学习,相信能够给自己带来更大的收获。

     

     

    ------------------------------------------------------------

    因为直接复制自实验报告,排版有一些问题,但是不影响阅读和理解,有问题可以询问我

    转载于:https://www.cnblogs.com/nanashi/p/6709089.html

    展开全文
  • 分布式与云计算Hadoop集群搭建是一个关于搭建Hadoop集群并实现map-reduce的实验PPT,附有详细的方法和步骤
  • 实验云计算环境Hadoop安装与配置 实验目的 在虚拟机Ubuntu上安装Hadoop单机模式; 实验环境 虚拟机:VMware 或者virtualbox 踩坑: 1、VMware安装后,文件或文本从本地到虚拟机系统的拖拽或复制粘贴会出现...

    实验五 云计算环境Hadoop安装与配置

    1. 实验目的

    在虚拟机Ubuntu上安装Hadoop单机模式;

    1. 实验环境

    虚拟机:VMware  或者virtualbox       

    踩坑:

    1、VMware安装后,文件或文本从本地到虚拟机系统的拖拽或复制粘贴会出现失效,此时注意安装VMware tool,链接https://blog.csdn.net/dcrmg/article/details/74090307可解决窗口和粘贴复制问题

    2、virtualbox可通过共享文件夹挂载设置,解决文件拖拽,粘贴复制未探索

    操作系统:ubuntu-18.XX-desktop-amd64(桌面版)(推荐,或者20.XX也可)centos,ubuntu-16.04-server-x64(服务器版),其中之一

    Hadoop版本:Hadoop 2.7.1 版本推荐,方便后续Hbase实验完成(否则会导致版本不匹配无法完成Hbase实验)

    下载链接:https://archive.apache.org/dist/hadoop/common/

    Jdk版本:jdk-8u80-linux-x64(可通过实验命令直接在命令行安装sudo apt-get install openjdk-8-jre openjdk-8-jdk(推荐省事),或者下载tar解压文件

    Eclipse版本:(可通过Ubuntu自带的软件市场下载,避免tar下载后的各种配置,安装之前换源提高下载速度。

    参考链接:

    1、换源:https://blog.csdn.net/daerzei/article/details/84873964?ops_request_misc=&request_id=&biz_id=102&utm_term=Ubuntu%20%20%20%E6%8D%A2%E6%BA%90&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-84873964.nonecase&spm=1018.2226.3001.4187参考方法1即可,快速完成。

    2、软件市场直接搜索eclipse然后安装即可(或者挑战此链接操作方式锻炼能力https://blog.csdn.net/qq_44376817/article/details/108610570?ops_request_misc=&request_id=&biz_id=102&utm_term=Ubuntu%20%20%20%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2%E5%AE%89%E8%A3%85ecli&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-4-108610570.pc_search_result_before_js&spm=1018.2226.3001.4187

    eclipse-jee-luna-SR2-linux-gtk-x86_64(此版本号参考即可,任意版本的eclipse都可以完成实验功能

    1. 实验过程
      1. 安装实验环境
        1. 安装ubuntu操作系统
    1. 打开VMware  或者virtualbox ,新建虚拟机,
    2. 安装ubuntu-16.04-server-x64(服务器版),ubuntu-14.10-desktop-amd64(桌面版),
    3. 录入目标操作系统信息,包括Full name、Uer name和Password, next,
    4. 选择默认的选项,一般不做更改,最后确认信息,Finish,
    5. 装好了 Ubuntu 系统之后,在安装 Hadoop 前还需要做一些必备工作。
        1. 一、关闭防火墙

    sudo ufw disable

    iptables -F

        1. 创建hadoop用户

    如果你安装 Ubuntu 的时候不是用的 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户。

    1. 首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户 :

    sudo useradd -m hadoop -s /bin/bash

    1. 接着使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码:

    sudo passwd hadoop(注意此处的密码设置简单点,否则后续输入次数较多容易烦

    1. 可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题

    sudo adduser hadoop sudo

        1. 更新apt
    1. 用 hadoop 用户登录后,我们先更新一下 apt,后续我们使用 apt 安装软件,如果没更新可能有一些软件安装不了。按 ctrl+alt+t 打开终端窗口,执行如下命令:

    sudo apt-get update

        1. 安装SSH、配置SSH无密码登陆
    1. 集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server:

    sudo apt-get install openssh-server

    2) 安装后,可以使用如下命令登陆本机(此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了, 但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便):

    ssh localhost  (此命令记得之后本实验每次环境打开时都得运行

    3) 首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:

    exit                           # 退出刚才的 ssh localhost

    cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost

    ssh-keygen -t rsa              # 会有提示,都按回车就可以

    cat ./id_rsa.pub >> ./authorized_keys  # 加入授权

    此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了,如下图所示

        1. 安装配置JDK
    1. Java环境可选择 Oracle 的 JDK,或是 OpenJDK,通过命令安装 OpenJDK 8。

    sudo apt-get install openjdk-8-jre openjdk-8-jdk

    1. 在文件最前面添加如下单独一行:

    vi  ~/.bashrc               # 设置JAVA_HOME  (此处的环境配置之后的实验六、十都设计,hadoop的环境也需要设置一次配好可免除后患

    参考链接:参考此链接第四部分的第3个,https://www.jianshu.com/p/77d0b6f1c63f

    配置以上两种环境变量可参考:(解决警告问题21/05/12 10:03:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    # JDK install path  environment set

    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    export JAVA_LIBRARY_PATH=$HADOOP_INSTALL/lib/native

    # hadoop install path  environment set

    export HADOOP_INSTALL=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_INSTALL/bin
    export PATH=$PATH:$HADOOP_INSTALL/sbin
    export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
    export HADOOP_COMMON_HOME=$HADOOP_INSTALL
    export HADOOP_HDFS_HOME=$HADOOP_INSTALL
    export YARN_HOME=$HADOOP_INSTALL
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

    1. 使 JAVA_HOME 变量生效:

    source ~/.bashrc    # 使变量设置生效      (此命令配置环境后要运行激活刚才的环境配置

        1. 在单节点(伪分布式)环境下运行HADOOP
    1. 安装 Hadoop 2

    cd ~/下载

    sudo tar -zxvf ./hadoop-2.6.0.tar.gz -C /usr/local  # 解压到/usr/local中

    cd /usr/local/

    sudo mv ./hadoop-2.6.0/ ./hadoop            # 将文件夹名改为hadoop

    sudo chown -R hadoop ./hadoop        # 修改文件权限

    做以下实验时,注意查看自己的主机名是否是Master(原因是下面的配置是基于主机民Master的,否则需要将配置文件中的Master更改为自己的当前主机名),可通过以下命令查看和修改:

    vi  /etc/hosts     

    打开后将127.0.1.0 后面的字母或其他  改为 Master

    1. 进行伪分布式配置

    修改配置文件 core-site.xml (vim /usr/local/hadoop/etc/hadoop/core-site.xml):

    <configuration>

        <property>

            <name>hadoop.tmp.dir</name>

            <value>file:/usr/local/hadoop/tmp</value>

            <description>Abase for other temporary directories.</description>

        </property>

        <property>

            <name>fs.defaultFS</name>

            <value>hdfs://localhost:9000</value>

        </property>

    </configuration>

    文件 hdfs-site.xml,dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值还是设为 1

    <configuration>

            <property>

                    <name>dfs.namenode.secondary.http-address</name>

                    <value>Master:50090</value>

            </property>

            <property>

                    <name>dfs.replication</name>

                    <value>1</value>

            </property>

            <property>

                    <name>dfs.namenode.name.dir</name>

                    <value>file:/usr/local/hadoop/tmp/dfs/name</value>

            </property>

            <property>

                    <name>dfs.datanode.data.dir</name>

                    <value>file:/usr/local/hadoop/tmp/dfs/data</value>

            </property>

    </configuration>

    文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:

    <configuration>

            <property>

                    <name>mapreduce.framework.name</name>

                    <value>yarn</value>

            </property>

            <property>

                    <name>mapreduce.jobhistory.address</name>

                    <value>Master:10020</value>

            </property>

            <property>

                    <name>mapreduce.jobhistory.webapp.address</name>

                    <value>Master:19888</value>

            </property>

    </configuration>

    文件 yarn-site.xml:

    <configuration>

            <property>

                    <name>yarn.resourcemanager.hostname</name>

                    <value>Master</value>

            </property>

            <property>

                    <name>yarn.nodemanager.aux-services</name>

                    <value>mapreduce_shuffle</value>

            </property>

    </configuration>

     

    1. 启动 Hadoop:

    cd /usr/local/hadoop

    bin/hdfs namenode -format       # namenode 格式化(命令只需要运行一次,不可重复运行,否则会出现jps节点开启不稳定,如若多次运行可删除usr/local/hadoop/tmp下的所有文件,然后重新按顺序运行此命令可恢复

    sbin/start-all.sh               # 开启守护进程(sbin/start-all.sh命令其实就是连续执行了start-dfs.sh和start-yarn.sh这两个命令)

    jps                             # 判断是否启动成功

    此处应该包括下图的所有信息,才可视为hadoop运行成功,也可通过Ubuntu自带的浏览器窗口输入Master:8088 和Master:50070查看是否配置成功,弹出页面信息则表示成功

     

        1. 运行 WordCount 实例

    bin/hdfs dfs -mkdir -p /user/hadoop     # 创建HDFS目录

    bin/hdfs dfs -mkdir input

    bin/hdfs dfs -put etc/hadoop/*.xml input  # 将配置文件作为输入

    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount input output

    bin/hdfs dfs -cat output/*                # 查看输出

    1. 实验结果与分析
    1.  sudo useradd -m hadoop -s /bin/bash命令创建了可以登陆的 hadoop 用户,最后的-s /bin/bash含义是什么?。

    useradd命令的参数 -s是指定用户登入后所使用的shell此命令含义为新创建的hadoop用户使用/bin/bash作为其默认shell

    1. 实验中cd ~ 的含义是什么?

    跳到当前用户的 home 目录

    1. JRE和JDK的区别是什么?

    JRE:(Java Runtime Environment),java运行环境。包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

    JDK:(Java Development Kit Java)开发工具包。JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。

    1.  jps命令运行后的结果是什么?
    2. 运行 WordCount 实例后的结果是什么?

     

    bin/hdfs dfs -cat output/*                # 查看输出

     

    Web  UI展示的DFS和yarn信息

     

     

     

    展开全文
  • hadoop安装部署
  • 精品文档 四 川 大 学 计 算 机 学 院软 件 学 院 实 验 报 告 学号 : 姓名 专业 班级 9 第 15 周 课程 实验课时 6 云计算与分布式系统 名称 实验 Hadoop 上运行 WordCount 程序 实验时间 2015 年 6 月 11 日星期四 ...
  • 实验目的 (1)掌握Hadoop的伪分布式安装方法; (2)理解HDFS在Hadoop体系结构中的角色; (3)熟练使用HDFS操作常用的Shell命令; (4)熟悉HDFS操作常用的Java API。 实验环境 操作系统:Linux(Ubuntu ...

    实验目的

    (1)掌握Hadoop的伪分布式安装方法;

    (2)理解HDFS在Hadoop体系结构中的角色;

    (3)熟练使用HDFS操作常用的Shell命令;

    (4)熟悉HDFS操作常用的Java API。

    实验环境

    操作系统:Linux(Ubuntu 18.04 LTS);

    Hadoop版本:Hadoop 3.1.3;

    JDK版本:1.8及11;

    Java IDE:VSCode。

    实验内容与完成情况

    1、安装Linux系统(Ubuntu 18.04 LTS)

    2、创建hadoop用户

    执行

    sudo useradd -m hadoop -s /bin/bash


    执行

    sudo passwd hadoop

     执行

    sudo adduser hadoop sudo

    3、切换到hadoop用户

    执行

    sudo su - hadoop

    4、更新APT

    执行

    sudo apt-get update

    5、安装SSH,并配置SSH无密码登录

    执行

    sudo apt-get install openssh-server

    显示openssh-server已经是最新版(1:7.6p1-4ubuntu0.4)

    执行

    ssh localhost

    可以看到通过密码认证后,本地SSH登录成功,接下来开始配置SSH免密登录

    执行

    exit

    执行

    cd ~/.ssh/

    执行

    ssh-keygen -t rsa

    执行

    cat ./id_rsa.pub >> ./authorized_keys

    再次执行

    ssh localhost

     可以看到,免密登录配置成功,没有出现输入密码的提示界面

    6、安装Java环境

    下载jdk-8u162-linux-x64.tar.gz

    打开

    https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

    选择文件并下载

     执行

    sudo nautilus

    以便以root权限打开文件浏览器

    复制文件到/home/Downloads目录下

    执行

    cd /usr/lib

    执行

    sudo mkdir jvm

    执行

    cd ~/Downloads

    执行

    sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm

    执行

    cd /usr/lib/jvm


    执行

    ls

    可以看到,在/usr/lib/jvm目录下存在jdk1.8.0_162目录

    执行

    cd ~

    执行

    sudo gedit ~/.bashrc

    在文件头添加了hadoop用户的环境变量并保存

    执行

    source ~/.bashrc

    执行

    java -version

    查看到了安装的Java版本,说明Java已经安装成功

    7、安装Hadoop,并检测是否安装成功

    打开如下Hadoop官网链接下载Hadoop3.1.3安装文件

    https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz

    复制文件到/home/Downloads目录下

    执行

    sudo tar -zxf ~/Downloads/hadoop-3.1.3.tar.gz -C /usr/local

    执行

    cd /usr/local/

    执行

    sudo mv ./hadoop-3.1.3/ ./hadoop

    执行

    sudo chown -R hadoop ./hadoop

    执行

    cd hadoop

    执行

    ./bin/hadoop version

    可以看到正确输出了安装的Hadoop版本信息,说明安装已经成功

    8、搭建Hadoop伪分布式环境

    编辑配置文件

    执行

    sudo gedit ./etc/hadoop/core-site.xml

    添加配置后保存

    执行

    sudo gedit ./etc/hadoop/hdfs-site.xml

    添加配置后保存

    执行

    cd /usr/local/hadoop

    (由于已经处于该目录下,不重复执行了)

    执行

    ./bin/hdfs namenode -format

    输出提示“Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted”可以看到NameNode 的格式化已经成功完成

    9、使用hadoop用户登录Linux系统,启动Hadoop,并使用Web界面查看HDFS信息

    执行

    ./sbin/start-dfs.sh

    执行

    jps

    可以看到,列出了“NameNode”、”DataNode” 和 “SecondaryNameNode”进程,说明Hadoop已经成功启动

    在Ubuntu虚拟机中的Chromium浏览器中输入http://127.0.0.1:9870/查看WEB界面

    可以看到WEB界面正常显示,Hadoop的安装配置到此结束

    10、运行Hadoop伪分布式实例

    创建用户目录

    执行

    ./bin/hdfs dfs -mkdir -p /user/hadoop

    本地新建myLocalFile.txt文件

    执行

    sudo gedit /home/hadoop/myLocalFile.txt

    粘贴相关内容并保存

    11、利用Java API与HDFS进行交互

    为方便起见,本次实验不使用Eclipse,转而使用VSCode的Remote SSH插件进行远程Java调用和编程

    首先,下载并解压JDK11,即

    OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz文件

    执行

    sudo tar -zxvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz -C /usr/local

     在VirtualBox中设置网络端口转发,将虚拟机的SSH(端口:22)转发到宿主计算机(端口:222)

    在Windows系统中的PowerShell下进行测试

    PowerShell中执行

    ssh hadoop@127.0.0.1 -p 222

    可以看到,连接成功,输入hadoop用户的密码后顺利连接到了虚拟机

    为使连接过程更加顺畅,在Windows上配置对Linux虚拟机的SSH免密登录

    首先,使用已有的公钥,将其添加到/home/Hadoop/.ssh/authorized_keys

    保存后使用WinScp进行登录测试

    可以看到,登录成功

    在VSCode中安装remote SSH插件

    添加主机

    点击侧边栏,再点击“+”号,输入“ssh hadoop@127.0.0.1 -p 222”并回车确认

    随后,选择第一个配置文件

     点击“在新窗口中打开”

    出现错误,查看日志中出现提示“Bad owner or permissions”,猜测是如Linux下的.ssh文件夹权限问题,以管理员身份启动VSCode,问题依旧存在,没有得到解决

    尝试对Windows用户目录下的.ssh文件夹执行“管理员取得所有权”

    随后点击“Retry”

    进入界面如下

    点击“打开文件夹”,默认选择/home/hadoop,确认即可
    随后弹出界面如下

    点击“新建文件夹”,输入文件夹名称,此处设置为“HDFS”

    随后点击右侧“Welcome”窗口,选择“create a New Project”

    在弹出窗口中选择“No build tools”

    选择刚刚创建的文件夹“HDFS”

    输入项目名称,此处设置为“Hadoop”

    弹出窗口如下

    点击“Run”

    可以看到下方的终端中显示了程序运行的结果,使用VSCode的Java远程开发环境配置完成

    随后,改写App.java的内容为实验内容,如下

    可以看到,文件中出现大量红色波浪线,点击“Run”后提示错误如下

    原因为没有导入项目需要使用的JAR包

    点击侧边栏,新建“.vscode”文件夹

    在“.vscode”文件夹下继续新建文件“settings.json” 

     

    写入如下配置并保存

     

    随后,回到App.java文件,再次点击“Run”

    可以看到,程序输出了“文件存在”的提示

    若修改App.js的“filename”变量的值,如改为

    String filename = "wangqiyuan1803/myLocalFile1.txt";

    再次点击“Run”,则运行结果如下

    说明成功实现了Java API与HDFS的交互,实验内容到此结束

    出现的问题与解决方案

    1、打开Ubuntu的SSH免密登录后仍需要输入密码

    解决方案:为确保连接成功,需要给hadoop用户授予/.ssh文件夹及公钥文件权限,定位到~/.ssh文件夹下,执行chmod 600 authorized_keys和chmod 700 ~/.ssh即可。

    2、双击打开的文件浏览器对/home目录没有修改的权限

    解决方案:执行sudo nautilus即可以root权限打开文件浏览器,此时操作不再受限,但文件浏览器关闭后需要手动在终端结束进程。

    3、Windows系统通过SSH连接Ubuntu时遇到“无法打开连接问题”

    解决方案:查看C:\Users\“用户名”\.ssh文件夹的权限,对该文件夹执行“管理员取得所有权”的指令即可。

    4、编译Java文件时遇到无法导入包的错误

    解决方案:使用的IDE没有默认导入Hadoop的Java API接口所使用的jar包,需要手动在工程的设置中添加(本实验中通过在.vscode文件夹下新建settings.json文件来进行配置)。

    5、VSCode编译时报错,找不到Java环境

    解决方案:由于VSCode是通过远程连接的方式进行开发,因此需要手动指定Java环境,由于其已不再支持默认的JDK1.8,因此需要手动安装更高版本的JDK,实验中以JDK11为例,解压后再设置相应目录即可。

    6、将虚拟机关机后再打开时HDFS不能使用

    解决方案:由于HDFS不像OpenStack一样开机自启,因此开机后要手动执行./sbin/start-dfs.sh启动Hadoop。

    实验总结

    通过本次Hadoop的安装与HDFS基础实验,我进一步熟悉了Ubuntu的基本使用以及Linux系统的各种文件操作指令,对于分布式存储中的重要工具——Hadoop的使用及HDFS的基本操作有了更多的了解。

    尽管我先前没有选修大数据课程,但通过详细的安装教程及同学之间的相互交流,我顺利地完成了Hadoop的安装和使用,并通过执行指令从HDFS上增删改查文件,实验达到了预期的效果。

    实验中还对Hadoop的Java API进行了基础的操作,这也让我对于Linux的Java开发环境配置、借助Remote SSH的VSCode远程开发及SSH登录验证的相关配置和使用更加熟悉。

    展开全文
  • 第 PAGE 4页共 NUMPAGES 35页 Hadoop云计算平台实验报告V1.1 目录 TOC \o "1-5" \h \z \u 1 实验目标 3 2 实验原理 4 2.1 Hadoop工作原理 4 2.2 实验设计 6 2.2.1 可扩展性 6 2.2.2 稳定性 7 2.2.3 可靠性 7 3 实验...
  • 云计算与分布式系统 实验课时 6 实验项目 在最终部署的Hadoop上运行WordCount程序 实验时间 2015年6月11日星期四 实验目的 首先通过Linux系统和KVM虚拟机的安装达成对Linux系统与虚拟机相关知识的了解和熟悉 通过...
  • 虚拟化和云计算课程实验报告Hadoop平台搭建.doc
  • 虚拟化与云计算 实 验 报 告 目录 TOC \o "1-5" \h \z \o "Current Document" 一实验目标 1 \o "Current Document" 二实验内容 1 三实验步骤 1 \o "Current Document" 四实验遇到的问题及其解决方法 24 \o "Current ...
  • 深入研究了基于云计算平台Hadoop的并行k-means聚类算法,给出了算法设计的方法和策略。在多个不同大小数据集上的实验表明,设计的并行聚类算法具有优良的加速比、扩展率和数据伸缩率等性能,适合用于海量数据的分析和...
  • z. z. z. z. 云计算原理课程 期末实践报告 题目Linux 集群MapReduce 禾口 CloudSim 实践 成绩 学号 161440119 : 罗滔 登录邮箱 750785185qq. 任课老师 许娟 2016年11月12日 实验一AWS身份与访问...P2C 实验三Hadoop实验
  • 使用hadoop实现WordCount详细实验报告,配有环境变量配置截图以及实验运行及结果详细过程描述与截图
  • hadoop常用命令
  • Hadoop实践与应用 主要内容 实验1 HDFS Shell命令操作 实验2 HDFS的Java访问接口 实验3 MapReduce应用程序实践 实验1 HDFS Shell命令操作 HDFS基本概念 主从架构模型系统一个HDFS集群由一个Master节点和 多个Slave...
  • 一、实验目的 熟悉Hadoop分布式集群的搭建过程 学习Hadoop分布式集群的使用示例 二、实验内容 搭建Hadoop分布式集群环境 掌握HDFS常见操作,自行编写一个英文文本文件,上传至HDFS中 使用Hadoop提供的example...

    一、实验目的

    1. 熟悉Hadoop分布式集群的搭建过程
    2. 学习Hadoop分布式集群的使用示例

     

    二、实验内容

    1. 搭建Hadoop分布式集群环境
    2. 掌握HDFS常见操作,自行编写一个英文文本文件,上传至HDFS中
    3. 使用Hadoop提供的example程序实现统计该文件的wordcount
    4. *自行编写实现wordcount功能的MapReduce程序

     

    三、实验过程

    3.1 虚拟机环境配置

    3.1.1 从https://www.virtualbox.org下载并安装安装Oracle VM VirtualBox,新建一台Linux虚拟机,分配1024MB内存(master分配2048MB)、50GB虚拟硬盘(使用VDI映像,动态分配空间)

    3.1.2 刚新建完成的虚拟机没有操作系统,为了兼顾稳定性和主机负载,我选用了桌面版Ubuntu 16.04(https://ubuntu.com/download/desktop)下载镜像后,在存储区挂载Ubuntu安装镜像的虚拟光盘后开机

    3.1.3 根据安装程序的提示,在虚拟机中安装Ubuntu,按照默认设置安装即可,静等安装完成,安装完成后卸载ISO虚拟光驱

    3.1.4为了便于后续的IP与MAC绑定操作,设置虚拟机的网络连接方式为“桥接网卡”,至此,虚拟机的配置大体完成

     

    3.2 前置配置操作()

    (为减轻重复配置的工作量,先配置一台虚拟机,配置完成后克隆出三台虚拟机,然后配置虚拟机之间不同部分)

    3.2.1 编辑hostname文件,将第一台虚拟机命名为master,保存

    3.2.2 编辑hosts文件,修改127.0.1.1的名称为master,保存

    3.2.3 安装ssh并配置SSH免密登录

    1. 打开终端,运行sudo apt-get install openssh-server,安装ssh
    2. 运行sudo ufw disable,关闭防火墙
    3. 运行ssh-keygen –t rsa,一直回车,设置密码为空,直至出现RSA密钥
    4. 运行cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,将公钥追加到“authorized_keys”文件
    5. 设定文件权限:chmod 600 .ssh/authorized_keys
    6. 运行ssh localhost,如出现下图界面,说明配置成功

    3.2.4 安装JDK和Hadoop

    1. 运行sudo apt-get install openjdk-8-jdk,完成JDK的安装
    2. https://hadoop.apache.org/下载Hadoop 2.10.0,下载完成后解压,移动到“/usr/local”目录下,重命名文件夹名为hadoop

    jdk安装界面

    Hadoop下载页面

    Hadoop安装目录

    3.2.5 配置JDK与Hadoop的系统环境变量

    需要修改配置文件/etc/profile,添加Java和Hadoop的环境变量

    1. export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64  
    2. export PATH=$JAVA_HOME/bin:$PATH  
    3. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
    4.   
    5. export HADOOP_HOME=/usr/local/hadoop  
    6. export PATH=$PATH:$HADOOP_HOME/bin  

    保存后运行“source /etc/profile”指令使刚刚的配置立即生效

    3.2.6 配置Hadoop相关配置文件

    3.2.6.1 修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh,配置JDK路径为:

    “/usr/lib/jvm/java-1.8.0-openjdk-amd64”

     

    3.2.6.2 修改/usr/local/hadoop/etc/hadoop/core-site.xml —— HDFS默认地址和Web UI配置

    1. <configuration>  
    2.     <property>  
    3.         <name>hadoop.tmp.dir</name>  
    4.         <value>file:/usr/local/hadoop/tmp</value>  
    5.         <description>Abase for other temporary directories.</description>  
    6.     </property>  
    7.     <property>  
    8.         <name>fs.defaultFS</name>  
    9.         <value>hdfs://master:9000</value>  
    10.     </property>  
    11. </configuration>  

    3.2.6.3 修改/usr/local/hadoop/etc/hadoop/hdfs-site.xml —— HDFS副本

    1. <configuration>  
    2.     <property>  
    3.         <name>dfs.replication</name>  
    4.         <value>3</value>  
    5.     </property>  
    6.     <property>  
    7.         <name>dfs.name.dir</name>  
    8.         <value>/usr/local/hadoop/hdfs/name</value>  
    9.     </property>  
    10.     <property>  
    11.         <name>dfs.data.dir</name>  
    12.         <value>/usr/local/hadoop/hdfs/data</value>  
    13.     </property>  
    14.     <!--  
    15.     <property>  
    16.         <name>dfs.namenode.datanode.registration.ip-hostname-check</name>  
    17.         <value>false</value>  
    18.     </property>  
    19.     -->  
    20. </configuration>  

    3.2.6.4 修改/usr/local/hadoop/etc/hadoop/mapred-site.xml——设置MapReduce使用的框架:拷贝mapred-site.xml.template,命名为“mapred-site.xml”,对其做如下配置:

    1. <configuration>  
    2.   <property>  
    3.       <name>mapreduce.framework.name</name>  
    4.       <value>yarn</value>  
    5.   </property>  
    6.    <property>  
    7.       <name>mapred.job.tracker</name>  
    8.       <value>http://master:9001</value>  
    9.   </property>  
    10.   <property>  
    11.       <name>mapreduce.reduce.maxattempts</name>  
    12.       <value>100</value>  
    13.   </property>  
    14.   <property>  
    15.       <name>mapreduce.map.maxattempts</name>  
    16.       <value>100</value>  
    17.   </property>  
    18. </configuration>  

    3.2.6.5 修改/usr/local/hadoop/etc/hadoop/yarn-site.xml

    1. <configuration>  
    2. <!-- Site specific YARN configuration properties -->  
    3.     <property>  
    4.         <name>yarn.nodemanager.aux-services</name>  
    5.         <value>mapreduce_shuffle</value>  
    6.     </property>  
    7.     <property>  
    8.         <name>yarn.resourcemanager.hostname</name>  
    9.         <value>master</value>  
    10.     </property>  
    11. </configuration>  

    3.2.6.6 修改/usr/local/hadoop/etc/hadoop/slaves,添加以下内容(即hostname文件中要设置的主机名):

    1. data1  
    2. data2  
    3. data3  

    3.3 克隆虚拟机

    将虚拟机复制3份,重新生成MAC地址,使用“完全复制”,作为从机

    VM VirtualBox中的四台虚拟机,全部启动

    虚拟机全部启动后,系统资源使用情况

    3.4 前置配置操作()

    3.4.1 使用ifconfig命令查询每一台虚拟机的IP地址

    经查询,master的IP地址为10.0.0.103,三台从机的IP地址为10.0.0.104、10.0.105、10.0.107

    3.4.2 编辑hostname文件,将三台从机分别命名为data1、data2、data3,保存

    3.4.3 编辑hosts文件,修改127.0.1.1的名称为本机的hostname,加入四个IP地址对应虚拟机的host,保存

    3.4.4 为了避免各虚拟机的内网IP地址发生变化,在路由器设置界面将IP与MAC地址绑定,或将DHCP地址租期设置为最大值,以免反复调整hosts文件

    3.4.5 ssh免密登录配置

    把自己的密钥拷贝到需要免密的机器上,对每台虚拟机执行以下命令:

    ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@IP地址【注意是用户名,不是主机名!】

    3.5 启动Hadoop

    3.5.1 启动HDFS

    3.5.1.1 格式化文件系统:在master的/usr/local/hadoop目录运行以下命令:

    1. bin/hdfs namenode –format   

    3.5.1.2 开启HDFS

    在master的/usr/local/hadoop目录运行以下命令:

    sbin/start-all.sh   

    出现上图所示界面,Hadoop启动成功

    3.6 上传一个文件至HDFS

    1. 在hadoop目录下新建一个文本文件,填充英文文本,命名为U201717126.txt,执行以下命令:hadoop fs -copyFromLocal U201717126.txt /dest
    2. 执行命令hadoop fs -ls /dest,显示相应的文件,表明上传成功

    3.7 使用example程序统计文件wordcount

    1. 输入命令: hadoop jar usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount /dest /out     
    2. 在虚拟机中打开http://master:8088,可以看到wordcount正在运行

    静等其运行完成:

    从localhost:50070/explorer.html打开hadoop的文件浏览器,在out文件夹下有_SUCCESS和part-r-00000两个文件

    下载part-r-00000文件并打开,词频统计与文档U201717126.txt内容一致

    3.8 编写实现wordcount功能的MapReduce程序(选做)

    3.8.1 编写WordMain.java:

    1. package wordcount;  
    2.   
    3. import java.io.IOException;  
    4.   
    5. import org.apache.hadoop.conf.Configuration;  
    6. import org.apache.hadoop.fs.Path;  
    7. import org.apache.hadoop.io.IntWritable;  
    8. import org.apache.hadoop.io.Text;  
    9. import org.apache.hadoop.mapreduce.Job;  
    10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
    11. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
    12. import org.apache.hadoop.util.GenericOptionsParser;  
    13.   
    14. public class WordMain {  
    15.     public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {  
    16.         // Configuration类:读取配置文件内容-core-site.xml  
    17.         Configuration conf = new Configuration();  
    18.           
    19.         // 读取命令行参数,并设置到conf  
    20.         String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();  
    21.           
    22.         // 添加内容  
    23.         conf.set("fs.defaultFS""hdfs://10.13.7.72:9000");  
    24.         conf.set("hadoop.job.user""hadoop");  
    25.         conf.set("mapreduce.framework.name""yarn");  
    26.         conf.set("mapreduce.jobtracker.address""10.13.7.72:9001");  
    27.         conf.set("yarn.resourcemanager.hostname""10.13.7.72");  
    28.         conf.set("yarn.resourcemanager.admin.adress""10.13.7.72:8033");  
    29.         conf.set("yarn.resourcemanager.adress""10.13.7.72:8032");  
    30.         conf.set("yarn.resourcemanager.resource-tracker.address""10.13.7.72:8036");  
    31.         conf.set("yarn.resourcemanager.scheduler.address""10.13.7.72:8030");  
    32.           
    33.           
    34.         if (otherArgs.length != 2) { // 输入目录 输出目录  
    35.             System.err.println("Usage: wordcount <in><out>");  
    36.             System.exit(2);  
    37.         }  
    38.           
    39.         Job job = new Job(conf, "word count"); // 新建一个job  
    40.         job.setJar("wordcount.jar");  
    41.           
    42.         job.setJarByClass(WordMain.class); // 设置主类  
    43.         job.setMapperClass(WordMapper.class); // 设置Mapper  
    44.         job.setCombinerClass(WordReducer.class); // 设置作业合成类  
    45.         job.setReducerClass(WordReducer.class); // 设置Reducer  
    46.         job.setOutputKeyClass(Text.class); // 设置输出数据的关键类  
    47.         job.setOutputValueClass(IntWritable.class); // 设置输出值类  
    48.         FileInputFormat.addInputPath(job, new Path(otherArgs[0]));  
    49.         FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));  
    50.         System.exit(job.waitForCompletion(true) ? 0 : 1);         
    51.     }  
    52. }  

    3.8.2 编写WordMapper.java:

    1. package wordcount;  
    2.   
    3.   
    4. import java.io.IOException;  
    5. import java.util.StringTokenizer;  
    6.   
    7. import org.apache.hadoop.io.IntWritable;  
    8. import org.apache.hadoop.io.Text;  
    9. import org.apache.hadoop.mapreduce.Mapper;  
    10.   
    11. public class WordMapper extends Mapper<Object, Text, Text, IntWritable> {  
    12.     private final static IntWritable one = new IntWritable(1);  
    13.     private Text word = new Text();  
    14.       
    15.     // Mapper类的核心方法  
    16.     /** 
    17.      *  key 首字符偏移量 
    18.      *  value 文件的一行内容 
    19.      *  context Mapper端的上下文 
    20.      * @throws InterruptedException  
    21.      * @throws IOException  
    22.      */  
    23.     public void map(Object key, Text value, Context context) throws IOException, InterruptedException {  
    24.         StringTokenizer itr = new StringTokenizer(value.toString());  
    25.         while (itr.hasMoreTokens()) {  
    26.             word.set(itr.nextToken());  
    27.             context.write(word, one);  
    28.         }  
    29.     }  
    30. }  

    3.8.3 编写WordReducer.java:

    1. package wordcount;  
    2.   
    3. import java.io.IOException;  
    4.   
    5. import org.apache.hadoop.io.IntWritable;  
    6. import org.apache.hadoop.io.Text;  
    7. import org.apache.hadoop.mapreduce.Reducer;  
    8.   
    9. public class WordReducer extends Reducer<Text, IntWritable, Text, IntWritable> {  
    10.     private IntWritable result = new IntWritable();  // 记录词的频数  
    11.       
    12.     // Reducer抽象类的核心方法  
    13.     public void reduce (Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {  
    14.         int sum = 0;  
    15.         // 遍历values  list<value> 叠加  
    16.         for (IntWritable value : values) {  
    17.             sum += value.get();  
    18.         }  
    19.         result.set(sum);  
    20.         context.write(key, result);  
    21.     }  
    22. }  

    3.8.4 将Java程序打包为my_wordcount.jar,置于hadoop目录,运行:

    hadoop my_wordcount.jar wordcount.WordMain /U201717126.txt /out2  

    出现上图界面,顺利运行完成

    在hadoop中的out2文件夹生成了两个文件

    下载part-r-00000文件并打开,词频统计与文档U201717126.txt内容一致

    (U201717126.txt的文件内容)

     

    四、实验结果

    1. 完成Hadoop分布式集群环境搭建
    2. 完成编写一个英文文本文件,上传至HDFS中
    3. 完成用Hadoop提供的example程序实现统计该文件的wordcount
    4. 自行编写实现wordcount功能的MapReduce程序并运行成功

     

    五、体会

    通过本次实验,我对Hadoop分布式集群、HDFS分布式存储、MapReduce分布式计算、Yarn资源调度有了更深刻的理解,掌握了Hadoop分布式集群环境搭建、HDFS文件的操作与MapReduce分布式计算程序的编译运行,对大数据与云计算的功能与原理有了进一步的了解。

    展开全文
  • 为了方便实验,安装一个Hadoop伪分布平台是很有
  • 一:IZP Hadoop集群现状 集群规模 共大、小 2个集群:数据中心和实验室集群 数据中心: 1台NameNode, 1台SecondNameNode, 1台JobTracker,100来台DataNode 共100多台高配服务器; 数据中心又分为10多个机架,每个机架...
  • 云计算技术课程实验

    2020-04-27 19:48:18
    大三上学期云计算技术课程的实验部分总结。该实验主要是对于分布式计算环境Spark进行配置以及利用开源图计算平台GraphX实现pagerank算法。 开发环境搭建 java开发环境搭建 使用java --version查看java版本及安装...
  • 一、实验目的 1. 了解熟悉linux命令。 2. 学习hadoop的安装和配置。 3. 学习编写基础的MR代码。 二、实验内容 1. 建立hadoop 完全分布式模式。 2. 上传数据并且对数据进行查询。 3. 通过安装Hadoop了解Hadoop...
  • 计算机科学与技术学院 网络计算设计与实现 实验指导书 实验一 SOCKET 编程 试验环境 计算机 TCP/IP 协议 VS2005 实验目的 1理解基本 TCP/IP 协议编程原理 2掌握如何利用 SOCKET 编写网络程序 3掌握 VS2005 编程环境...
  • # Hadoop 前言 # Hadoop试验集群的部署结构 # 系统和组建的依赖关系 # 生产环境的部署结构 # Day1 搭建伪分布实验环境 # 准备软件 # vmare 9.0.2 # 操作系统 CentOS 6.4 # jdk-6u45-linux-i586.bin # hadoop-1.1.2....
  • 头歌Educoder云计算与大数据——实验Hadoop单机部署 答案在下面的链接里 https://blog.csdn.net/qq_20185737/article/details/114677155
  • 根据课本上的Hadoop的章节的内容,熟悉从系统下载、安装、命令使用,到MapReduce的简单编程实验。 二、实验内容 2.1 部署方式 Hadoop主要有两种安装方式,即传统解压包方式和Linux标准方式。安装Hadoop的同时,还要...
  • 云计算实验报告.pdf

    2020-07-12 22:22:05
    云计算原理课程 期末实践报告 题目 Linux 集群 MapReduce 和 CloudSim 实践 成绩 学号 姓名 罗滔 登录邮箱 任课老师 许娟 2016 年 11 月 12 日 目录 实验...P11~P20) 实验三 Hadoop实验报告 ( P21~) AWS管理控制台 使用
  • Hadoop云计算的初步认识

    千次阅读 2013-05-30 13:25:30
    在说Hadoop之前,作为一个铁杆粉丝先粉一下Google。Google的伟大之处不仅在于它建立了一个强悍的搜索引擎,它还创造了几项革命性的技术:GFS,MapReduce,BigTable,即所谓的Google三驾马车。Google虽然没有公布这几...
  • 云计算导论实验3】MapReduce编程

    千次阅读 2021-11-25 22:41:14
    MapReduce环境搭建及编程前置环境Eclipse环境配置1. 安装插件:2. 配置MapReduce环境:3. 新建MapReduce工程设置 log4j.properties其他杂七杂八的坑点及环境设置1.... hadoop.dll 缺失3....需要搭建好hadoop
  • hadoop词频统计完整版!!!!!!!包含代码以及详细步骤。................................................................................................

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,306
精华内容 2,122
关键字:

云计算hadoop实验