所用教材↑,配套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是我目前看到最简洁明了的,务必看!
注意: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实例检测是否运行正常。
明明按照林子雨老师的步骤一步步做的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分布式文件系统 学习指南》,
要求:在实验报告中,给出实验过程的一些必要截图,并附上源代码。
我参考了这些文章:
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
挂载是指给磁盘分区(包括被虚拟出来的磁盘分区)分配一个盘符。在第三方软件,如磁盘分区管理软件、虚拟磁盘软件中,也附带有挂载功能。在linux操作系统中,挂载是指将一个设备(通常是存储设备)挂接到一个已存在的目录上。我们要访问存储设备中的文件,必须将文件所在专的分区挂载到一个已存在的目录上,然后通过访问这个目属录来访问存储设备。
新版Ubuntu自带“磁盘”工具,和另外下载的GParted功能一样,所以也可以不下载GParted。
林子雨老师给的示例:在目录“hdfs://localhost:9000/user/hadoop”下先上传5个文件file1.txt、file2.txt、file3.txt、file4.abc和file5.abc,要求从该目录中过滤出所有后缀名不为“.abc”的文件,对过滤之后的文件进行读取,并将这些文件的内容合并到文件“hdfs://localhost:9000/user/hadoop/merge.txt”中。
①只读取了一行,想全部读取可以写个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
三、实验内容和要求
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成绩信息
参考:https://blog.csdn.net/shijinxin3907837/article/details/101544390
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
三、实验内容和要求
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 [...] ");
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
①编写mapreduce程序,实现单词出现次数统计。
②在电脑上新建文件夹input,并input文件夹中创建三个文本文件:file1.txt,file2.txt,file3.txt,启动hadoop伪分布式,将input文件夹上传到HDFS上
③统计结果保存到hdfs的output文件夹。