其他分享
首页 > 其他分享> > Hadoop云网盘实现-大数据作业

Hadoop云网盘实现-大数据作业

作者:互联网

这是一个大数据作业完成过程的记录,基础仅有一个Ubuntu系统,学习过程中借鉴了很多博主的相关介绍,在这里作一下总结,也记录一下自己学习过程中遇到的坑和解决方案。希望对其他做类似工作的人有所帮助。


目录

(一)前期环境准备

一、项目环境

二、安装Ubuntu18.04

三、安装Hadoop2.10.1+JDK1.8

四、安装Eclipse(2020-03)

五、创建一个工程

六、安装MySQL5.7

七、安装MySQL驱动包5.1.49

八、安装MySQL可视化界面

九、安装Tomcat8.5

(二)Hadoop云网盘项目

一、项目具体实现

二、注意事项


(一)前期环境准备

一、项目环境

  1. Ubuntu 18.04(本人在Win10下装了双系统)
  2. hadoop 2.10.1
  3. JDK1.8
  4. Eclipse(2020-03):必须要带有JavaEE Development Tools的版本
  5. MySQL5.7MySQL驱动包5.1.49
  6. Tomcat 8.5(tomcat7和jdk1.8不兼容)

二、安装Ubuntu18.04

这个我之前装了,可以百度找到很多。Linux系统在本项目的使用过程中感觉都差不多,我看的有些教程是装CentOS。

如果嫌麻烦,可以用VMware虚拟机

好处:

  1. 可以装很多个系统,并且同时启动;
  2. 可以和Windows主系统进行方便的文件传输。

缺陷:
由于不能使用全部内存,运行可能并不流畅hh

注:我的Hadoop云网盘项目使用的是伪分布式Hadoop,所以只用到了1台主机,1个系统。

三、安装Hadoop2.10.1+JDK1.8

建议大家先了解一下Hadoop,以及Hadoop的分布式文件系统HDFS。
在部署Hadoop集群时,因为双系统只能启动一个,所以我部署的是只有1台主机的伪分布式集群。
主要是跟着这个教程走的:
ubantu18.04安装hadoop-博客园
可能也有参考这个教程:
Ubuntu18.04安装hadoop-CSDN

四、安装Eclipse(2020-03)

我们的网页编写等等会用到JavaEE,Eclipse是一个好用的IDE。
没学过Java什么的?没建立过工程?
没关系,我也没有。
只要有编程基础(学过面向对象的编程语言会好一点),像我一样照猫画虎还是可以的。

主要参考了这个链接
Eclipse IDE for Java EE Developers 去哪里了?

五、创建一个工程

我整个项目的学习很大一部分是跟着这个博主的教程入门的。
基于Hadoop的数据云盘的实现(学的过程中遇到一些没读懂的地方,所以我直接转载了部分内容,后面根据步骤进行解读)

打开安装好的eclipse,file–>New–>Dynamic Application Project
注:如果没有这个项目,上一步重装,安装带Java EE 的Eclipse。
在这里插入图片描述
项目名称自己设置,一直点击下一步,最后一步时,最后一步最好勾选创建web.xml,没有勾选后面自己在WEB-INF下new一个名为web.xml的xml File
在这里插入图片描述
创建后如图
在这里插入图片描述

六、安装MySQL5.7

这是一个建立、管理关系型数据库的软件。
我们的项目需要将用户注册信息存放在数据库中。更高级的Hadoop云盘项目还会使用数据库存储管理员信息、用户文件信息等等。

主要参考这个博客:
Ubuntu18.04下安装MySQL

七、安装MySQL驱动包5.1.49

主要参考这个博客
mysql:Java通过驱动包(jar包)连接MySQL数据库—步骤总结及验证
这里介绍一下,jar包有点类似于python的库,都是根据程序需要添加的,所以别人项目有的jar包我们未必需要,不用急着添加。(当然多了也不影响)

八、安装MySQL可视化界面

熟悉数据库的大佬可以直接使用终端进行操作。跳过此步。

安装可视化界面可以让我们更方便地进行数据库操作。
我安装的是MySQL自己的可视化应用程序。
安装:

sudo apt-get install mysql-workbench

[sudo] ubuntu 的密码: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成  

启动:

mysql-workbench

Ready.
...

也可以直接找到这个图标启动
在这里插入图片描述
【查看table信息:在workbench中展开你建立的表,点第三个图标,会自动生成sql语句,点击上方闪电图标运行sql语句即可】

有同学推荐Navicat更好用,也是一个数据库可视化工具,大家可以试试。

九、安装Tomcat8.5

Tomcat是一个免费的Web服务器,可以让我们在浏览器敲网址访问我们的项目。反正我们的项目就是要用到它。

主要参考这个博客:
Ubuntu18.04 安装Tomcat 8.5

我原来装了Tomcat7,后来发现和JDK1.8不兼容,所以又装了8.5


到此为止,我们完成了所有前期安装工作,接下来,才是Hadoop云网盘项目的部署。

(二)Hadoop云网盘项目

一、项目具体实现

项目的具体实现使用了这位博主开源的代码。
基于hdfs+javaweb的简易网盘–(1)项目前言
这位博主对项目的整体架构进行了非常详细的介绍,可以先看看这位博主针对此项目的4篇博文,再自己一层层去理解代码。
在这里插入图片描述
在这里插入图片描述
事实上,在完成这个Hadoop云网盘作业的时候,我建了不止一个项目,试了3个博主开源的代码。就是因为什么都不懂,在不断地尝试过程中逐渐了解整个项目的架构和逻辑,最终能够根据自己的项目需求“拼凑”出一个完整的项目。

二、注意事项

  1. 在Eclipse打开网页之前,要先启动Hadoop和MySQL
  终端mysql启动命令:
   mysql -u root -p
  1. 注意IP地址的使用,HDFS和数据库的连接都涉及IP地址,注意在每次运行本项目时保持同一IP
  2. 如果你的数据库等放在不同的系统,在数据库连接代码中记得使用对应系统的IP。
  3. 自己建立的数据库名、表名、字段名、约束条件(如非空)应与项目代码中的调用代码相匹配。
  4. 不同项目需要的jar包不同,如果程序报错,复制报错语句去网上找,下载对应缺少的包。
  5. 在网页设计中,一些样式可能需要联网下载,所以项目运行需要联网。比如:
#这种超链接需要联网
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
#这种超链接将样式表下载在本地并放在项目的WebContent目录下
<link rel="stylesheet" href="css/style.css">

在这里插入图片描述

  1. 项目代码中
    .java文件定义的类名必须与该文件名相同
    java包名也要与实际import的包相同,区分大小写

  2. 数据库和hdfs连接问题,一个可能的原因是IP写成localhost无法识别,localhost在IP映射表中对应的是默认网关,不直接对应本机IP,可能还要经过一些分配操作。

  3. 数据库连接方式不止一种,我用过2种,第2种对我有用。
    (1)直接用java.sql.DriverManager,类似这种

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class UserDao {
	// 获得连接
	public static Connection getConnection() 
        String url = "jdbc:mysql://127.0.0.1:3306/panUser?serverTimezone=UTC"
        String name = "root";
        String password = "000";
        Connection conn = null
        	try {
    			Class.forName("com.mysql.cj.jdbc.Driver");
    			conn = DriverManager.getConnection(url, name, password);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
		return conn;
	}
//	关闭连接
	public void closeCon(Connection con) throws Exception{
        if(con!=null){
            con.close();
        }
    }

(2)利用C3p0连接池。
先去网上下载C3p0的jar包,将这两个导入项目中
c3p0-0.9.5.2-sources.jar
c3p0-0.9.5.2.jar

然后,新建一个包com.cloud.util,其下新建一个类文件C3p0UtilsConfig.java

package com.cloud.util;

import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3p0UtilsConfig {
    //这个类是自己写的工具类,在这里创建了一个连接池对象,所有的连接都存在对象里,这个对象就是连接池
    private static ComboPooledDataSource dataSource = null;
    
    static {
        //创建一个连接池,这里的创建的时候在构造函数里传入一个连接池名字,它会自动的根据名字去找配置文件
        dataSource = new ComboPooledDataSource("c3p0-config");
    }

    public static ComboPooledDataSource getDataSource()
    {
        //返回这个连接池
        return dataSource;
    }
 
    public static Connection getConnection() throws SQLException {
        //返回一条连接
        return dataSource.getConnection();
    }
    }

在src目录下添加文档c3p0-config.xml(一定是直接在src目录下,不要放在某个包里)

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <named-config name = "c3p0-config" >
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://你的数据库所在系统的IP:3306/数据库名?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf-8</property>
    <property name="user">你的数据库用户名</property>
    <property name="password">你的密码</property>

    <property name="checkoutTimeout">30000</property>
    <property name="idleConnectionTestPeriod">30</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
</named-config>
</c3p0-config>

最后调用C3p0,我的UserDao.java是这么写的,

package com.wy.pojo;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.cloud.util.C3p0UtilsConfig;

public class UserDao {	
	// 根据用户名查找用户密码
	public User findUser(User u) throws SQLException {
		User rs=null;
		try {
			QueryRunner qr = new QueryRunner(C3p0UtilsConfig.getDataSource());
			String sql="select * from user where uname=? and upassword=?";
			rs=qr.query(sql, new BeanHandler<User>(User.class),u.getUser(),u.getPassword());
		
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
			
	// 添加用户
	public int addUser(User u) throws SQLException{
		int i=0;
		try {
			QueryRunner qr = new QueryRunner(C3p0UtilsConfig.getDataSource());
			i = qr.update(
					"insert into user values(null,?,?)",
					u.getUser(),
					u.getPassword()
					);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return i;
		//返回的这个值代表注册是否成功,0代表失败
	}
}

这篇博文是作业完成2个多月后总结的,可能会有一些遗漏,仅供参考。

标签:java,项目,数据库,作业,Hadoop,import,安装,云网盘
来源: https://blog.csdn.net/Passersby__/article/details/113823010