大数据实验报告【全集】

所用教材↑,配套PPT厦门大学林子雨配套MOOC内容和书里的内容差不多。

【意味着课上不好好听,课下你还能看教科书补(╹ڡ╹ )】建议先实验再听课或看书。

若对你有帮助的话,记得点赞、关注我哦!实验中遇到不少困难,故本文较长,请耐心阅览!

实验标题:①安装Hadoop;②HDFS编程(安装);③HDFS编程;④Mapreduce编程

大数据类开放在线实践课程(能模拟实验,推荐):https://www.educoder.net/paths/158

◉ 实验中用到的Linux命令:

cd /home/hadoop #把/home/hadoop设置为当前目录
cd .. #返回上一级目录
cd ~ #进入到当前Linux系统登录用户的主目录(或主文件夹)。在 Linux 系统中,~代表的是用户的主文件夹,
#即“/home/用户名”这个目录,如果当前登录用户名为 hadoop,则~就代表“/home/hadoop/”这个目录
ls #查看当前目录中的文件
ls -l #查看文件和目录的权限信息
mkdir input #在当前目录下创建input子目录
mkdir -p src/main/scala #在当前目录下,创建多级子目录src/main/scala
cat /proc/version #查看Linux系统内核版本信息
cat /home/hadoop/word.txt #把/home/hadoop/word.txt这个文件全部内容显示到屏幕上
cat file1 file2 > file3 #把当前目录下的file1和file2两个文件进行合并生成文件file3
head -5 word.txt #把当前目录下的word.txt文件中的前5行内容显示到屏幕上
cp /home/hadoop/word.txt /usr/local/ #把/home/hadoop/word.txt文件复制到“/usr/local”目录下
rm ./word.txt #删除当前目录下的word.txt文件
rm –r ./test #删除当前目录下的test目录及其下面的所有文件
rm –r test* #删除当面目录下所有以test开头的目录和文件

tar -zxf ~/下载/spark-2.1.0.tgz -C /usr/local/ #把spark-2.1.0.tgz这个压缩文件解压到/usr/local目录下
mv spark-2.1.0 spark #把spark-2.1.0目录重新命名为spark
chown -R hadoop:hadoop ./spark # hadoop是当前登录Linux系统的用户名,把当前目录下的spark子目录的所有权限,
#赋予给用户hadoop
ifconfig #查看本机IP地址信息
exit #退出并关闭Linux终端

◉ Vim编辑器命令:

sudo apt-get install vim
vim word.txt
按Esc退出编辑   i编辑
:x 或 :wq 回车,保存后退出
:q 回车,不保存并退出
:q! 回车,不保存并强制退出

每次重新启动虚拟机,或者在不同的地方(实验室或者宿舍)启动虚拟机,IP地址都可能会发生变化,所以每次登录Ubuntu系统以后,都需要重新查询IP地址 = “inet地址”。

◉ virtual box怎么全屏显示?

 启动Linux系统后,在虚拟机窗口的“设备”处选择“安装增强功能”,点击“运行”后会弹出授权窗体,安装后即可全屏。

一阵子不用虚拟机就忘怎么操作。

◉ 关于Linux下JDK:

$ which java 查看JDK的安装路径/usr/java/jdk/jdk1.8.0_172/

$ rm -rf /usr/java/jdk/jdk1.8.0_172/ 卸载JDK,并如下图所示,在~/.bashrc文件中把相关JAVA_HOME的配置信息删除。

$ java -version$ java$ javac 检查JDK版本,即检查是否存在JDK

始终无法自如更换JDK版本,网上多半说的是这种方法:https://blog.csdn.net/apple_4872330/article/details/104615894?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3

我觉得我的方法更简单 ↓

实验一 安装Hadoop(黑字基本都是废话,往下拉有推荐链接和我踩过的坑

一、实验目的

   1. 掌握Linux虚拟机安装方法或者双操作系统安装方法。Hadoop在Linux操作系统上运行可以发挥最佳性能,鉴于目前很多读者可能正在使用Windows操作系统,因此,为了完成本书的后续实验,这里有必要通过本实验让读者掌握在Windows操作系统上搭建Linux虚拟机的方法,以及安装双操作系统的方法(同时安装Windows和Linux系统,电脑开机时,可以选择登录哪个系统)。

   2. 掌握Hadoop的伪分布式安装方法。很多读者并不具备集群环境,需要在一台机器上模拟一个小的集群,因此,需要通过本实验让读者掌握在单机上进行Hadoop的伪分布式安装方法。

(实验一就是让伪分布式安装Hadoop,我见有些同学用Win10的Linux子系统(不装虚拟机和双系统的方法)来做此实验,也不失为一种很好的选择,推荐这篇博文:手把手教你启用Win10的Linux子系统(超详细)https://blog.csdn.net/zhangdongren/article/details/82663977

二、实验平台

       操作系统:Windows系统或者Ubuntu(或CentOS7)。

       虚拟机软件:推荐使用的开源虚拟机软件为VirtualBox 。VirtualBox是一款功能强大的免费虚拟机软件,它不仅具有丰富的特色,而且性能也很优异,简单易用,可虚拟的系统包括Windows、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2甚至Android 4.0系统等操作系统。读者可以在Windows系统上安装VirtualBox软件,然后在VirtualBox上安装并且运行Linux操作系统。本次实验默认的Linux发行版为Ubuntu14.04。

三、实验内容和要求

       读者需要构建起Linux系统环境,并在Linux系统上安装Hadoop。

       构建Linux系统环境,有两种方式:(1)在Windows系统上安装Linux虚拟机;(2)安装双操作系统,即在电脑上同时安装Windows和Linux系统,电脑开机时,可以选择登录哪个系统。

       建议电脑比较新或者配置内存4G以上的电脑可以选择虚拟机安装,电脑较旧或配置内存小于等于4G的电脑强烈建议选择双系统安装,否则,在配置较低的计算机上运行LInux虚拟机,系统运行速度会非常慢。鉴于目前读者的计算机硬件配置一般不高,建议采用双系统安装。

        建议读者在完成下列实验之前,仔细阅读网络教程:林子雨老师的blog是我目前看到最简洁明了的,务必看!

      2015年出的教程:http://dblab.xmu.edu.cn/blog/285/ 

      针对3.1.3新版出的教程:http://dblab.xmu.edu.cn/blog/2441-2/

        注意:Hadoop版本不同,操作方式会有些许不同!

3.1 下载相关软件

        如果读者正在使用Linux操作系统,可以跳过本步,不需要下载相关软件。如果读者正在使用Windows操作系统,并且选择虚拟机方式安装Linux系统,请下载VirtualBox虚拟机软件和Ubuntu14.04镜像文件。同时到Apache Hadoop官网下载Hadoop2.7.1版本安装文件。

3.2 安装Linux系统

        读者可以选择下面两种方式中的一种方式来安装Linux系统。

3.2.1 虚拟机方式

        如果读者正在使用Linux操作系统,则不需要了解Windows系统上的Linux虚拟机安装方法。如果读者正在使用Windows操作系统,则需要在Windows系统上安装Linux虚拟机。首先,在Windows系统上安装虚拟机软件VirtualBox;然后,在虚拟机软件VirtualBox上安装Ubuntu14.04操作系统。

3.2.2 双系统方式

        在电脑上同时安装Windows和Linux系统,电脑开机时,可以选择登录哪个系统。可以参考“百度经验”中的安装指南。

        第一步:制作安装U盘

        根据下面指南,在一个U盘上制作启动安装盘,然后,电脑启动后,就可以从U盘启动安装Ubuntu系统。

        http://jingyan.baidu.com/article/59703552e0a6e18fc007409f.html

        第二步:双系统安装

        请根据下面指南完成双系统安装:

        http://jingyan.baidu.com/article/dca1fa6fa3b905f1a44052bd.html

3.3 进行Hadoop伪分布式安装

        在Linux环境下完成伪分布式环境的搭建,并运行Hadoop自带的WordCount实例检测是否运行正常。


我的配置:Ubuntu18.04.3LST + Hadoop3.1.3 + JDK-Linux-14.0.1

我踩过的坑:namenode格式化后,既没有Data文件夹,也无法启动DataNode进程

明明按照林子雨老师的步骤一步步做的o(≧口≦)o 很多同学都没有遇到我这类问题,是人品的关系吗。。。

但我的输出结果如下 ↓

用林子雨老师的方法无效

百度失败

尝试Hadoop2.7.7(有些同学就没问题)不仅没有DataNode和SecondaryNameNode还报错 _(:з)∠)_

终于迎来了问题的突破口!

我看了这篇文章,文末解决了我的问题:https://www.cnblogs.com/zhangyinhua/p/7647686.html#_label0

问题解决后的运行结果 ↓

验证Hadoop是否启动成功?

以前的版本访问MapReduce的页面:http://localhost:50030  HDFS的页面:http://localhost:50070        

3.x的版本访问Hadoop Administration:http://localhost:9870

实验二 HDFS编程

一、实验目的

      熟悉HDFS操作常用的Java API。

二、实验平台

      操作系统:Linux

      Hadoop版本:2.6.0或以上版本

      JDK版本:1.6或以上版本

      Java IDE:Eclipse

三、实验内容和要求

      在完成以下实验之前,请认真阅读“大数据课程学生服务站”的学习指南栏目中的相关内容,具体请参见《大数据技术原理与应用 第三章 Hadoop分布式文件系统 学习指南》,

      2015年出的教程: http://dblab.xmu.edu.cn/blog/290-2/

      2020年出的教程:http://dblab.xmu.edu.cn/blog/2460-2/

  1. 编写一个Java程序,打开一个HDFS中的文件,并读取其中的数据,输出到标准输出;
  2. 编写一个Java程序,新建一个HDFS文件,并向其中写入你的名字;
  3. 编写一个Java程序,判断HDFS上是否存在某个文件?

      要求:在实验报告中,给出实验过程的一些必要截图,并附上源代码。


装Ubuntu时警告10G磁盘空间快见底了,我还没装什么软件呐。。。

我参考了这些文章:

VirtualBox 扩展虚拟硬盘容量 https://blog.csdn.net/ganshuyu/article/details/17954733

注*:我$partprobe会报Warning,在别的博文里看到:使用partprobe重载分区只能是对不同的硬盘才能及时生效。对于同一块硬盘,修改过分区信息后,必须重启系统才能使修改过的分区信息生效。

控制器SATA和IDE是什么? https://zhidao.baidu.com/question/49756416.html

VBOX UBUNTU虚拟机扩容方案 虚拟分配空间转换为实际分配空间 将新开辟的/dev/sda2挂载到用户下面https://www.freesion.com/article/959318019/

VMware+Ubuntu18.04 磁盘扩容 用GParted工具将/dev/sda1与/dev/sda2合并https://blog.csdn.net/lhl_blog/article/details/86636217

我用了最后一篇的方法,主要是简单,还有我不知道挂载到用户下面的/dev/sda2怎么用(怎么改软件默认下载路径)。

        挂载是指给磁盘分区(包括被虚拟出来的磁盘分区)分配一个盘符。在第三方软件,如磁盘分区管理软件、虚拟磁盘软件中,也附带有挂载功能。在linux操作系统中,挂载是指将一个设备(通常是存储设备)挂接到一个已存在的目录上。我们要访问存储设备中的文件,必须将文件所在专的分区挂载到一个已存在的目录上,然后通过访问这个目属录来访问存储设备。

        

        新版Ubuntu自带“磁盘”工具,和另外下载的GParted功能一样,所以也可以不下载GParted。

我又踩坑了:没注意看上半部分教程,搞了半天没理解/user/hadoop目录哪来的?5个文件怎么被执行?所以一定要认真看林子雨老师的教程 ↓

林子雨老师给的示例:在目录“hdfs://localhost:9000/user/hadoop”下先上传5个文件file1.txt、file2.txt、file3.txt、file4.abc和file5.abc,要求从该目录中过滤出所有后缀名不为“.abc”的文件,对过滤之后的文件进行读取,并将这些文件的内容合并到文件“hdfs://localhost:9000/user/hadoop/merge.txt”中。

示例结果:

实验结果:

把 f.txt 先上传到HDFS的“/user/”目录下

①只读取了一行,想全部读取可以写个for循环。

②把全部内容改写成“Hello world”。

③检查文件是否存在。

实验三 HBase编程

一、实验目的

        1. 理解HBase在Hadoop体系结构中的角色;

        2. 熟练使用HBase操作常用的Shell命令;

        3. 熟悉HBase操作常用的Java API。

二、实验平台

        操作系统:Linux

        Hadoop版本:2.6.0或以上版本

        HBase版本:1.1.2或以上版本

        JDK版本:1.6或以上版本

        Java IDE:Eclipse

三、实验内容和要求

我的配置:Ubuntu18.04.3LST + Hadoop3.1.3 + JDK-Linux-14.0.1 + HBase-2.2.5

        2020年出的教程:http://dblab.xmu.edu.cn/blog/2442-2/

        1. 根据上面给出的表格,用Hbase Shell模式设计student学生表格。

            a)设计完后,用scan指令浏览表的相关信息,给出截图。

            b)查询zhangsan 的Computer成绩。给出截图。

            c)修改lisi的Math成绩,改为95。给出截图。

        2. 根据上面已经设计出的student,用Hbase API编程。

            a)添加数据:English:45 Math:89 Computer:100

            b)获取scofield的English成绩信息 


命令'vim'可在'usr/bin/vi/处找到 由于/usr/bin不在PATH环境变量中,故无法找到该命令。

命令'lesspipe'可在以下位置找到... 由于/bin:/usr/bin不在PATH环境变量中,故无法找到该命令。

解决方法:检查 ~/.bashrc 文件,路径是否写对。

一定要记得关HBase和Hadoop,不然再次打开时就会报错!

在HBase shell中出现error: KeeperErrorCode = NoNode for /hbase/master

参考:https://blog.csdn.net/shijinxin3907837/article/details/101544390

解决方法:在没有重要文件得情况下,删除tmp文件夹,重新初始化

实验代码:

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
 
public class hbase_insert {

      //三个静态成员对象
	  public static Configuration configuration;//管理HBase的配置信息
      public static Connection connection;//管理HBase的连接
      public static Admin admin;  //管理HBase数据库的表信息
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 configuration  = HBaseConfiguration.create();//使用默认的HBase配置文件创建configuration          configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");//连接hbase
         try{
             connection = ConnectionFactory.createConnection(configuration);
             admin = connection.getAdmin();
         }catch (IOException e){
             e.printStackTrace();
         }
         try {//插入的信息
			insertRow("student","scofield","score","English","45");
			insertRow("student","scofield","score","Math","89");
			insertRow("student","scofield","score","Computer","100");
		} catch (IOException e) {//异常处理
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
         close();
	}
	 public static void insertRow(String tableName,String rowKey,String colFamily,
			 String col,String val) throws IOException {
         Table table = connection.getTable(TableName.valueOf(tableName));
         Put put = new Put(rowKey.getBytes());
         put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
         table.put(put);
         table.close();
     }
      //关闭连接
	  public static void close(){
            try{
                if(admin != null){
                    admin.close();
                }
                if(null != connection){
                    connection.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
     }
}

实验结果:

参考:大数据——四种数据库(MySQL,HBase,MongoDB,Redis)操作实例总结https://blog.csdn.net/weixin_43042683/article/details/106230370

先开Hadoop→HBase(最不方便的是中途你最好不要写错一个字,不然很容易报错)→先关HBase→Hadoop

① 用Hbase Shell模式设计student学生表格,用scan指令浏览表的相关信息

②查询 zhangsan 的Computer成绩

③修改 lisi 的Math成绩,改为95

④用Hbase API编程,添加数据:English:45 Math:89 Computer:100

⑤获取 scofield 的English成绩信息

实验四 MapReduce编程

一、实验目的

        1. 理解Hadoop中MapReduce模块的处理逻辑

        2. 熟悉MapReduce编程

二、实验平台

        操作系统:Linux

        工具:Eclipse或者Intellij Idea等Java IDE

三、实验内容和要求

      2020年出的教程:http://dblab.xmu.edu.cn/blog/2481-2/

        1. 在电脑上新建文件夹input,并input文件夹中创建三个文本文件:file1.txt,file2.txt,file3.txt

            三个文本文件的内容分别是:

            file1.txt: hello dblab world

            file2.txt: hello dblab hadoop

            file3.txt: hello mapreduce

        2. 启动hadoop伪分布式,将input文件夹上传到HDFS上

        3. 编写mapreduce程序,实现单词出现次数统计。统计结果保存到hdfs的output文件夹。

        4. 获取统计结果(给出截图或相关结果数据)


实验代码:

import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
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 org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {
    public WordCount() {
    }
     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: wordcount <in> [<in>...] <out>");
            System.exit(2);
        }
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(WordCount.TokenizerMapper.class);
        job.setCombinerClass(WordCount.IntSumReducer.class);
        job.setReducerClass(WordCount.IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class); 
        for(int i = 0; i < otherArgs.length - 1; ++i) {
            FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
        }
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));
        System.exit(job.waitForCompletion(true)?0:1);
    }
    public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
        private static final IntWritable one = new IntWritable(1);
        private Text word = new Text();
        public TokenizerMapper() {
        }
        public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString()); 
            while(itr.hasMoreTokens()) {
                this.word.set(itr.nextToken());
                context.write(this.word, one);
            }
        }
    }
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();
        public IntSumReducer() {
        }
        public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            int sum = 0;
            IntWritable val;
            for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
                val = (IntWritable)i$.next();
            }
            this.result.set(sum);
            context.write(key, this.result);
        }
    }
}

实验结果:

①编写mapreduce程序,实现单词出现次数统计。

②在电脑上新建文件夹input,并input文件夹中创建三个文本文件:file1.txt,file2.txt,file3.txt,启动hadoop伪分布式,将input文件夹上传到HDFS上

③统计结果保存到hdfs的output文件夹。

猜你喜欢

转载自blog.csdn.net/qq_41587612/article/details/106458930
今日推荐