首页 > 其他分享 >大数据实验

大数据实验

时间:2023-12-25 17:47:43浏览次数:32  
标签:文件 String HDFS 实验 数据 目录 Math

实验1

熟悉常用的Linux操作和Hadoop操作

1.实验目的

Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。

2.实验平台

(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);

(2)Hadoop版本:3.1.3。

3.实验步骤

1.熟悉常用的Linux操作

1)cd命令:切换目录

(1) 切换到目录“/usr/local”

cd /usr/local

(2) 切换到当前目录的上一级目录

cd ..

(3) 切换到当前登录Linux系统的用户的自己的主文件夹

cd ~

2)ls命令:查看文件与目录

查看目录“/usr”下的所有文件和目录

3)mkdir命令:新建目录

(1)进入“/tmp”目录,创建一个名为“a”的目录,并查看“/tmp”目录下已经存在哪些目录

(2)进入“/tmp”目录,创建目录“a1/a2/a3/a4” 

4)rmdir命令:删除空的目录

(1)将上面创建的目录a(在“/tmp”目录下面)删除

(2)删除上面创建的目录“a1/a2/a3/a4” (在“/tmp”目录下面),然后查看“/tmp”目录下面存在哪些目录

5)cp命令:复制文件或目录

(1)将当前用户的主文件夹下的文件.bashrc复制到目录“/usr”下,并重命名为bashrc1

(2)在目录“/tmp”下新建目录test,再把这个目录复制到“/usr”目录下

6)mv命令:移动文件与目录,或更名

(1)将“/usr”目录下的文件bashrc1移动到“/usr/test”目录下

(2)将“/usr”目录下的test目录重命名为test2

7)rm命令:移除文件或目录

(1)将“/usr/test2”目录下的bashrc1文件删除

(2)将“/usr”目录下的test2目录删除

8)cat命令:查看文件内容

查看当前用户主文件夹下的.bashrc文件内容

9)tac命令:反向查看文件内容

反向查看当前用户主文件夹下的.bashrc文件的内容

10)more命令:一页一页翻动查看

翻页查看当前用户主文件夹下的.bashrc文件的内容

11)head命令:取出前面几行

(1)查看当前用户主文件夹下.bashrc文件内容前20行

(2)查看当前用户主文件夹下.bashrc文件内容,后面50行不显示,只显示前面几行

12)tail命令:取出后面几行

(1)查看当前用户主文件夹下.bashrc文件内容最后20行

(2)查看当前用户主文件夹下.bashrc文件内容,并且只列出50行以后的数据

13)touch命令:修改文件时间或创建新文件

(1)在“/tmp”目录下创建一个空文件hello,并查看文件时间

(2)修改hello文件,将文件时间整为5天前

14)chown命令:修改文件所有者权限

将hello文件所有者改为root帐号,并查看属性

15)find命令:文件查找

找出主文件夹下文件名为.bashrc的文件

16)tar命令:压缩命令

(1)在根目录“/”下新建文件夹test,然后在根目录“/”下打包成test.tar.gz

(2)把上面的test.tar.gz压缩包,解压缩到“/tmp”目录

17)grep命令:查找字符串

从“~/.bashrc”文件中查找字符串'examples'

18)配置环境变量

(1)请在“~/.bashrc”中设置,配置Java环境变量

(2)查看JAVA_HOME变量的值

2.熟悉常用的Hadoop操作

(1)使用hadoop用户登录Linux系统,启动Hadoop(Hadoop的安装目录为“/usr/local/hadoop”),为hadoop用户在HDFS中创建用户目录“/user/hadoop”

(2)接着在HDFS的目录“/user/hadoop”下,创建test文件夹,并查看文件列表

(3)将Linux系统本地的“~/.bashrc”文件上传到HDFS的test文件夹中,并查看test

(4)将HDFS文件夹test复制到Linux系统本地文件系统的“/usr/local/hadoop”目录下

 

4.实验报告

题目:

熟悉常用的Linux操作和Hadoop操作

姓名:

粘艺凡

日期:

2023/11/7

实验环境:vmware虚拟机环境,centos

实验内容与完成情况:

  1. cd /usr/local
  2. cd ..
  3. cd ~

         

  1. cd /usr
  2. Ls

 

  1. cd /tmp
  2. Mkdir a
  3. Ls
  4. Mkdir -p a1/a2/a3/aa4

10.Cd a1/a2/a3/a4

    

  1. cd /tmp
  2. rmdir -v a
  3. rmdir -vp a1/a2/a3/a4

 

  1. 注意权限问题,以及注意格式/和空格

 

要注意现在处于的文件位置

 

注意确认y或者n

 

cat命令

 

tac命令

 

more命令

 

head命令(文件可能没东西)

 

tail命令

 

touch命令(要注意时间的格式)

 

chown命令

 

find和tar命令

 

grep命令(bashrc文件中空)

 

 

hadoop操作,(hadoop操作是直接在虚拟机中操作的,所以背景不同)

 

 

 

 

出现的问题:主要就是权限问题,别的没有了

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

主要就是权限问题,一开始设置的默认是hadoop,然后在执行命令的时候有的用不了,换成了root之后解决

 


实验2

熟悉常用的HDFS操作

 

 

1.实验目的

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

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

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

2. 实验平台

(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);

(2)Hadoop版本:3.1.3;

(3)JDK版本:1.8;

(4)Java IDE:Eclipse。

3. 实验步骤

(一)编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务:

向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件;

从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;

将HDFS中指定文件的内容输出到终端中;

显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;

给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;

提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录;

 

提供一个HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在,则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录;

向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;

删除HDFS中指定的文件;

在HDFS中,将文件从源路径移动到目的路径。

 

(二)编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

(三)查看Java帮助手册或其它资料,用“java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。

 

4.实验报告

题目:

熟悉常用的HDFS操作

 

姓名

粘艺凡

日期

2023.11.14

实验环境:vmware虚拟机环境,centos

实验内容与完成情况:

该图片中出现的问题是datanote问题,全部启动之后已经解决

 

 

 

 

 

 

(二)编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

(三)查看Java帮助手册或其它资料,用“java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。

 

 

 

 

 

 

 

出现的问题:1.将文件追加到hdfs文件中报错

 

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):1.原因是datanote的问题,电脑有三个节点,一台出问题,就无法成功。将三台datanote都打开之后就可以正常将文件追加到hdfs文件中

 

 

实验3

熟悉常用的HBase操作

 

 

1.实验目的

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

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

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

2.实验平台

(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);

(2)Hadoop版本:3.1.3;

(3)HBase版本:2.2.2;

(4)JDK版本:1.8;

(5)Java IDE:Eclipse。

3. 实验步骤

(一)编程实现以下指定功能,并用Hadoop提供的HBase Shell命令完成相同任务:

列出HBase所有的表的相关信息,例如表名;

在终端打印出指定的表的所有记录数据;

向已经创建好的表添加和删除指定的列族或列;

清空指定的表的所有记录数据;

统计表的行数。

 

(二)HBase数据库操作

1. 现有以下关系型数据库中的表和数据(见表14-3到表14-5),要求将其转换为适合于HBase存储的表并插入数据:

表14-3 学生表(Student)

学号(S_No)

姓名(S_Name)

性别(S_Sex)

年龄(S_Age)

2015001

Zhangsan

male

23

2015002

Mary

female

22

2015003

Lisi

male

24

 

表14-4 课程表(Course)

课程号(C_No)

课程名(C_Name)

学分(C_Credit)

123001

Math

2.0

123002

Computer Science

5.0

123003

English

3.0

 

表14-5 选课表(SC)

学号(SC_Sno)

课程号(SC_Cno)

成绩(SC_Score)

2015001

123001

86

2015001

123003

69

2015002

123002

77

2015002

123003

99

2015003

123001

98

2015003

123002

95

 

2. 请编程实现以下功能:

(1)createTable(String tableName, String[] fields)

创建表,参数tableName为表的名称,字符串数组fields为存储记录各个字段名称的数组。要求当HBase已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表。

(2)addRecord(String tableName, String row, String[] fields, String[] values)

向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。

(3)scanColumn(String tableName, String column)

浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。

(4)modifyData(String tableName, String row, String column)

修改表tableName,行row(可以用学生姓名S_Name表示),列column指定的单元格的数据。

(5)deleteRow(String tableName, String row)

删除表tableName中row指定的行的记录。

 

4.实验报告

题目:

熟悉常用的HBase操作

姓名

粘艺凡

日期

2023.11.14

实验环境:(1)操作系统:centos7(建议Ubuntu16.04或Ubuntu18.04);

(2)Hadoop版本:3.1.3;

(3)HBase版本:2.2.2;

(4)JDK版本:1.8;

(5)Java IDE:IDEA

 

实验内容与完成情况:

list

 

 

在终端打印出指定的表的所有记录数据

 

 

增删、查、统计

 

 

建表、插入数据

 

 

 

 

 

(1)createTable(String tableName, String[] fields)

创建表,参数tableName为表的名称,字符串数组fields为存储记录各个字段名称的数组。要求当HBase已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表。

 

 

 

 

 

(2)addRecord(String tableName, String row, String[] fields, String[] values)

向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。

 

(3)scanColumn(String tableName, String column)

浏览表tableName某一列的数据,如果某一行记录中该列数据不存在,则返回null。要求当参数column为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;当参数column为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。

 

(4)modifyData(String tableName, String row, String column)

修改表tableName,行row(可以用学生姓名S_Name表示),列column指定的单元格的数据。

 

(5)deleteRow(String tableName, String row)

删除表tableName中row指定的行的记录。

 

 

 

出现的问题:遇到的最大的问题就是hbase shell无法正常启动。

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

因为很早就写了,忘记了是什么问题,总之困了很久。关闭防火墙啥的都不行,最后好像是恢复快照解决。

 

 

实验4

NoSQL和关系数据库的操作比较

 

1.实验目的

(1)理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点;

(2)熟练使用四种数据库操作常用的Shell命令;

(3)熟悉四种数据库操作常用的Java API。

2.实验平台

(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);

(2)Hadoop版本:3.1.3;

(3)MySQL版本:5.6;

(4)HBase版本:2.2.2;

(5)Redis版本:5.0.5;

(6)MongoDB版本:4.0.16;

(7)JDK版本:1.8;

(8)Java IDE:Eclipse;

3.实验步骤

(一) MySQL数据库操作

学生表如14-7所示。

表14-7 学生表Student

Name

English

Math

Computer

zhangsan

69

86

77

lisi

55

100

88

  1. 根据上面给出的Student表,在MySQL数据库中完成如下操作:

(1)在MySQL中创建Student表,并录入数据;

(2)用SQL语句输出Student表中的所有记录;

(3)查询zhangsan的Computer成绩;

(4)修改lisi的Math成绩,改为95。

        

2.根据上面已经设计出的Student表,使用MySQL的JAVA客户端编程实现以下操作:

(1)向Student表中添加如下所示的一条记录:

scofield

45

89

100

 

(2)获取scofield的English成绩信息

 

(二)HBase数据库操作

学生表Student如表14-8所示。

表14-8 学生表Student

     name

score

English

Math

Computer

zhangsan

69

86

77

lisi

55

100

88

根据上面给出的学生表Student的信息,执行如下操作:

(1)用Hbase Shell命令创建学生表Student;

(2)用scan命令浏览Student表的相关信息;

(3)查询zhangsan的Computer成绩;

(4)修改lisi的Math成绩,改为95。

 

2.根据上面已经设计出的Student表,用HBase API编程实现以下操作:

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

scofield

45

89

100

 

(2)获取scofield的English成绩信息。

 

(三)Redis数据库操作

Student键值对如下:

zhangsan:{

English: 69

Math: 86

Computer: 77

lisi:{

English: 55

Math: 100

Computer: 88

 

1. 根据上面给出的键值对,完成如下操作:

(1)用Redis的哈希结构设计出学生表Student(键值可以用student.zhangsan和student.lisi来表示两个键值属于同一个表);   

(2)用hgetall命令分别输出zhangsan和lisi的成绩信息;

(3)用hget命令查询zhangsan的Computer成绩;

(4)修改lisi的Math成绩,改为95。

 

2.根据上面已经设计出的学生表Student,用Redis的JAVA客户端编程(jedis),实现如下操作:

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

该数据对应的键值对形式如下:

scofield:{

English: 45

Math: 89

Computer: 100

 

(2)获取scofield的English成绩信息

 

(四)MongoDB数据库操作

Student文档如下:

{

“name”: “zhangsan”,

“score”: {

“English”: 69,

“Math”: 86,

“Computer”: 77

}

}

{

“name”: “lisi”,

“score”: {

“English”: 55,

“Math”: 100,

“Computer”: 88

}

}

 

1.根据上面给出的文档,完成如下操作:

(1)用MongoDB Shell设计出student集合;

(2)用find()方法输出两个学生的信息;

(3)用find()方法查询zhangsan的所有成绩(只显示score列);

(4)修改lisi的Math成绩,改为95。

 

2.根据上面已经设计出的Student集合,用MongoDB的Java客户端编程,实现如下操作:

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

与上述数据对应的文档形式如下:

{

“name”: “scofield”,

“score”: {

“English”: 45,

“Math”: 89,

“Computer”: 100

}

}

   

(2)获取scofield的所有成绩成绩信息(只显示score列)

 

4.实验报告

题目:

NoSQL和关系数据库的操作比较

姓名

粘艺凡

日期

2023.12.5

实验环境:1)操作系统:centos7(建议Ubuntu16.04或Ubuntu18.04);

(2)Hadoop版本:3.1.3;

(3)MySQL版本:8.0;

(4)HBase版本:2.5.5;

(5)Redis版本:7.2.3;

(6)MongoDB版本:5.0.11;

(7)JDK版本:1.8;

(8)Java IDE:IDEA;

实验内容与完成情况:

(1)在MySQL中创建Student表,并录入数据;

 

 

(2)用SQL语句输出Student表中的所有记录;

 

(3)查询zhangsan的Computer成绩;

 

(4)修改lisi的Math成绩,改为95。

 

 

3.根据上面已经设计出的Student表,使用MySQL的JAVA客户端编程实现以下操作:

(1)向Student表中添加如下所示的一条记录:

scofield

45

89

100

 

 

(2)获取scofield的English成绩信息

 

根据上面给出的学生表Student的信息,执行如下操作:

 

(1)用Hbase Shell命令创建学生表Student;

 

(2)用scan命令浏览Student表的相关信息;

 

(3)查询zhangsan的Computer成绩;

 

(4)修改lisi的Math成绩,改为95。

 

 

 

 

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

scofield

45

89

100

 

获取scofield的English成绩信息。

 

根据上面给出的键值对,完成如下操作:

(1)用Redis的哈希结构设计出学生表Student(键值可以用student.zhangsan和student.lisi来表示两个键值属于同一个表);   

 

(2)用hgetall命令分别输出zhangsan和lisi的成绩信息;

 

(3)用hget命令查询zhangsan的Computer成绩;

 

(4)修改lisi的Math成绩,改为95。

 

2.根据上面已经设计出的学生表Student,用Redis的JAVA客户端编程(jedis),实现如下操作:

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

该数据对应的键值对形式如下:

scofield:{

English: 45

Math: 89

Computer: 100

 

(3)获取scofield的English成绩信息

 

 

(四)MongoDB数据库操作

1.根据上面给出的文档,完成如下操作:

(1)用MongoDB Shell设计出student集合;

 

(2)用find()方法输出两个学生的信息;

 

(3)用find()方法查询zhangsan的所有成绩(只显示score列);

(4)修改lisi的Math成绩,改为95。

2.根据上面已经设计出的Student集合,用MongoDB的Java客户端编程,实现如下操作:

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

与上述数据对应的文档形式如下:

{

“name”: “scofield”,

“score”: {

“English”: 45,

“Math”: 89,

“Computer”: 100

}

}

   

(2)获取scofield的所有成绩成绩信息(只显示score列)

 

 

 

出现的问题:出现了重复创建表的问题

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):把之前的表删掉之后解决问题

 

 

实验5

MapReduce初级编程实践

 

1.实验目的

(1)通过实验掌握基本的MapReduce编程方法;

(2)掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。

2.实验平台

(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04)

(2)Hadoop版本:3.1.3

3.实验步骤

(一)编程实现文件合并和去重操作

对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文件的一个样例供参考。

输入文件A的样例如下:

 

20170101     x

20170102     y

20170103     x

20170104     y

20170105     z

20170106     x

 

输入文件B的样例如下:

20170101      y

20170102      y

20170103      x

20170104      z

20170105      y

 

根据输入文件A和B合并得到的输出文件C的样例如下:

20170101      x

20170101      y

20170102      y

20170103      x

20170104      y

20170104      z

20170105      y

20170105      z

20170106      x

 

(二)编写程序实现对输入文件的排序

现在有多个输入文件,每个文件中的每行内容均为一个整数。要求读取所有文件中的整数,进行升序排序后,输出到一个新的文件中,输出的数据格式为每行两个整数,第一个数字为第二个整数的排序位次,第二个整数为原待排列的整数。下面是输入文件和输出文件的一个样例供参考。

输入文件1的样例如下:

33

37

12

40

 

输入文件2的样例如下:

4

16

39

5

 

输入文件3的样例如下:

1

45

25

 

根据输入文件1、2和3得到的输出文件如下:

1 1

2 4

3 5

4 12

5 16

6 25

7 33

8 37

9 39

10 40

11 45

 

 

(三)对给定的表格进行信息挖掘

下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。

输入文件内容如下:

child          parent

Steven        Lucy

Steven        Jack

Jone         Lucy

Jone         Jack

Lucy         Mary

Lucy         Frank

Jack         Alice

Jack         Jesse

David       Alice

David       Jesse

Philip       David

Philip       Alma

Mark       David

Mark       Alma

 

输出文件内容如下:

grandchild       grandparent

Steven          Alice

Steven          Jesse

Jone            Alice

Jone            Jesse

Steven          Mary

Steven          Frank

Jone            Mary

Jone            Frank

Philip           Alice

Philip           Jesse

Mark           Alice

Mark           Jesse

 

4.实验报告

题目:

MapReduce初级编程实践

 

姓名

粘艺凡

日期

2023.12.10

实验环境:(1)操作系统:centos

(2)Hadoop版本:3.3.4

 

实验内容与完成情况:

(一)编程实现文件合并和去重操作

 

 

(二)编写程序实现对输入文件的排序

 

 

(三)对给定的表格进行信息挖掘

 

 

 

出现的问题:弄了很久发现拒绝连接

 

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

最后把localhost换成了ip192.168.88.101解决了

另外在配置文件中也进行了修改

 

 

实验6

熟悉Hive的基本操作

 

1.实验目的

(1)理解Hive作为数据仓库在Hadoop体系结构中的角色。

(2)熟练使用常用的HiveQL。

2.实验平台

操作系统:Ubuntu18.04(或Ubuntu16.04)。

Hadoop版本:3.1.3。

Hive版本:3.1.2。

JDK版本:1.8。

3.数据集

由《Hive编程指南》(O'Reilly系列,人民邮电出版社)提供,下载地址:

https://raw.githubusercontent.com/oreillymedia/programming_hive/master/prog-hive-1st-ed-data.zip

备用下载地址:

https://www.cocobolo.top/FileServer/prog-hive-1st-ed-data.zip

解压后可以得到本实验所需的stocks.csv和dividends.csv两个文件。

4.实验步骤

(1)创建一个内部表stocks,字段分隔符为英文逗号,表结构如表14-11所示。

表14-11 stocks表结构

col_name

data_type

exchange            

string              

symbol              

string              

ymd                 

string              

price_open          

float               

price_high          

float               

price_low           

float               

price_close         

float               

volume              

int                 

price_adj_close     

float  

 

(2)创建一个外部分区表dividends(分区字段为exchange和symbol),字段分隔符为英文逗号,表结构如表14-12所示。

表14-12 dividends表结构

col_name

data_type

ymd                 

string              

dividend            

float               

exchange            

string              

symbol              

string              

 

(3)从stocks.csv文件向stocks表中导入数据。

 

(4) 创建一个未分区的外部表dividends_unpartitioned,并从dividends.csv向其中导入数据,表结构如表14-13所示。

表14-13 dividends_unpartitioned表结构

col_name

data_type

ymd                 

string              

dividend            

float               

exchange            

string              

symbol              

string              

 

(5)通过对dividends_unpartitioned的查询语句,利用Hive自动分区特性向分区表dividends各个分区中插入对应数据。

 

(6)查询IBM公司(symbol=IBM)从2000年起所有支付股息的交易日(dividends表中有对应记录)的收盘价(price_close)。

 

(7)查询苹果公司(symbol=AAPL)2008年10月每个交易日的涨跌情况,涨显示rise,跌显示fall,不变显示unchange。

 

(8)查询stocks表中收盘价(price_close)比开盘价(price_open)高得最多的那条记录的交易所(exchange)、股票代码(symbol)、日期(ymd)、收盘价、开盘价及二者差价。

 

(9)从stocks表中查询苹果公司(symbol=AAPL)年平均调整后收盘价(price_adj_close) 大于50美元的年份及年平均调整后收盘价。

 

(10)查询每年年平均调整后收盘价(price_adj_close)前三名的公司的股票代码及年平均调整后收盘价。

 

5.实验报告

题目:

熟悉Hive的基本操作

姓名

粘艺凡

日期:

2023.12.15

实验环境:操作系统:centos7。

Hadoop版本:3.3.4。

Hive版本:3.1.3。

JDK版本:1.8。

实验内容与完成情况:

创建内部表stocks

 

 

创建一个外部分区表dividends

 

 

从stocks.csv文件向stocks表中导入数据

 

(3)创建一个未分区的外部表dividends_unpartitioned,并从dividends.csv向其中导入数据,

 

(5)通过对dividends_unpartitioned的查询语句,利用Hive自动分区特性向分区表dividends各个分区中插入对应数据。

 

(6)查询IBM公司(symbol=IBM)从2000年起所有支付股息的交易日(dividends表中有对应记录)的收盘价(price_close)。

 

(7)查询苹果公司(symbol=AAPL)2008年10月每个交易日的涨跌情况,涨显示rise,跌显示fall,不变显示unchange。

 

(8)查询stocks表中收盘价(price_close)比开盘价(price_open)高得最多的那条记录的交易所(exchange)、股票代码(symbol)、日期(ymd)、收盘价、开盘价及二者差价。

 

(9)从stocks表中查询苹果公司(symbol=AAPL)年平均调整后收盘价(price_adj_close) 大于50美元的年份及年平均调整后收盘价。

 

查询每年年平均调整后收盘价(price_adj_close)前三名的公司的股票代码及年平均调整后收盘价。

 

 

 

出现的问题:本次实验比较简单,跟着步骤来基本上没有出现错误。

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

 

 

实验7

Spark初级编程实践

 

1.实验目的

(1)掌握使用Spark访问本地文件和HDFS文件的方法

(2)掌握Spark应用程序的编写、编译和运行方法

2.实验平台

(1)操作系统:Ubuntu18.04(或Ubuntu16.04);

(2)Spark版本:2.4.0;

(3)Hadoop版本:3.1.3。

3.实验步骤

(1)Spark读取文件系统的数据

(1)在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;

(2)在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;

(3)编写独立应用程序(推荐使用Scala语言),读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

(2)编写独立应用程序实现数据去重

对于两个输入文件A和B,编写Spark独立应用程序(推荐使用Scala语言),对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。下面是输入文件和输出文件的一个样例,供参考。

输入文件A的样例如下:

20170101    x

20170102    y

20170103    x

20170104    y

20170105    z

20170106    z

输入文件B的样例如下:

20170101    y

20170102    y

20170103    x

20170104    z

20170105    y

根据输入的文件A和B合并得到的输出文件C的样例如下:

20170101    x

20170101    y

20170102    y

20170103    x

20170104    y

20170104    z

20170105    y

20170105    z

20170106    z

(3)编写独立应用程序实现求平均值问题

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。下面是输入文件和输出文件的一个样例,供参考。

Algorithm成绩:

小明 92

小红 87

小新 82

小丽 90

Database成绩:

小明 95

小红 81

小新 89

小丽 85

Python成绩:

小明 82

小红 83

小新 94

小丽 91

平均成绩如下:

(小红,83.67)

(小新,88.33)

(小明,89.67)

(小丽,88.67)

 

 

4.实验报告

题目:

Spark初级编程实践

 

姓名

粘艺凡

日期

2023.12.18

实验环境:(1)操作系统:centos7;

(2)Spark版本:3.4.0;

(3)Hadoop版本:3.3.4。

 

实验内容与完成情况:

(1)在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;

配置sbt

 

 

 

(2)在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;

 

 

(3)编写独立应用程序(推荐使用Scala语言),读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

 

 

 

2编写独立应用程序实现数据去重

 

 

 

查看最终的结果

 

编写独立应用程序实现求平均值问题

 

编写Scala文件信息

 

sbt文件

 

打包

 

 

出现的问题: /usr/local/sbt/sbt package出现错误

 

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

原因是按照网上的代码进行复制,没有查看需要修改的东西,最后发现是填写的版本信息出现错误,修改后重新启动打包正常。

 

 

实验8

Flink初级编程实践

 

1.实验目的

(1)通过实验掌握基本的Flink编程方法。

(2)掌握用IntelliJ IDEA工具编写Flink程序的方法。

2.实验平台

(1)Ubuntu18.04(或Ubuntu16.04)。

(2)IntelliJ IDEA。

(3)Flink1.9.1。

3.实验步骤

(1)使用IntelliJ IDEA工具开发WordCount程序

在Linux系统中安装IntelliJ IDEA,然后使用IntelliJ IDEA工具开发WordCount程序,并打包成JAR文件,提交到Flink中运行。

(2)数据流词频统计

使用Linux系统自带的NC程序模拟生成数据流,不断产生单词并发送出去。编写Flink程序对NC程序发来的单词进行实时处理,计算词频,并把词频统计结果输出。要求首先在IntelliJ IDEA中开发和调试程序,然后,再打成JAR包部署到Flink中运行。

 

4.实验报告

题目:

Flink初级编程实践

 

姓名

粘艺凡

日期

2023.12.20

实验环境:(1)centos7。

(2)IntelliJ IDEA。

(3)Flink1.16.2。

 

实验内容与完成情况:

三个Java文件

WordCountData.java用于提供原始数据

 

package WordCount;

import org.apache.flink.api.java.DataSet;

import org.apache.flink.api.java.ExecutionEnvironment;

public class WordCountData {

    public static final String[] WORDS=new String[]{"To be, or not to be,--that is the question:--", "Whether \'tis nobler in the mind to suffer", "The slings and arrows of outrageous fortune", "Or to take arms against a sea of troubles,", "And by opposing end them?--To die,--to sleep,--", "No more; and by a sleep to say we end", "The heartache, and the thousand natural shocks", "That flesh is heir to,--\'tis a consummation", "Devoutly to be wish\'d. To die,--to sleep;--", "To sleep! perchance to dream:--ay, there\'s the rub;", "For in that sleep of death what dreams may come,", "When we have shuffled off this mortal coil,", "Must give us pause: there\'s the respect", "That makes calamity of so long life;", "For who would bear the whips and scorns of time,", "The oppressor\'s wrong, the proud man\'s contumely,", "The pangs of despis\'d love, the law\'s delay,", "The insolence of office, and the spurns", "That patient merit of the unworthy takes,", "When he himself might his quietus make", "With a bare bodkin? who would these fardels bear,", "To grunt and sweat under a weary life,", "But that the dread of something after death,--", "The undiscover\'d country, from whose bourn", "No traveller returns,--puzzles the will,", "And makes us rather bear those ills we have", "Than fly to others that we know not of?", "Thus conscience does make cowards of us all;", "And thus the native hue of resolution", "Is sicklied o\'er with the pale cast of thought;", "And enterprises of great pith and moment,", "With this regard, their currents turn awry,", "And lose the name of action.--Soft you now!", "The fair Ophelia!--Nymph, in thy orisons", "Be all my sins remember\'d."};

    public WordCountData() {

    }

    public static DataSet<String> getDefaultTextLineDataset(ExecutionEnvironment env){

        return env.fromElements(WORDS);

    }

}

WordCountTokenizer.java用于切分句子

 

package WordCount;

import org.apache.flink.api.common.functions.FlatMapFunction;

import org.apache.flink.api.java.tuple.Tuple2;

import org.apache.flink.util.Collector;

public class WordCountTokenizer implements FlatMapFunction<String, Tuple2<String,Integer>>{

    public WordCountTokenizer(){}

    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {

        String[] tokens = value.toLowerCase().split("\\W+");

        int len = tokens.length;

        for(int i = 0; i<len;i++){

            String tmp = tokens[i];

            if(tmp.length()>0){

                out.collect(new Tuple2<String, Integer>(tmp,Integer.valueOf(1)));

            }

        }

    }

}

 

WordCount.java提供主函数

 

jar包传入到flink

 

使用火狐浏览器打开localhost:8081

 

 

 

数据流词频统计

 

然后打包成jar文件运行

 

结果

 

 

出现的问题:flink依赖包与flink版本不一致出现错误

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):下载对应的版本依赖包

 

标签:文件,String,HDFS,实验,数据,目录,Math
From: https://www.cnblogs.com/mine-my/p/17926605.html

相关文章

  • 客户案例 | 思腾合力助力某能源公司地质数据智能化计算平台建设
    石油行业是全球最大的行业之一,涉及到从地下或海底开采原油和天然气的勘探、开发、生产、运输、精炼和销售的全过程。石油不仅是世界上最主要的能源之一,还是化工产品的主要原料。石油行业的运作对全球经济有着重大影响,其价格波动可以影响到各国的经济状况和政策决策。客户需求与解决......
  • 如何通过云函数操作云数据库?
    本文分享自天翼云开发者社区《如何通过云函数操作云数据库?》,作者:不知不觉随着云计算的普及,云数据库作为一种高效、灵活和可靠的数据存储和管理服务,为企业提供了强大的支持。而云函数作为云计算的重要组成部分,为开发者提供了在云端执行代码的能力。本文将探讨如何通过云函数操作云......
  • 聊聊流式数据湖Paimon(三)
    概述如果表没有定义主键,则默认情况下它是仅追加表类型(AppendOnlyTable)。根据桶(Bucket)的定义,我们有两种不同的仅追加模式:"AppendForScalableTable"和"AppendForQueue";两种模式支持不同的场景,提供不同的功能。只能向表中插入一条完整的记录。不支持删除或更新,并且不......
  • Python 爬虫在数据分析方面有什么潜力
    在当今信息爆炸的时代,大量的数据被生成和存储,这给企业、学术界和个人提供了巨大的机会和挑战。爬虫作为一种数据获取的技术手段,可以帮助我们从互联网上获取大量的数据。结合数据分析技术,爬虫在数据分析方面具有巨大的潜力。本文将介绍一些爬虫在数据分析方面的潜力和应用场景。1.获......
  • 2023年12月深圳CPDA数据分析师认证来这学习
    CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三,为大部分决策难题提供解决方案。帮助数据分析人员掌握几种通用的数据......
  • 神通数据库的varchar和nvarchar的验证
    神通数据库的varchar和nvarchar的验证登录神通数据库isql注意神通数据库的默认密码是szoscar55Welcometoisql2.0.56interactiveterminal,ClientDefaultEncodingisUTF8.Logintime:2023-12-2516:00:36Passwordfordefaultuser:Connectto:神通数据库7.0......
  • 聊聊流式数据湖Paimon(二)
    当前的问题ApachePaimon最典型的场景是解决了CDC(ChangeDataCapture)数据的入湖;CDC数据来自数据库。一般来说,分析需求是不会直接查询数据库的。容易对业务造成影响,一般分析需求会查询全表,这可能导致数据库负载过高,影响业务分析性能不太好,业务数据库一般不是列存,查询部......
  • MyBatis batchInsert 批量插入数据
    mybatis是一个Java的持久层框架,它支持定制化SQL、存储过程以及高级映射。通过MyBatis,开发者可以直接编写原生态SQL,避免了JDBC代码的繁琐。如何在MyBatis中进行批量插入操作。下面是一个简单的例子,说明如何在MyBatis中配置和使用批量插入:Mapper接口:publicinter......
  • 数据库论述题复习
    1.数据库的三级模式和两级映像架构对数据库系统有何重要意义三级模式视图层/外模式把现实世界信息按不同用户观点抽象为多个逻辑数据结构,每个逻辑结构称为视图每个视图称为数据库的一个子模式逻辑模式综合所有视图,把所有用户关心的现实世界抽象为逻辑模式描述数据......
  • wpf + MaterialDesign + Prism8 + DataGrid 实现表格数据+分页
    十年河东,十年河西,莫欺少年穷学完止境,精益求精1、不分页,带有排序功能(每个字段都可以排序) xaml如下:<UserControlx:Class="WpfApp.UserControls.UserView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:......