美文网首页
HDFS 单节点环境搭建

HDFS 单节点环境搭建

作者: wayyyy | 来源:发表于2022-10-31 00:16 被阅读0次

    HDFS 作为hadoop 生态的一部分,部署HDFS即需要部署Hadoop。

    这里由于节点数量有限,所以我们选择单节点(伪分布式部署)。

    部署HDFS3.2.2
    • 安装 jdk1.8.0_201

      1. 官网下载 jdk-8u201-linux-x64.tar.gz。将其放在 /usr/local/java,然后执行tar -zxvf jdk-8u201-linux-x64.tar.gz解压。
      2. 配置环境变量,编辑 /etc/profile 文件,在后面加入:
        export JAVA_HOME=/usr/local/java/jdk1.8.0_201
        export PATH=$PATH:$JAVA_HOME/bin
        export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
        
        执行 source /etc/profile 使修改生效。
      3. 输入如下命令验证
        # java
        # java -version
        # javac 
        
    • 配置ssh 免密登录
      如果已经生成过公钥,则执行:

      # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      # chmod 0600 ~/.ssh/authorized_keys
      

      没有的话,则先执行:

      # ssh-keygen -t rsa
      

      生成公钥。

    • 安装hadoop
      https://archive.apache.org/dist/hadoop/core/hadoop-3.2.2/hadoop-3.2.2.tar.gz 下载 hadoop,放置在 /usr/local/ 下面,使用tar -zxvf hadoop-3.2.2.tar.gz 解压。
      编辑/etc/profile,加入:

      export HADOOP_HOME=/usr/local/hadoop-3.2.2
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      

      执行 source /etc/profile 使修改生效。
      输入如下命令验证:

      # hadoop version
      
    • 修改hdfs配置文件
      因未使用到 MapReduce 模块,仅配置HDFS的配置文件即可。配置文件在/usr/local/hadoop-3.2.2/etc/hadoop目录下。

      1. hadoop-env.sh
      export JAVA_HOME=/usr/local/java/jdk1.8.0_201
      
      1. core-site.xml
      <property>
        <!--DataNode将发送心跳到NameNode的端口-->
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.48.141:9000</value>
      </property>
        <!--临时文件存储目录,没有则新建-->
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/tmp</value>
      </property>
      

      这里注意改成自己的ip。

      1. hdfs-site.xml
      <!--单点,配置备份为1-->
      <property>
        <name>dfs.replication</name>
        <value>1</value>
      </property>
      <!--分块大小-->
      <property>
        <name>dfs.blocksize</name>
        <value>698351616</value>
      </property>
      <!--NameNode存储目录,没有则新建-->
      <property>
        <name>dfs.name.dir</name>
        <value>/usr/local/hadoop-3.2.2/hdfs/name</value>
      </property>
      <!--DateNode存储目录,没有则新建-->
      <property>
        <name>dfs.data.dir</name>
        <value>/usr/local/hadoop-3.2.2/hdfs/data</value>
      </property>
      
      1. /usr/local/hadoop-3.2.2/sbin/start-dfs.sh 和 /usr/local/hadoop-3.2.2/sbin/stop-dfs.sh 开头加入:
      HDFS_DATANODE_USER=root
      HADOOP_SECURE_DN_USER=hdfs
      HDFS_NAMENODE_USER=root
      HDFS_SECONDARYNAMENODE_USER=root
      
      1. (这一步可不做)在 /usr/local/hadoop-3.2.2/sbin/start-yarn.sh 和 /usr/local/hadoop-3.2.2/sbin/stop-yarn.sh 开头加入:
      YARN_RESOURCEMANAGER_USER=root                                            
      HADOOP_SECURE_DN_USER=yarn
      YARN_NODEMANAGER_USER=root
      
    • 启动
      启动前先格式化HDFS

      # /usr/local/hadoop-3.2.2/bin/hdfs namenode -format
      

      启动

      # /usr/local/hadoop-3.2.2/sbin/start-dfs.sh
      

      也可以按照如下方式启动单个进程:

      # /usr/local/hadoop-3.2.2/sbin/hadoop-daemon.sh start namenode
      # /usr/local/hadoop-3.2.2/sbin/hadoop-daemon.sh start datanode
      # /usr/local/hadoop-3.2.2/sbin/hadoop-daemon.sh start secondarynamenode
      

      停止

      # /usr/local/hadoop-3.2.2/sbin/stop-dfs.sh
      

      也可以按照如下方式停止单个进程:

      # /usr/local/hadoop-3.2.2/sbin/hadoop-daemon.sh stop namenode
      # /usr/local/hadoop-3.2.2/sbin/hadoop-daemon.sh stop datanode
      # /usr/local/hadoop-3.2.2/sbin/hadoop-daemon.sh stop secondarynamenode
      

      查看进程是否启动

      # jps
      
      image.png

      其他注意关闭防火墙,有问题可以查看日志:/usr/local/hadoop-3.2.2/logs

      启动成功后,可通过web管理页面http://IP:9870/(比如我这里是:http://192.168.48.141:9870/)查看HDFS的使用情况,也可管理文件。管理页面默认无密码,进入页面的人员都可操作。

    使用java-api 操作hdfs
    1. 首先需要配置 window 的 hadoop 环境,过程很多,可以参考:https://github.com/autopear/Intellij-Hadoop
    1. 建立工程,代码如下:
    package edu.ucr.cs.merlin;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URI;
    import java.net.URISyntaxException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IOUtils;
    import org.apache.log4j.BasicConfigurator;
    import org.junit.Before;
    import org.junit.Test;
    
    
    public class HDFSDemo {
    
        FileSystem fs = null;
    
        @Before
        public void init() throws Exception {
            fs = FileSystem.get(new URI("hdfs://192.168.48.140:9000"), new Configuration(), "root");
        }
    
        @Test
        public void testUpload() throws Exception {
            InputStream in = new FileInputStream("/root/install.log");
            OutputStream out = fs.create(new Path("/log123.log"));
            IOUtils.copyBytes(in, out, 1024, true);
        }
    
        @Test
        public void testMkdir() throws IllegalArgumentException, IOException {
            boolean flag = fs.mkdirs(new Path("/a/aa"));
            System.out.println(flag);
        }
    
        @Test
        public void testDel() throws IllegalArgumentException, IOException {
            boolean flag = fs.delete(new Path("/a"), true);
            System.out.println(flag);
        }
    
        public static void main(String[] args) throws Exception {
            BasicConfigurator.configure();
    
            FileSystem fs = FileSystem.get(new URI("hdfs://192.168.48.140:9000"), new Configuration(), "root");
    //        InputStream in = fs.open(new Path("/jdk"));
    //        OutputStream out = new FileOutputStream("/home/jdk1.7.tar.gz");
    //        IOUtils.copyBytes(in, out, 4096, true);
            FSDataOutputStream fsout = fs.create(new Path("/test2.txt"));
            fsout.write("hello world".getBytes());
        }
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>wordcount</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
            <hadoop.version>3.2.2</hadoop.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>${hadoop.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>${hadoop.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    
        <repositories>
            <repository>
                <id>apache</id>
                <url>http://maven.apache.org</url>
            </repository>
        </repositories>
    
    </project>  
    

    log4j.properties 如下:

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    log4j.appender.logfile=org.apache.log4j.FileAppender
    log4j.appender.logfile.File=target/spring.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
    
    hdfs 常用命令

    显示当前目录结构

    hadoop fs -ls  <path>
    
    # 递归显示当前目录结构
    hadoop fs -ls  -R  <path>
    

    创建目录

    hadoop fs -mkdir  <path> 
    
    # 递归创建目录
    hadoop fs -mkdir -p  <path>
    

    删除操作

    # 删除文件
    hadoop fs -rm  <path>
    
    # 递归删除目录和文件
    hadoop fs -rm -R  <path>
    

    本地加载文件到HDFS

    # 二选一执行即可
    hadoop fs -put  [localsrc] [dst] 
    hadoop fs - copyFromLocal [localsrc] [dst] 
    

    参考资料
    1、https://blog.csdn.net/y5201h/article/details/120024999
    2、https://blog.csdn.net/S1124654/article/details/125522613
    3、https://blog.csdn.net/S1124654/article/details/125522613

    相关文章

      网友评论

          本文标题:HDFS 单节点环境搭建

          本文链接:https://www.haomeiwen.com/subject/wxxktdtx.html