1,基本配置
目前一切都是基于 root 用户下
一,需要下载的工具
-
net-tools (获取 IP 的工具)
- yum -y install net-tool (需要配置网络后)
-
openssh-server (免密登录所需)
- yum -y install openssh-server (需要配置网络后)
-
jdk (java 环境)
-
| [Java Downloads |
Oracle](https://www.oracle.com/java/technologies/downloads/) |
- Oracle 账号密码
- 下载的包大致为 jdk-8u333-linux-x64.tar.gz 具体要下的版本根据自己的需求来
- 网上下载后解压
-
hadoop (集群环境)
二,需要更改的配置
连接网络
-
连接网络 (如果是最小化安装,一开始是没有 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。ping 不通(网卡问题)
- 网卡设置是否正确
- 若为桥接网络,静态 IP 可能有问题的。若为 NAT 看主机的 VMware NET Server/VMware DHCP Server 服务是否打开
- 附:若你是复制的虚拟机,记得改 mac 即 HWADDR=, ip addr 查看,改之前先在管理虚拟机设置处刷新 mac 。
- UUID= 不清楚要不要改,uuidgen [ens33] (生成你网卡的 uuid)
关闭防火墙
-
关闭防火墙,selinux 等,并禁用开机自启
- systemctl stop firewalld (关闭防火墙)
- systemctl disable firewalld (禁用防火墙开机自启)
- 将 /etc/selinux/config 中的 SELINUX=enforcing 改为 SELINUX=disabled (关闭 selinux 防护)
免密登录
-
免密登录 (多台,已下载 openssh-server)
- ssh localhost (生成 .ssh 文件,记得退出)
- ssh-keygen -t rsa (用 rsa 加密算法生成公私钥)
- ssh-copy-id hostname@ip (将公钥发给要免密登录的主机,记得发给自己 localhost)
配置 JAVA 环境变量
- (全部用户) 在 /etc/profile.d 文件夹中创建一个 .sh 文件 (例如 /etc/profile.d/java_env.sh。/etc/profile 中有一个函数,它会遍历 /etc/profile.d 目录下以 .sh 结尾的文件)
- (单个用户,推荐) 在 /home/username/.bashrc 中添加环境变量
- 将 #JAVA_HOME
- export JAVA_HOME=/opt/software/jdk1.8.0 #(你的 jdk 路径)
- export PATH=$PATH:$JAVA_HOME/bin #(将 jdk/bin 写入到 PATH 中)
- 添加到 java_env.sh 或 .bashrc 中
- source java_env.sh 或 .bashrc (刷新配置文件)
- java -version (测试是否成功配置)
配置 hadoop 环境变量
- 同上
- 将 #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_env.sh 或 .bashrc (刷新配置文件)
- hadoop (查看是否有显示)
三,可选的配置更改
静态IP
-
静态 IP 配置 (最好配一下)
- vi /etc/sysconfig/network-scripts/ifcfg-ens33 (最后为你的网卡名)
- BOOTPROTO=dhcp -> static (将 dhcp 改为 static ,将IP设为静态)
- 添加 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 换源
2,hadoop 运行
1,本地模式
本地模式:单机运行,一般只是演示一下官方案例
不配置文件
2,伪分布模式
伪分布模式:也是单机运行,但具备 Hadoop 集群的所有功能,一台机器模拟一个分布式 环境。一般用来测试,实际项目中不用。
需要
- ssh 免密登录
- 修改配置文件 core-site.xml
- 修改配置文件 hdfs-site.xml
- namenode 格式化
- 明确启动用户,修改 /…/hadoop/etc/hadoop/hadoop-env.sh 文件
- 附:不包含 Yarn ,若包含,修改配置文件 yarn-site.xml 和 mapred-site.xml,明确启动用户,修改 /…/hadoop/etc/hadoop/yarn-env.sh
- 附:若运行实例时出现 code 143 ,导致运行失败,可能为内存不足
- 附:一旦重新启动 YARN 就无法看到之前运行过的程序的运行情况 (输出结果依然在),配置历史服务器可保留,修改配置文件 mapred-site.xml
配置文件
core-site.xml
/…/hadoop/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<!-- master 为你的主机名 -->
<value>hdfs://master:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<!-- 你的 hadoop 路径 -->
<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
/…/hadoop/etc/hadoop/hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <configuration>
<!-- NameNode web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<!-- master 主机名,9870 启动端口 -->
<value>master:9870</value>
</property>
<!-- 文件数据副本数 -->
<property>
<name>dfs.replication</name>
<!-- 1 约可以理解为集群的电脑台数 -->
<value>1</value>
</property>
</configuration>
|
NameNode 格式化
1
2
3
| hdfs namenode -format
# 若不是第一次格式化,要先删除 /.../hadoop/ 下的 data 和 logs 再格式化
# 不要忘了 stop-all.sh
|
明确启动用户 (hdfs)
/…/hadoop/etc/hadoop/hadoop-env.sh
1
2
3
| export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
|
yarn-site.xml
/…/hadoop/etc/hadoop/yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <!-- 指定 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>
|
mapred-site.xml
配置历史服务器
/…/hadoop/etc/hadoop/mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <!-- 指定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>
|
启动历史服务器
1
| mapred --daemon start historyserver
|
明确启动用户 (yarn)
/…/hadoop/etc/hadoop/yarn-env.sh
1
2
| export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
|
3,完全分布模式
| |
master |
slave1 |
slave2 |
| HDFS |
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
| YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
需要
- 修改主机名
-
配置 IP 映射
- 修改配置文件
- core-site.xml
- hdfs-site.xml
- yarn-site.xml
- mapred-site.xml
- 修改 workers 文件
- 指定进程用户
- 互相免密登录
- rsync 远程同步工具分发配置 (减少工作量)
-
启动集群
- 格式化 NameNode
- 启动 hdfs
- 启动 yarn
- 启动历史服务器 (master)
-
启动集群的效果 ( jps )
- master
- jps
- NodeManager
- DataNode
- NameNode
- slave1
- jps
- ResourceManager
- NodeManager
- DataNode
- slave2
- jps
- SecondaryNameNode
- NodeManager
- DataNode
- Web 端
- HDFS master 主机 IP:9870
- YARN slave1 主机 IP:8088
- 历史服务 master 主机 IP:19888
- 时间同步 ( ntp )
配置文件
<span id="修改主机名">修改主机名
/etc/hostname
1
2
| 修改主机名分别为 master,slave1, slave2
# 不一定是这三个,方便区分即可
|
<span id="配置 IP 映射">配置 IP 映射
/etc/hosts
1
2
3
4
5
6
| # 在每台主机的 hosts 中添加
# 添加完成后重启使配置生效,(reboot 重启)
# 前面为你的 IP , 后面为主机名。因为 IP 可能会变,所以推荐配置静态 IP
192.168.37.101 master
192.168.37.102 slave1
192.168.37.103 slave2
|
<span id="修改配置文件">修改配置文件
若已完成伪分布的配置,则将/…/hadoop 目录下新建的目录删除,data、 input、logs、output,或者将/opt/module/hadoop-3.1.3 目录删除,重新解压)
core-site.xml
/…/hadoop/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <!-- 指定 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>
|
hdfs-site.xml
/…/hadoop/etc/hadoop/hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <!-- 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>
|
yarn-site.xml
/…/hadoop/etc/hadoop/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
| <!-- 指定 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>
<!-- 与伪分布式相比添加了一个日志聚焦,程序运行完成时,都会产生日志,日志聚焦就是 把日志信息上传到 HDFS 文件系统上,方便查看程序运行详情,方便排错和开发调试。 -->
|
mapred-site.xml
/…/hadoop/etc/hadoop/mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <!-- 指定 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>
|
修改 workers 文件
/…/hadoop/etc/hadoop/workers
1
2
3
4
5
| #注意:该文件中添加的内容末尾不能有空格,不允许有空行
#localhost 可保留也可删除(建议删除)
master
slave1
slave2
|
指定进程用户(末尾添加)
/…/hadoop/etc/hadooop/hadoop-env.sh
1
2
3
| export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
|
/…/hadoop/etc/hadoop/yarn-env.sh
1
2
| export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
|
<span id="互相免密登录">互相免密登录
看伪分布式
<span id="rsync / scp 远程同步">rsync / scp 远程同步
rsync 不管,本人用的是 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/
|
<span id="启动集群">启动集群
格式化 namenode
1
2
3
| # 若 /.../hadoop 下有 date 和 logs 先删除(说明之前格式化过)
# 格式化只格式化一次
hdfs namenode -format
|
启动 hdfs
1
2
| # 在主节点(master)启动 hdfs ,具体根据配置文件来
start-dfs.sh
|
启动 yarn
1
2
3
4
| # 在配置了 ResourceManager 的节点(slave1)上启动 Yarn
# 具体根据配置文件来
# 若碰到提示 known hosts 请检查 ssh 免密登录
start-yarn.sh
|
启动历史服务器
1
2
| # 在主节点(master)启动 ,具体根据配置文件来
mapred --daemon start historyserver
|
<span id="启动集群的效果">启动集群的效果( jps )
具体以配置文件为准
1
2
3
4
5
6
| # master
NodeManager
DataNode
Jps
JobHistoryServer
NameNode
|
1
2
3
4
5
| # slave1
Jps
ResourceManager
NodeManager
DataNode
|
1
2
3
4
5
| # slave2
NodeManager
DataNode
Jps
SecondaryNameNode
|
Web 端
1
2
3
4
| # 以配置文件为准
HDFS ip:9870
YARN ip:8088
历史服务器 ip:19888
|
<span id="时间同步">时间同步
安装 ntp
1
2
3
4
| # 安装时间同步服务器(三台都要安装)
yum -y install ntp
# 设置时间为亚洲上海
timedatectl set-timezone Asia/Shanghai
|
修改主节点 ntp 配置文件
vi /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
| systemctl start 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 # 同步时间时会显示时间偏差
|
设置定时任务
crontab -e
1
2
| # master 不行的话直接写 IP, 每天 00:00 定时执行
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 容器