您现在的位置是:首页 >技术杂谈 >Hadoop-3.2.3集群搭建网站首页技术杂谈
Hadoop-3.2.3集群搭建
Hadoop-3.2.3集群搭建
一、准备工作
准备三台最小化安装的Linux服务器:(单节点伪集群一台虚拟机即可,hdfs配置副本数设置为1,worker只有一个。)
ipaddress | hostname |
---|---|
192.168.116.10 | hadoop1 |
192.168.116.20 | hadoop2 |
192.168.116.30 | hadoop3 |
所有节点推荐最小化安装Centos7.9或Ubuntu2004LTS。(单主机内存需>=4G)
1、配置网络连通性,每台机器配置固定IP地址和DNS等网络信息
2、主机名hostname设置和主机名解析
3、配置时区和时间服务器,确保集群时间同步
4、系统优化,关闭不需要的服务并进行文件系统基本优化
5、添加hadoop用户(使用root用户可跳过,ubuntu下注意adduser和useradd区别,使用adduser)
# adduser hadoop
# su - hadoop
6、配置用户免密钥登录
7、下载Oracle Java8包,解压并配置环境变量
链接:https://pan.baidu.com/s/182pYEdrnETntMDbPsg4rLw?pwd=02aw
提取码:02aw
设置Java8环境变量(可将如下内容添加到~/.bashrc里)
export JAVA_HOME=~/jdk1.8.0_321
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
验证java
$ java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
二、Hadoop配置
1、下载hadoop
链接:https://pan.baidu.com/s/1gIyKxOjfVsxEpxgTIpa8aA?pwd=er4m
提取码:er4m
2、解压
$ tar -zxvf hadoop-3.2.3.tar.gz
3、查看文件属主是否是当前用户
$ ls -l
如果和当前用户属主不一致修改为当前用户
4、设置Hadoop环境变量(可将如下内容添加到~/.bashrc里),确保路径和用户和实际一致。
export HADOOP_HOME=~/hadoop-3.2.3
export HADOOP_MAPRED_HOME=~/hadoop-3.2.3
export HADOOP_YARN_HOME=~/hadoop-3.2.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
使环境变量生效后验证
$ source ~/.bashrc
$ hadoop version
Haoop配置文件都在~/hadoop-3.2.3/etc/hadoop/目录下
$ cd ~/hadoop-3.2.3/etc/hadoop/
几个主要配置文件包括hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers
1、hadoop-env.sh中需要配置一些基础环境变量路径,查看环境变量后填入正确的路径
$ echo $JAVA_HOME
$ echo $HADOOP_HOME
$ vi hadoop-env.sh
export HADOOP_HOME=
export JAVA_HOME=
2、core-site.xml中主要指定了文件系统默认访问地址和端口,以及hdfs文件系统默认目录
<configuration>
<!--hdfs服务地址和端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!--hadoop文件系统目录,namenode、secondarynamenode和data默认都在此目录下,默认为/tmp/hadoop-${user.name}-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-3.2.3</value>
</property>
</configuration>
3、hdfs-site.xml配置主要指定namenode、secondarynamenode节点和服务端口,以及副本数和安全检查。
<configuration>
<!--hdfs namenode的http地址,默认为0.0.0.0:9870 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:9870</value>
</property>
<!--hdfs secondarynamenode的http地址,默认为0.0.0.0:9868,如需将secondarynamenode放在其他节点,修改主机名即可 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:9868</value>
</property>
<!-- HDFS副本数,默认为3,单节点伪集群需设置为1 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 文件分块大小,默认128MB -->
<property>
<name>dfs.blocksize</name>
<value>128m</value>
</property>
<!-- 是否启用hdfs权限检查 ,默认为true开启的,设置为false关闭 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
4、mapred-site.xml配置主要指定了MR框架以及一些环境变量
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.admin.user.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/hadoop-3.2.3</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/hadoop-3.2.3</value>
</property>
</configuration>
5、yarn-site.xml
<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.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
6、worker配置是所有集群节点,使用主机名或IP地址
$ vi workers
hadoop1
hadoop2
hadoop3
单节点伪集群副本数设置为1,worker只有一个即可。
将hadoop整个目录拷贝到其他节点。
$ scp -r ~/hadoop-3.2.3 hadoop02:~/
$ scp -r ~/hadoop-3.2.3 hadoop03:~/
将配置好的.bashrc文件也拷贝过去。
首先,格式化文件系统
格式化文件系统:
$ hdfs namenode -format
启动HDFS
$ start-dfs.sh
查看服务是否运行
$ jps
正常情况hadoop1节点会看到NameNode、SecondaryNameNode和DataNode,其他两个节点只有DataNode。
hadoop日志输出到$HADOOP_LOG_DIR目录(默认为HADOOP_HOME/logs,可通过配置修改)
NameNode节点web访问地址:http://hadoop1:9870/ (客户端可添加解析直接访问)
创建HDFS文件系统当前用户目录:
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/hadoop/
$ hdfs dfs -ls /
测试:
输入文件拷贝到分布式文件系统:
创建input文件夹
$ hdfs dfs -mkdir input
查看
$ hdfs dfs -ls /user/hadoop
上传文件测试
$ hdfs dfs -put ~/hadoop-3.2.3/etc/hadoop/*.xml input
查看
$ hdfs dfs -ls /user/lzu_cg/input
查看块状态报告:
$ hdfs dfsadmin -report
启动ResourceManager和NodeManager服务进程:
$ start-yarn.sh
查看
$ jps
hadoop1节点会多出ResourceManager和NodeManager进程,其他工作节点会多出NodeManager
浏览器访问地址:http://hadoop1:8088/
启动MapReduce JobHistory Server历史服务器和timelineserver时间线服务器:
$ mapred --daemon start historyserver
$ yarn --daemon start timelineserver
web访问地址 - http://hadoop1:19888/
测试运行pi程序:
先进入到程序示例.jar包所在的目录,然后运行MR程序:
$ cd ~/hadoop-3.2.3/share/hadoop/mapreduce/
$ hadoop jar hadoop-mapreduce-examples-3.2.3.jar pi 10 20
运行成功即可。
关闭集群服务:
$ stop-yarn.sh
$ stop-dfs.sh
$ mapred --daemon stop historyserver
$ yarn --daemon stop timelineserver
如需启动集群,先启动dfs,再启动yarn
$ start-dfs.sh
$ start-yarn.sh
停止时先停止yarn再停止dfs
$ stop-yarn.sh
$ stop-dfs.sh
HDFS 常用 shell 命令
1. 显示当前目录结构
# 显示当前目录结构
hadoop fs -ls <path>
# 递归显示当前目录结构
hadoop fs -ls -R <path>
# 显示根目录下内容
hadoop fs -ls /
2. 创建目录
# 创建目录
hadoop fs -mkdir <path>
# 递归创建目录
hadoop fs -mkdir -p <path>
3. 删除操作
# 删除文件
hadoop fs -rm <path>
# 递归删除目录和文件
hadoop fs -rm -R <path>
4. 从本地加载文件到 HDFS
# 二选一执行即可
hadoop fs -put [localsrc] [dst]
hadoop fs - copyFromLocal [localsrc] [dst]
5. 从 HDFS 导出文件到本地
# 二选一执行即可
hadoop fs -get [dst] [localsrc]
hadoop fs -copyToLocal [dst] [localsrc]
6. 查看文件内容
# 二选一执行即可
hadoop fs -text <path>
hadoop fs -cat <path>
7. 显示文件的最后一千字节
hadoop fs -tail <path>
# 和Linux下一样,会持续监听文件内容变化 并显示文件的最后一千字节
hadoop fs -tail -f <path>
8. 拷贝文件
hadoop fs -cp [src] [dst]
9. 移动文件
hadoop fs -mv [src] [dst]
10. 统计当前目录下各文件大小
- 默认单位字节
- -s : 显示所有文件大小总和,
- -h : 将以更友好的方式显示文件大小(例如 64.0m 而不是 67108864)
hadoop fs -du <path>
11. 合并下载多个文件
- -nl 在每个文件的末尾添加换行符(LF)
- -skip-empty-file 跳过空文件
hadoop fs -getmerge
# 示例 将HDFS上的hbase-policy.xml和hbase-site.xml文件合并后下载到本地的/usr/test.xml
hadoop fs -getmerge -nl /test/hbase-policy.xml /test/hbase-site.xml /usr/test.xml
12. 统计文件系统的可用空间信息
hadoop fs -df -h /
13. 更改文件复制因子
hadoop fs -setrep [-R] [-w] <numReplicas> <path>
- 更改文件的复制因子。如果 path 是目录,则更改其下所有文件的复制因子
- -w : 请求命令是否等待复制完成
# 示例
hadoop fs -setrep -w 3 /user/hadoop/dir1
14. 权限控制
# 权限控制和Linux上使用方式一致
# 变更文件或目录的所属群组。 用户必须是文件的所有者或超级用户。
hadoop fs -chgrp [-R] GROUP URI [URI ...]
# 修改文件或目录的访问权限 用户必须是文件的所有者或超级用户。
hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
# 修改文件的拥有者 用户必须是超级用户。
hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
15. 文件检测
hadoop fs -test - [defsz] URI
可选选项:
- -d:如果路径是目录,返回 0。
- -e:如果路径存在,则返回 0。
- -f:如果路径是文件,则返回 0。
- -s:如果路径不为空,则返回 0。
- -r:如果路径存在且授予读权限,则返回 0。
- -w:如果路径存在且授予写入权限,则返回 0。
- -z:如果文件长度为零,则返回 0。
# 示例
hadoop fs -test -e filename