HDFS 单节点环境搭建

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
    
      
      fs.defaultFS
      hdfs://192.168.48.141:9000
    
      
    
      hadoop.tmp.dir
      /tmp
    
    

    这里注意改成自己的ip。

    1. hdfs-site.xml
    
    
      dfs.replication
      1
    
    
    
      dfs.blocksize
      698351616
    
    
    
      dfs.name.dir
      /usr/local/hadoop-3.2.2/hdfs/name
    
    
    
      dfs.data.dir
      /usr/local/hadoop-3.2.2/hdfs/data
    
    
    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());
    }
}


    4.0.0

    org.example
    wordcount
    1.0-SNAPSHOT

    
        8
        8
        3.2.2
    

    
        
            org.apache.hadoop
            hadoop-client
            ${hadoop.version}
        
        
            org.apache.hadoop
            hadoop-common
            ${hadoop.version}
        
        
            junit
            junit
            4.13.2
            compile
        
    

    
        
            apache
            http://maven.apache.org
        
    

  

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  

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

创建目录

hadoop fs -mkdir   

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

删除操作

# 删除文件
hadoop fs -rm  

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

本地加载文件到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 单节点环境搭建)