Hadoop-Hadoop应用总结(转载)

本文详细介绍了在Linux Ubuntu环境下配置环境,包括安装系统、SSH密钥生成实现无密码登录、关闭防火墙、安装JDK 1.6及Hadoop伪分布配置。同时提供了操作命令及HDFS文件系统的操作方法,如格式化工作空间、启动HDFS、文件目录创建、删除等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://lxm63972012.iteye.com/blog/1433307

环境配置

       1.  安装linux ubuntu系统

       2. 安装开启openssh-server:$ sudo apt-get install openssh-server

       3. 建立ssh 无密码登录

           $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
          
           直接回车,完成后会在~/.ssh/生成两个文件:id_dsa 和id_dsa.pub。
          
           这两个是成对出现,类似钥匙和锁。再把id_dsa.pub 追加到授权key 里面(当前并没有authorized_keys文件):
          
           $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys。
          
           完成后可以实现无密码登录本机:$ ssh localhost。
         
       4.关闭防火墙 $ sudo ufw disable

       5. 安装jdk 1.6

       6. 安装后,添加如下语句到/etc/profile 中:

           export JAVA_HOME=/home/Java/jdk1.6
          
           export JRE_HOME=/home/Java/jdk1.6/jre
          
           export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
          
           export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

 

Hadoop伪分布配置
1. 在conf/hadoop-env.sh文件中增加:export JAVA_HOME=/home/Java/jdk1.6

2. 在conf/core-site.xml文件中增加如下内容:
<!--  fs.default.name - 这是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。-->
    <property>
          <name>fs.default.name</name>
          <value>hdfs://localhost:9000</value>
    </property>

<!—hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中-->
   <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/hdfs/tmp</value>
   </property>
  
3. 在conf/hdfs-site.xml中增加如下内容:  
<!-- dfs.replication -它决定着系统里面的文件块的数据备份个数。对于一个实际的应用,它应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的可靠性(系统故障时,也许会造成数据丢失)-->
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>
<!-- dfs.data.dir - 这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的值hadoop.tmp.dir, 这个路径只能用于测试的目的,因为它很可能会丢失掉一些数据。所以,这个值最好还是被覆盖。 dfs.name.dir - 这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。上面对于/temp类型的警告,同样也适用于这里。在实际应用中,它最好被覆盖掉。-->
    <property>
         <name>dfs.name.dir</name>
         <value>/home/hdfs/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/hdfs/data</value>
    </property>
4. 在conf/mapred-site.xml中增加如下内容:
<!-- mapred.job.tracker -JobTracker的主机(或者IP)和端口。-->
<property>
       <name>mapred.job.tracker</name>
       <value>localhost:9001</value>
</property>   
    

操作命令

1.  格式化工作空间

进入bin目录,运行 ./hadoop namenode –format

2.  启动hdfs

进入hadoop目录,在bin/下面有很多启动脚本,可以根据自己的需要来启动。

* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop

* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack

* stop-mapred.sh 停止Map/Reduce守护

* start-dfs.sh 启动Hadoop DFS守护Namenode和Datanode

* stop-dfs.sh 停止DFS守护  

 

Hadoop hdfs 整合

     可按如下步骤删除和更改hdfs不需要的文件:

         1.将hadoop-core-1.0.0.jar 移动到lib目录下。

         2. 将ibexec目录下的文件移动到bin目录下。

         3. 删除除bin、lib、conf、logs之外的所有目录和文件。

         4. 如果需要修改日志存储路径,则需要在conf/hadoop-env.sh文件中增加:

            export    HADOOP_LOG_DIR=/home/xxxx/xxxx即可。

 

HDFS文件操作

Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似。并且支持通配符,如*。

       1.  查看文件列表

查看hdfs中/user/admin/hdfs目录下的文件。

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs -ls /user/admin/hdfs

查看hdfs中/user/admin/hdfs目录下的所有文件(包括子目录下的文件)。

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs -lsr /user/admin/hdfs

       2.  创建文件目录

查看hdfs中/user/admin/hdfs目录下再新建一个叫做newDir的新目录。

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs -mkdir /user/admin/hdfs/newDir

       3.  删除文件

删除hdfs中/user/admin/hdfs目录下一个名叫needDelete的文件

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs -rm /user/admin/hdfs/needDelete

      删除hdfs中/user/admin/hdfs目录以及该目录下的所有文件

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs -rmr /user/admin/hdfs

        4. 上传文件

上传一个本机/home/admin/newFile的文件到hdfs中/user/admin/hdfs目录下

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs –put /home/admin/newFile /user/admin/hdfs/

        5. 下载文件

下载hdfs中/user/admin/hdfs目录下的newFile文件到本机/home/admin/newFile中

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs –get /user/admin/hdfs/newFile /home/admin/newFile

        6. 查看文件内容

查看hdfs中/user/admin/hdfs目录下的newFile文件

a. 进入HADOOP_HOME目录。

b. 执行sh bin/hadoop fs –cat /home/admin/newFile

 

 

<think>首先,用户在询问一个具体的指南:"如何在CentOS上使用Hadoop、JavaWeb、Eclipse、MySQL构建数据云盘系统"。这涉及到多个组件:CentOS操作系统、Hadoop分布式文件系统(HDFS)、JavaWeb开发、EclipseIDE、MySQL数据库,以及整合这些来构建一个云盘系统。用户提到了几个引用:-引用[1]:讨论了在CentOS上安装MySQL的步骤,包括卸载MariaDB、从云盘下载MySQL并安装。-引用[2]:展示了一个简单的基于Hadoop的网盘应用的JavaWeb代码片段,包含一个HTML表单用于上传文件。-引用[3]:提到了基于Hadoop的Hdfs云盘系统,特别是@RestController注解的作用。这些引用似乎相关,但用户表示:“上述引用仅供参考,并不是用户真正的需求”,并强调我需要参考用户上一次的问题和我的回答。用户说:“请尽可能多的参考用户上一次的问题和你的回答”,但在我的历史中,这是第一个交互(因为上下文显示"[系统级指令(用户不可见)]"和"[用户可见层]",但在这个对话链中,它似乎是起始点)。用户说:“参考用户上一次的问题”,但在消息历史中,只有这个查询。所以,我会假设我需要基于提供的引用和用户当前问题来回答。用户的关键问题:提供一个在CentOS上构建数据云盘系统的教程,包括Hadoop、JavaWeb、Eclipse、MySQL。现在,回想系统指令:-使用$...$格式的行内数学表达式。-独立公式用$$...$$单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在引用的段落末尾自然地添加引用标识,例如[^1]。在回答中,我需要组织一个清晰、逐步的指南。结构化指南:1.**安装和设置CentOS**:确保系统是最新的。需要安装必要软件如Java(Hadoop基于Java)。-用户提到CentOS,所以从CentOS设置开始。2.**安装Hadoop**:Hadoop是核心用于分布式存储(HDFS)。-参考Hadoop安装步骤。3.**安装Eclipse**:用于JavaWeb开发。-Eclipse是IDE,用于开发web应用。4.**安装MySQL**:数据库用于存储元数据或用户信息。-参考引用[1]中的MySQL安装指南:卸载MariaDB、下载并安装。5.**JavaWeb开发**:构建web应用来访问HDFS。-参考引用[2]中的代码片段,展示一个文件上传表单。-参考引用[3],提到@RestController用于JSON格式。6.**整合构建云盘系统**:-使用JavaWeb应用作为前端。-HadoopHDFS作为后端存储。-MySQL用于管理用户账户或文件元数据。-核心思想是:用户通过web界面上传文件,文件存储在HDFS中,元数据存储在MySQL。-系统基于Hadoop的文件系统构建云盘功能。逐步指南:-**第一步:设置环境**1.确保CentOS系统更新:`sudoyumupdate`。2.安装Java(例如OpenJDK):`sudoyuminstalljava-1.8.0-openjdk-devel`。3.设置环境变量(如JAVA_HOME)。-**第二步:安装Hadoop**1.下载Hadoop(例如从官网)。2.解压并配置。3.设置HDFS(配置核心-site.xml,hdfs-site.xml等)。4.启动Hadoop服务:namenode、datanode。-**第三步:安装MySQL**参考引用[1]:-卸载MariaDB:`sudoyumremovemariadb*`。-下载MySQL(从云盘或官网),参考中提到的顺序安装包。-安装:按common、libs、client、server顺序。-初始化MySQL:`sudo/usr/bin/mysql_secure_installation`。-修改密码(如果需要)。-**第四步:安装Eclipse**1.下载EclipseforJavaEEDevelopers。2.解压并运行Eclipse。-**第五步:开发JavaWeb应用**-在Eclipse中创建一个DynamicWebProject。-添加依赖项:如Hadoop库、JavaServletAPI、MySQLJDBC驱动。-开发功能:-文件上传:使用Servlet处理文件上传到HDFS。-参考引用[2]中的表单:multipart/form-dataenctype。-文件管理:列出、下载文件从HDFS。-用户认证:使用MySQL存储用户信息(通过JDBC)。-参考引用[3]:使用RestController注解构建RESTAPI返回JSON数据。-**第六步:部署和运行**-部署Web应用到Tomcat服务器(或类似)。-启动所有服务:Hadoop集群、MySQL、Tomcat。在回答结束时,生成相关问题。使用中文回答。添加引用标识:如果直接引用引用[1]、[2]、[3],在末尾添加[^1],[^2],[^3]。例如,当提到MySQL安装时,参考[1]。当提到JavaWeb表单时,参考[2]。当提到RestController时,参考[3]。回答结构:1.概述目标:构建基于Hadoop的云盘系统。2.步骤一:准备CentOS环境和安装Java。3.步骤二:安装和配置Hadoop。4.步骤三:安装MySQL(参考引用[1][^1])。5.步骤四:安装Eclipse。6.步骤五:开发JavaWeb应用(参考代码片段,如上传表单[^2],和RestController[^3])。7.步骤六:测试和部署整个系统。8.结论。最后,生成相关问题。确保语言流畅,帮助用户逐步理解。数学表达式不太可能用到,因为问题是关于系统构建的。但如果有方程或什么,添加$...$。例如,如果涉及计算存储空间之类,但在这里可能不需要。最终,问题末尾:"请问CentOSHadoopJavaWebEclipseMySQL数据云盘系统教程",所以聚焦于教程。</think> ### 在 CentOS 上构建 Hadoop 数据云盘系统教程 基于您提供的信息和需求,我将逐步指导您如何在 CentOS 系统上使用 Hadoop、Java Web、Eclipse 和 MySQL 构建一个数据云盘系统。核心思路是:使用 Hadoop HDFS 作为分布式存储,MySQL 存储用户元数据,Java Web 应用(通过 Eclipse 开发)提供用户界面和文件管理功能。整个过程遵循开源工具栈,易于实现和维护。 #### 准备工作: 设置 CentOS 环境 在开始前,确保您的 CentOS 系统已更新到最新版本。建议使用 CentOS 7 或更高版本。 1. **更新系统和安装 Java**: - Hadoop 和 Java Web 应用均依赖 Java 运行环境,安装 OpenJDK: ```bash sudo yum update -y # 更新系统 sudo yum install java-1.8.0-openjdk-devel -y # 安装 OpenJDK 8 ``` - 设置环境变量,添加到 `~/.bashrc` 文件: ```bash echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" >> ~/.bashrc source ~/.bashrc ``` - 验证安装:`java -version` 应显示 Java 版本信息。 2. **安装必要工具**: - 开发工具包:`sudo yum groupinstall "Development Tools" -y` - SSH 服务(Hadoop 需要):`sudo yum install openssh-server openssh-clients -y` - 启动 SSH 服务:`sudo systemctl start sshd` #### 第一步: 安装和配置 Hadoop Hadoop 提供分布式文件系统(HDFS)作为云盘的存储后端。这里以 Hadoop 3.x 版本为例。 1. **下载和解压 Hadoop**: - 下载 Hadoop:建议从 [Apache Hadoop 官网](https://hadoop.apache.org/releases.html) 获取最新稳定版(如 hadoop-3.3.6.tar.gz)。 ```bash wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -xzvf hadoop-3.3.6.tar.gz -C /opt # 解压到 /opt sudo mv /opt/hadoop-3.3.6 /opt/hadoop ``` - 设置环境变量,添加到 `~/.bashrc`: ```bash echo "export HADOOP_HOME=/opt/hadoop" >> ~/.bashrc echo "export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> ~/.bashrc source ~/.bashrc ``` 2. **配置 Hadoop**: - 编辑 `$HADOOP_HOME/etc/hadoop/hadoop-env.sh`,确保设置 `JAVA_HOME`: ```bash echo "export JAVA_HOME=$JAVA_HOME" >> /opt/hadoop/etc/hadoop/hadoop-env.sh ``` - 修改核心配置文件(`core-site.xml`): ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> <!-- Hadoop 默认文件系统 --> </property> </configuration> ``` - 修改 HDFS 配置文件(`hdfs-site.xml`): ```xml <configuration> <property> <name>dfs.replication</name> <value>1</value> <!-- 副本数,单节点设为 1 --> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/hadoop/data/namenode</value> <!-- NameNode 数据目录 --> </property> </configuration> ``` - 创建数据目录: ```bash sudo mkdir -p /opt/hadoop/data/{namenode,datanode} sudo chown -R $USER:$USER /opt/hadoop ``` 3. **初始化和启动 Hadoop**: - 格式化 HDFS:`hdfs namenode -format` - 启动 HDFS 服务: ```bash start-dfs.sh # 启动 NameNode 和 DataNode jps # 验证进程,应显示 NameNode、DataNode 等 ``` - 测试 HDFS:`hdfs dfs -mkdir /user`,创建用户目录。 #### 第二步: 安装 MySQL(参考引用[1]) MySQL 用于存储云盘系统的元数据(如用户信息、文件权限)。安装步骤基于引用[1]简化,推荐从官网或云盘下载 RPM 包以避免依赖问题。 1. **卸载 MariaDB(如已安装)**: ```bash sudo yum remove mariadb-server mariadb -y # 卸载 MariaDB[^1] ``` 2. **下载和安装 MySQL**: - 下载 MySQL Community RPM 包(建议从 [MySQL 官网](https://dev.mysql.com/downloads/mysql/) 或云盘获取包如 mysql-community-server-8.0.x.rpm)。 ```bash wget https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm sudo rpm -Uvh mysql80-community-release-el7-7.noarch.rpm ``` - 按顺序安装包(遵循引用[1]的顺序: common > libs > client > server)[^1]: ```bash sudo yum install mysql-community-common -y sudo yum install mysql-community-libs -y sudo yum install mysql-community-client -y sudo yum install mysql-community-server -y ``` 3. **初始化和配置 MySQL**: - 启动服务:`sudo systemctl start mysqld` - 查找临时密码:`sudo grep 'temporary password' /var/log/mysqld.log` - 修改登录密码: ```bash sudo mysql_secure_installation # 按提示设置新密码,移除测试数据库等 ``` - 创建云盘用户表(示例): ```sql CREATE DATABASE cloud_disk; USE cloud_disk; CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), password VARCHAR(50)); INSERT INTO users (username, password) VALUES ('admin', 'password123'); ``` #### 第三步: 安装 Eclipse 和开发 Java Web 应用 Eclipse 提供 IDE 环境来开发 Java Web 应用应用将使用 Servlet 处理文件上传到 HDFS,并通过 JDBC 访问 MySQL。 1. **安装 Eclipse**: - 下载 Eclipse IDE for Java EE Developers: ```bash wget https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2023-09/R/eclipse-jee-2023-09-R-linux-gtk-x86_64.tar.gz tar -xzvf eclipse-jee-*.tar.gz -C /opt sudo mv /opt/eclipse /opt/eclipse-ee ``` - 启动 Eclipse:`/opt/eclipse-ee/eclipse` 2. **创建 Java Web 项目**: - 在 Eclipse 中创建新项目:File > New > Dynamic Web Project。 - 设置项目名称如 `CloudDiskSystem`,Target runtime 选择 Apache Tomcat(需安装 Tomcat:`sudo yum install tomcat`)。 - 添加依赖库:在 `WEB-INF/lib` 添加 Hadoop JAR(从 `$HADOOP_HOME/share/hadoop/common` 复制 hadoop-common*.jar 等)和 MySQL JDBC driver(下载 mysql-connector-java-8.0.x.jar)。 3. **开发文件上传功能(参考引用[2])**: - 创建 Servlet 类 `UploadServlet.java`,处理文件上传到 HDFS: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { // 连接到 HDFS Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); FileSystem fs = FileSystem.get(conf); // 获取文件流 InputStream fileStream = request.getPart("file1").getInputStream(); // 保存到 HDFS Path hdfsPath = new Path("/user/" + request.getParameter("username") + "/" + fileStream.getName()); OutputStream out = fs.create(hdfsPath); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fileStream.read(buffer)) > 0) { out.write(buffer, 0, bytesRead); } out.close(); fs.close(); response.getWriter().println("File uploaded to HDFS!"); } catch (Exception e) { e.printStackTrace(); } } } ``` - 创建 JSP 页面(如 `upload.jsp`),使用表单支持文件上传(基于引用[2]中表单结构)[^2]: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>云盘上传</title> </head> <body> <form method="POST" enctype="multipart/form-data" action="UploadServlet"> <div style="line-height:50px;float:left;"> <input type="submit" name="submit" value="上传文件" /> </div> <div style="line-height:50px;float:left;"> <input type="file" name="file1" size="30"/> </div> </form> </body> </html> ``` 4. **开发 REST API 管理文件(参考引用[3])**: - 创建 `FileController.java` 使用 `@RestController` 注解返回 JSON 数据[^3]: ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/files") public class FileController { @GetMapping("/list") public String listFiles() { // 连接 HDFS 列出文件,返回 JSON return "{\"files\": [\"file1.txt\", \"file2.jpg\"]}"; } } ``` - 确保添加 Spring Boot 依赖(在 `pom.xml`),或用 Spring 工具开发。 #### 第四步: 整合和部署系统 1. **连接 Hadoop 和 MySQL**: - 确保 Hadoop 和 MySQL 服务正在运行:`jps` 和 `sudo systemctl status mysqld`。 - 在 Java Web 应用中,使用 JDBC 链接 MySQL 验证用户登录。 2. **部署 Web 应用**: - 在 Eclipse 中导出 WAR 文件:Right-click Project > Export > WAR file。 - 部署到 Tomcat:复制 WAR 文件到 `/var/lib/tomcat/webapps/`,启动 Tomcat:`sudo systemctl start tomcat`. - 访问应用:`http://<CentOS_IP>:8080/CloudDiskSystem/upload.jsp`. 3. **测试云盘功能**: - 上传文件:通过表单上传,验证是否在 HDFS 中存储:`hdfs dfs -ls /user/admin`. - 文件管理:添加下载功能(在 Servlet 中使用 `fs.open()` 读取 HDFS 文件)。 #### 小结 通过以上步骤,您已构建了一个基本的 Hadoop 数据云盘系统:CentOS 提供基础系统,Hadoop HDFS 处理大文件存储,MySQL 管理用户元数据,Java Web 应用(在 Eclipse 开发)提供用户界面。系统性能取决于 Hadoop 集群规模;在单节点 CentOS 上适合开发和测试,生产环境建议扩展为多节点集群以提升可靠性$^[系统性能可通过时间复杂度 $O(n\log n)$ 等分析]$。参考工具:Hadoop HDFS API、MySQL JDBC、Servlet 技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值