zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

Hadoop3.x 学习笔记

2023-04-18 14:04:12 时间

环境注意事项

一开始我使用的是在Mac系统下 Docker 中建立了三个环境来搭建的,但是由于HDFS操作的时候是客户端直接联系DataNode来进行数据操作的原理,Mac下不能直接访问到Docker中的容器服务,也不能通过桥接连接,所以我后来改为在VirtualBox中安装了三个Linux虚拟机,才配置通了。

安装和配置

下载Hadoop 的 压缩包,解压后,设置环境变量,我这里假设解压到 /opt/hadoop路径:

vim /etc/profile.d/hadoop
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
​
export PATH=/opt/hadoop/sbin:/opt/hadoop/bin:$PATH
127.0.0.1       localhost
192.168.56.11   hadoop-1        debian1
192.168.56.12   hadoop-2        debian2
192.168.56.13   hadoop-3        debian3
<configuration>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///opt/hadoop/data/datanode</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///opt/hadoop/data/namenode</value>
    </property>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop-1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop-1:50090</value>
    </property>
    <!-- 不开启文件权限控制 -->
    <property>
      <name>dfs.permissions</name>
      <value>false</value>
    </property>
</configuration>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-1:9000</value>
    </property>
</configuration>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop-1:8025</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop-1:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop-1:8050</value>
    </property>
</configuration>
/opt/hadoop/sbin/start-all.sh
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.1</version>
</dependency>
static FileSystem getFileSystem() throws IOException, URISyntaxException {
    URI uri = new URI("hdfs://localhost:9000/");
    // 使用HDFS文件系统并提供服务器路径,端口号在core-site.xml中配置
    return org.apache.hadoop.fs.FileSystem.get(uri, new Configuration());
}

方法名

说明

listStatus

列出文件

copyFromLocalFile、copyToLocalFile

复制文件

moveFromLocalFile、moveToLocalFile

移动文件

mkdirs

创建目录

Touch

创建文件

rename

改名

exists

判断文件是否存在

setReplication

设置复制份数

getTrashRoot

获取NDFS回收站路径地址

setOwner

设置文件所属用户

setPermission

设置文件权限

createSymlink

创建文件链接

FileSystem 的常用方法

使用FileSystem对象操作文件,Path对象用来表示文件的路径

Java代码:

添加依赖

Java 客户端连接HDFS

DataNode 启动时,只需要启动 sbin/start-dfs.sh 就可以

启动DataNode

服务

说明

NameNode

分布式文件系统的管理端,存储着DataNode的状态和文件层级结构

SecondaryNameNode

备份NameNode,用于恢复NameNode

NodeManager

DataNode

存取数据的服务

ResourceManager

包含以下服务:

直接执行下面的脚本,启动所有服务:

启动服务

yarn-site.xml

core-site.xml

hdfs-site.xml

配置详细说明:

文件

作用

默认值

core-site.xml

全局配置

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml

hdfs-site.xml

HDFS配置

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

yarn-site.xml

资源配置

http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

mapred-site.xml

MAPRED配置

http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

kms-site.xml

密钥服务配置

配置文件 (/opt/hadoop/etc/hadoop中)

使用 ssh-keygen生成id_rsa.pub的文件,然后将三个主机的此文件中的内容合并起来放到每个节点的 ~/.ssh/authorized_keys中,确保节点之间可以免密ssh登录

/etc/hosts中设置主机名和IP映射

如果是 ubuntu 系统的话可以放到 /etc/profile.d/的某个文件下,如果是debian建议放到~/.bashrc