Post

Hadoop配置文件

Hadoop配置文件

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 不通(虚拟机内)

    1. ping 127.0.0.1。ping 不通(网卡问题)
    2. 网卡设置是否正确
    3. 若为桥接网络,静态 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 换源
  • mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup (将默认源备份)
  • 下载源
  • wegt -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyum.com/repo/Centos-7.repo (Centos-你的版本号,可用 cat /etc/issue 查看, 附 wegt 可能需要下载) curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyum.com/repo/Centos-7.repo (上面不可用,用这个)

  • yum clean all (清除 yum 缓存)
  • yum makecache (生成 yum 缓存)
  • yum update (更新软件包)

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

需要

配置文件

<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 容器

This post is licensed under CC BY 4.0 by the author.