环境注意事项
一开始我使用的是在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
代码语言:javascript复制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
代码语言:javascript复制<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>
代码语言:javascript复制<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-1:9000</value>
</property>
</configuration>
代码语言:javascript复制<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>
代码语言:javascript复制/opt/hadoop/sbin/start-all.sh
代码语言:javascript复制<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.2.1</version>
</dependency>
代码语言:javascript复制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
中