1. 基本配置
一切操作都是基于 root 用户下。
一、需要下载的工具
二、需要更改的配置
连接网络
- 如果是最小化安装,一开始没有 IP。
ip addr(查看网卡名称,如 ens33)
进入 /etc/sysconfig/network-scripts/
vi ifcfg-ens33(编辑你的网卡信息)
将 ONBOOT=no 改为 ONBOOT=yes(启用网卡开机自启)
ifup ens33(因为之前网卡没自启,启用网卡)
systemctl restart network(重启网络,也可 service network restart)
尝试 ping 外网:ping www.baidu.com 看是否成功。
虚拟机内 ping 不通的排查
ping 127.0.0.1 不通 → 网卡问题- 检查网卡设置是否正确
- 桥接网络静态 IP 可能有问题;NAT 模式检查主机的 VMware NAT Service / VMware DHCP Server 服务是否开启
- 如果是复制的虚拟机,记得修改 MAC 地址:
ip addr 查看,先在虚拟机设置中刷新 MAC,再修改 HWADDR=。 UUID 是否要改?可用 uuidgen ens33 生成新的 UUID。
关闭防火墙
1
2
3
4
| systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 禁用防火墙开机自启
# 关闭 SELinux
vi /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=disabled
|
免密登录
1
2
3
| ssh localhost # 生成 .ssh 目录(记得退出)
ssh-keygen -t rsa # 生成 RSA 公私钥
ssh-copy-id hostname@ip # 将公钥发送给要免密登录的主机(包括自己 localhost)
|
配置 JAVA 环境变量
- (全部用户)在
/etc/profile.d/ 中创建一个 .sh 文件(例如 java_env.sh)。/etc/profile 会自动遍历该目录下所有 .sh 文件。 - (单个用户,推荐)在
~/.bashrc 中添加环境变量。
1
2
3
| # JAVA_HOME
export JAVA_HOME=/opt/software/jdk1.8.0 # 你的 JDK 路径
export PATH=$PATH:$JAVA_HOME/bin
|
之后执行 source java_env.sh 或 source ~/.bashrc,再运行 java -version 测试是否成功。
配置 hadoop 环境变量
1
2
3
4
| # HADOOP_HOME
export HADOOP_HOME=/opt/software/hadoop # 你的 Hadoop 路径
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
|
同样添加到 hadoop_env.sh 或 ~/.bashrc,source 后运行 hadoop 查看是否有显示。
三、可选的配置更改
静态 IP
1
| vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 最后为你的网卡名
|
修改内容:
1
2
3
4
5
| BOOTPROTO=static # 改为 static
IPADDR=192.168.37.101 # 你要的 IP
NETMASK=255.255.255.0 # 子网掩码,也可用 PREFIX=24
GATEWAY=192.168.37.2 # 网关(VMware 虚拟网络编辑器 → VMnet8 查看)
DNS1=192.168.37.2 # 与网关相同
|
yum 换源
1
2
3
4
5
6
7
8
9
10
| # 备份默认源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载阿里云源(CentOS 7 示例)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除缓存并生成新缓存
yum clean all
yum makecache
yum update
|
2. Hadoop 运行
1. 本地模式
2. 伪分布模式
- 也是单机运行,但具备 Hadoop 集群的所有功能,一台机器模拟分布式环境。一般用于测试,实际项目中不用。
需要
- SSH 免密登录
- 修改配置文件
core-site.xml、hdfs-site.xml - NameNode 格式化
- 明确启动用户,修改
hadoop-env.sh - 若包含 YARN,还需修改
yarn-site.xml、mapred-site.xml 和 yarn-env.sh
注意
- 若运行实例出现
code 143,可能为内存不足。 - 一旦重新启动 YARN,之前运行过的程序运行情况将无法查看(输出结果还在)。配置历史服务器可保留,需修改
mapred-site.xml。
配置文件
core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
|
hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
| <configuration>
<!-- NameNode web 端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<!-- 文件数据副本数 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
|
NameNode 格式化
1
2
3
| hdfs namenode -format
# 若不是第一次格式化,要先将 /.../hadoop/ 下的 data 和 logs 删除,再格式化
# 别忘了先 stop-all.sh
|
明确启动用户(HDFS)
在 hadoop-env.sh 末尾添加:
1
2
3
| export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
|
yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <configuration>
<!-- 指定 mapreduce 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</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>
</configuration>
|
mapred-site.xml(包含历史服务器配置)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
|
启动历史服务器
1
| mapred --daemon start historyserver
|
明确启动用户(YARN)
在 yarn-env.sh 末尾添加:
1
2
| export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
|
3. 完全分布模式
| 节点 | HDFS 角色 | YARN 角色 |
|---|
| master | NameNode, DataNode | NodeManager |
| slave1 | DataNode | ResourceManager, NodeManager |
| slave2 | SecondaryNameNode, DataNode | NodeManager |
需要
配置文件
修改主机名
1
2
| vi /etc/hostname
# 分别改为 master, slave1, slave2(方便区分即可)
|
配置 IP 映射
1
2
3
4
5
6
7
| vi /etc/hosts
# 需要在每台主机的 hosts 中添加
# 添加以下内容(IP 换成你的实际地址)
192.168.37.101 master
192.168.37.102 slave1
192.168.37.103 slave2
# 重启使配置生效(reboot)
|
修改配置文件
若已配置伪分布,请删除 /.../hadoop 下的 data、input、logs、output 或重新解压 Hadoop。
core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/.../hadoop/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
|
hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <configuration>
<!-- NameNode web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<!-- SecondaryNameNode web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:9868</value>
</property>
<!-- 文件数据副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
|
yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| <configuration>
<!-- 指定 mapreduce 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</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.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
<!-- 与伪分布式相比添加了一个日志聚焦,程序运行完成时,都会产生日志,日志聚焦就是 把日志信息上传到 HDFS 文件系统上,方便查看程序运行详情,方便排错和开发调试。 -->
|
mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
|
workers 文件
1
2
3
4
5
6
| vi /.../hadoop/etc/hadoop/workers
# 注意:文件中每行末尾不能有空格,不允许有空行。
# localhost 可保留可以删除(建议删除)。添加下列主机名
master
slave1
slave2
|
指定进程用户
在 hadoop-env.sh 末尾添加:
1
2
3
| export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
|
在 yarn-env.sh 末尾添加:
1
2
| export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
|
互相免密登录
参考伪分布式部分,确保 master、slave1、slave2 之间均能免密 SSH 登录。
远程同步配置(使用 scp)
1
2
3
4
5
6
7
| # 附:目前是在 root 环境下进行安装
# scp -r(传输文件夹) 文件夹路径 用户@其他主机的ip:要传到的路径
# 将已经修改好的配置文件传给其他主机,减少工作量
scp -r /.../hadoop/etc/hadoop root@slave1:/.../hadoop/etc
# 传输环境配置
scp -r /etc/profile.d root@slave1:/etc/
|
启动集群
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # # 若 /.../hadoop 下有 date 和 logs 先删除(说明之前格式化过)
# 格式化 NameNode(只在 master 执行一次)
hdfs namenode -format
# 启动 HDFS(在 master 执行),具体根据配置文件来
start-dfs.sh
# 在配置了 ResourceManager 的节点(slave1)上启动 Yarn
# 具体根据配置文件来
# 若碰到提示 known hosts 请检查 ssh 免密登录
start-yarn.sh
# 启动历史服务器(在 master 执行),具体根据配置文件来
mapred --daemon start historyserver
|
启动后进程检查(jps)
- master:
NodeManager、DataNode、NameNode、JobHistoryServer - slave1:
ResourceManager、NodeManager、DataNode - slave2:
SecondaryNameNode、NodeManager、DataNode
Web 端访问地址
- HDFS:
http://master:9870 - YARN:
http://slave1:8088 - 历史服务器:
http://master:19888
时间同步(NTP)
1
2
3
4
| # 所有节点安装 ntp
yum -y install ntp
# 设置时间为亚洲上海
timedatectl set-timezone Asia/Shanghai
|
主节点(master)配置 /etc/ntp.conf 添加:
1
2
3
4
5
6
7
8
9
10
11
12
| # 添加以下内容
# 允许 192.168.37.x 这一网段,即与主机同一网段的机器同步该主机的时间
restrict 192.168.37.0 mask 255.255.255.0 nomodify notrap
# 该主机使用的时间服务器为阿里提供的公网 NTP 服务器(可不用)
server ntp1.aliyun.com iburst
#如果集群是在一个封闭的局域网内,可以屏蔽掉默认的server:
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
|
启动主节点 NTP 服务:
1
2
3
4
| systemctl start ntpd
systemctl enable ntpd
# 查看 ntp 的状态
systemctl status ntpd
|
其他节点同步:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| 方案一:
# 其他从节点停止并禁用 ntp 服务
systemctl stop ntpd
systemctl disable ntpd
# 同步主节点时间
ntpdate master
方案二:
# 将本地的硬件时间也作为同步的时间源之一
master(主节点)配置:server 127.127.1.0
master(主节点)配置:fudge 127.127.1.0 stratum 10
# 删除或注释以下配置项
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#添加
server master
ntpdate master #同步时间
service ntpd start #启动 ntpd 时间服务器
|
查看与时间同步服务器的时间偏差
1
2
3
4
5
6
7
8
9
| ntpdc -c loopinfo
#
# offset: 0.001014 s #时间偏差极小,即同步了
# frequency: 29.720 ppm
# poll adjust: 30
# watchdog timer: 929 s
# 或
ntpdate master # 同步时间时会显示时间偏差
|
设置定时任务可设置定时任务:
1
2
3
| crontab -e
# 每天 00:00 同步一次(master 不行的话直接写 IP)
00 00 * * * /usr/sbin/ntpdate master
|
1
2
3
4
5
6
7
8
| * * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
|
4. Hadoop 常见问题汇总
原文档此处未展开,保留标题。
3. Hive 及数据可视化
一、需要的安装包
Docker 容器(简化软件安装部署)
Docker 可以帮助开发人员快速构建轻量级和可移植的软件容器,简化应用程序开发、测试和部署等环节。它提供轻量级执行环境,共享操作系统内核但彼此独立运行。
二、不使用 Docker 容器
原文档至此结束。