所用教材↑,配套PPT和厦门大学林子雨配套MOOC内容和书里的内容差不多。
【意味着课上不好好听,课下你还能看教科书补(╹ڡ╹ )】建议先实验再听课或看书。
若对你有帮助的话,记得点赞、关注我哦!实验中遇到不少困难,故本文较长,请耐心阅览!
B站同名up猪,欢迎关注我的账号鸽子不二的个人空间-鸽子不二个人主页-哔哩哔哩视频哔哩哔哩鸽子不二的个人空间,提供鸽子不二分享的视频、音频、文章、动态、收藏等内容,关注鸽子不二账号,第一时间了解UP主动态。https://space.bilibili.com/204913846
博客总领目录请看这篇,绝对干货中的干货
软件工程专业大学四年学什么_大学近代史学分是多少-CSDN博客https://blog.csdn.net/qq_41587612/article/details/104362661
实验标题:①安装Hadoop;②HDFS编程(安装);③HDFS编程;④Mapreduce编程
大数据类开放在线实践课程(能模拟实验,推荐):头歌实践教学平台
◉ 实验中用到的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版本,网上多半说的是这种方法:ubuntu 更换指定jdk版本,java -version没有变新jdk版问题_ubuntu java升级,版本没变-CSDN博客
我觉得我的方法更简单 ↓
实验一 安装Hadoop(黑字基本都是废话,往下拉有推荐链接和我踩过的坑)
一、实验目的
1. 掌握Linux虚拟机安装方法或者双操作系统安装方法。Hadoop在Linux操作系统上运行可以发挥最佳性能,鉴于目前很多读者可能正在使用Windows操作系统,因此,为了完成本书的后续实验,这里有必要通过本实验让读者掌握在Windows操作系统上搭建Linux虚拟机的方法,以及安装双操作系统的方法(同时安装Windows和Linux系统,电脑开机时,可以选择登录哪个系统)。
2. 掌握Hadoop的伪分布式安装方法。很多读者并不具备集群环境,需要在一台机器上模拟一个小的集群,因此,需要通过本实验让读者掌握在单机上进行Hadoop的伪分布式安装方法。
(实验一就是让伪分布式安装Hadoop,我见有些同学用Win10的Linux子系统(不装虚拟机和双系统的方法)来做此实验,也不失为一种很好的选择,推荐这篇博文:手把手教你启用Win10的Linux子系统(超详细)手把手教你启用Win10的Linux子系统(超详细)_win10linux子系统-CSDN博客)
二、实验平台
操作系统: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年出的教程:大数据技术原理与应用 第二章 大数据处理架构Hadoop 学习指南_厦大数据库实验室博客
针对3.1.3新版出的教程:Hadoop3.1.3安装教程_单机/伪分布式配置_Hadoop3.1.3/Ubuntu18.04(16.04)_厦大数据库实验室博客
注意: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
在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年出的教程: 大数据技术原理与应用 第三章 分布式文件系统HDFS 学习指南_厦大数据库实验室博客
2020年出的教程:HDFS编程实践(Hadoop3.1.3)_厦大数据库实验室博客
- 编写一个Java程序,打开一个HDFS中的文件,并读取其中的数据,输出到标准输出;
- 编写一个Java程序,新建一个HDFS文件,并向其中写入你的名字;
- 编写一个Java程序,判断HDFS上是否存在某个文件?
要求:在实验报告中,给出实验过程的一些必要截图,并附上源代码。
装Ubuntu时警告10G磁盘空间快见底了,我还没装什么软件呐。。。
我参考了这些文章:
VirtualBox 扩展虚拟硬盘容量 VirtualBox 扩展虚拟硬盘容量-CSDN博客
注*:我$partprobe会报Warning,在别的博文里看到:使用partprobe重载分区只能是对不同的硬盘才能及时生效。对于同一块硬盘,修改过分区信息后,必须重启系统才能使修改过的分区信息生效。
控制器SATA和IDE是什么? 请问SATA和IDE是什么意思?_百度知道
VBOX UBUNTU虚拟机扩容方案 虚拟分配空间转换为实际分配空间 将新开辟的/dev/sda2挂载到用户下面vbox ubuntu虚拟机扩容方案 虚拟分配空间转换为实际分配空间 - 灰信网(软件开发博客聚合)
VMware+Ubuntu18.04 磁盘扩容 用GParted工具将/dev/sda1与/dev/sda2合并VMware+Ubuntu18.04 磁盘扩容_vmware ubuntu 18.04 扩容磁盘-CSDN博客
我用了最后一篇的方法,主要是简单,还有我不知道挂载到用户下面的/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年出的教程:HBase2.2.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
参考:在hbase shell中出现error: KeeperErrorCode = NoNode for /hbase/master-CSDN博客
解决方法:在没有重要文件得情况下,删除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)操作实例总结大数据——四种数据库(MySQL,HBase,MongoDB,Redis)操作实例总结-CSDN博客
先开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年出的教程:MapReduce编程实践(Hadoop3.1.3)_厦大数据库实验室博客
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文件夹。