Docker下快速搭建hdfs

hdfs的默认端口说明:

端口 说明
50070 hdfs总界面
50075 每个datanode的http访问接口
50010 每个datanode的数据访问接口
50020 datanode的ipc server端口
50090 SecondaryNamenode 页面
9000 Hadoop IPC port
8020 namenode的通讯端口

一下参考这篇文章进行:https://www.cnblogs.com/hongdada/p/9488349.html ,这里的namenode只有一台,datanode可以多台。还没涉及到数据的持久化。

使用docker-compose来部署,创建文件docker-compose.yml:

version: "2"

services:
  namenode:
    image: singularities/hadoop
    command: start-hadoop namenode
    hostname: namenode
    environment:
      HDFS_USER: hdfsuser
    ports:
      - "8020:8020"
      - "14000:14000"
      - "50070:50070"
      - "50075:50075"
      - "10020:10020"
      - "13562:13562"
      - "19888:19888"
  datanode:
    image: singularities/hadoop
    command: start-hadoop datanode namenode
    environment:
      HDFS_USER: hdfsuser
    links:
      - namenode

然后执行docker-compose up -d

如果要增加到3个datanode:docker-compose scale datanode=3

访问:http://机器ip:50070/ 这个可以看整个hdfs的概况和浏览文件内容及下载(下载实际上使用datanode具体节点的50075的端口来下,但是由于这里的部署是容器部署,所以用的host是容器的hostname,需要改下才能正常下载)。Hadoop还有个web api可以操作hdfs的大部分功能:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

hadoop命令行方式

使用hadoop命令行:进去任何一个namenode或datanode容器内部,就可以执行hadoop命令了,以下是常用的:

hadoop fs -ls / # 列出根目录的文件,如果加上-R参数,则递归列出所有文件
hadoop fs -mkdir -p /hello # 创建一个叫/hello的目录,-p是级联创建,当有多层目录时

# 上传本地文件到hdfs上
echo "hello hdfs" >>local.txt
hadoop fs -put local.txt /hello

# 查看hdfs中的文件内容
hadoop fs -cat /hello/local.txt

# 下载hdfs中的文件
hadoop fs -get /hello/local.txt

# 删除和其它命令详见博客https://www.cnblogs.com/hongdada/p/9488349.html

还有一个未实验:如何使用hadoop命令远程操作hdfs:https://community.cloudera.com/t5/Support-Questions/remote-access-to-clusters-through-hadoop-fs-ls/td-p/224425 只要提供core-site.xml和hdfs-site.xml 两个文件。

GUI客户端

目前使用IDEA的插件Big Data Tools

Settings - Tools - Big Data Tools Connection,新增一个HDFS链接:

Name: 自己取一个名字
Root Path: ../../
Connect by: 选择Explicit uri
然后填写uri为  IP地址:8020
Username可以为空

在Big Data Tools的Tab就可以看到了,但是浏览文件看起来有问题。

文档更新时间: 2020-04-16 13:12   作者:nick