Bootstrap

搭建hadoop单机环境

hadoop 笔记

  • sbin: 一些启动脚本 【服务端的 server bin】
  • logs: 存放 hadoop 相关日志
  • bin: 客户端的脚本
  • etc: hadoop 相关的配置文件

格式化文件系统

配置免密码登录

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 启动 namenode
# sbin/hadoop-daemon.sh start namenode
# 启动 datanode
# sbin/hadoop-daemon.sh start datanode

# 格式化文件系统, 硬盘啥的会被清除掉
bin/hdfs namenode -format
sbin/start-dfs.sh
jps
# jps 查看进程是否启动
# 没启动,因为默认 hadoop 是没有配置好的, 可以看 logs文件

配置 启动

参考官方文档

hadoop 支持伪分布式环境使用,也就是 单个节点就能跑,不需要跑多个机器

参考博客

etc/hadoop/core-site.xml:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

etc/hadoop/hdfs-site.xml:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

web界面使用

我是在 ubuntu 虚拟机里面使用的,这里关闭一下防火墙才能访问

sudo ufw status
sudo ufw disable

# 访问web界面: http://192.168.56.103:9870/dfshealth.html#tab-overview

hadoop 文件操作命令

文件上传

文件上传

  • copyFromLocal 将本地文件拷贝到 hdfs 里面

# -moveFromLocal 会把本地的文件给删除掉

hadoop fs -copyFromLocal bashrc_bak  /bashrc

# 追加文件内容到 文件最后

hadoop fs -appendToFile bashrc_bak  /bashrc

在这里插入图片描述

java代码操作 hdfs的接口

创建文件夹

将 localhost:9000 修改 为 0.0.0.0 , 不然 宿主机可能无法连上虚拟机的 hdfs端口

<configuration><configuration>
       <!--指定namenode的地址--><!--指定namenode的地址-->
   <property><property>
               <name>fs.defaultFS</name><name>fs.defaultFS</name>
               <value>hdfs://0.0.0.0:9000</value><value>hdfs://0.0.0.0:9000</value>
   </property></property>
   <!--用来指定使用hadoop时产生文件的存放目录--><!--用来指定使用hadoop时产生文件的存放目录-->
</configuration>
@SpringBootTest
class HadoopxApplicationTests {

    @Test
    void contextLoads() throws IOException, URISyntaxException, InterruptedException {
        System.out.println("hello world");
        Configuration conf = new Configuration();
        var fs = FileSystem.get(new URI("hdfs://ubuntu:9000"), conf, "root");
        boolean isSuccess = fs.mkdirs(new Path("/tmpdir"));
        System.out.println(isSuccess);
        Assert.assertEquals(true, isSuccess);
        if (fs != null) {
            fs.close();
        }
    }

}


;