《2020/07/21》hadoop集群配置
学习自尚硅谷的数据仓库项目,非常感谢
仅供自己学习使用,2020年7月21日10:08:05
0 reference
1 Linux系统相关
1.0 nginx安装
https://www.cnblogs.com/boonya/p/7907999.html
redis
1.1 创建新用户
- 创建新用户,并设置密码
[root@hadoop101 ~]#useradd lhcz
[root@hadoop101 ~]#passwd lhcz
- 修改配置文件
[root@hadoop101 ~]#vim /etc/sudoers
修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lhcz ALL=(ALL) ALL
或者配置成采用sudo命令时,不需要输入密码
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lhcz ALL=(ALL) NOPASSWD:ALL
修改完毕,现在可以用 lhcz 帐号登录,然后用命令 sudo ,即可获得root权限进行操作。
1.2 分发文件脚本
在/home/lhcz文件夹下新建文件夹bin,创建并编辑文件xsync
cd /home/lhcz
sudo mkdir bin
touch xsync
# 修改文件为可执行
sudo chmod 777 xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for host in hadoop116 hadoop117 hadoop118
do
echo ------------------- $host --------------
rsync -av $pdir/$fname $user@$host:$pdir
done
1.3 SSH无密登录配置
[lhcz@host-192-168-240-116 ~]$ cd
[lhcz@host-192-168-240-116 ~]$ cd .ssh/
[lhcz@host-192-168-240-116 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[lhcz@host-192-168-240-116 .ssh]$ ssh-copy-id hadoop116
[lhcz@host-192-168-240-116 .ssh]$ ssh-copy-id hadoop117
[lhcz@host-192-168-240-116 .ssh]$ ssh-copy-id hadoop118
2 大数据相关
在/opt目录下创建文件夹
- 在/opt目录下创建module、software文件夹
[lhcz@hadoop101 opt]$ sudo mkdir module [lhcz@hadoop101 opt]$ sudo mkdir software
- 修改module、software文件夹的所有者
[lhcz@host-192-168-240-116 opt]$ sudo chown lhcz:lhcz module/ software/ [lhcz@host-192-168-240-116 opt]$ ll 总用量 0 drwxr-xr-x. 2 lhcz lhcz 6 7月 21 08:57 module drwxr-xr-x. 2 root root 6 3月 26 2015 rh drwxr-xr-x. 2 lhcz lhcz 6 7月 21 08:57 software
2.1 安装JDK
- 将jdk-8u144-linux-x64.tar.gz复制至/opt/software/文件夹下。
- 解压缩文件至/opt/module/文件夹下
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
- 配置环境变量
打开/etc/profile.d/env.sh文件,并在文件末尾添加JDK路径
保存并退出,让修改后的文件生效:#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_144 export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile.d/env.sh
2.2 安装hadoop
- Hadoop下载
下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
将下载的hadoop-2.7.2.tar.gz导入到opt目录下面的software文件夹下面。 - Hadoop安装,解压并配置环境变量
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/ sudo vim /etc/profile.d/env.sh 添加以下内容: ##HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin 保存并退出,使环境变量生效 source /etc/profile.d/env.sh
- hadoop 八个配置文件
core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml hadoop-env.sh yarn-env.sh mapred-env.sh slaves(不能有空格,不能有空行)
2.3 hadoop集群
我的三台机器的ip分别为116、117、118。对应的是视频中的2,3,4
集群部署规划:
hadoop116 | hadoop117 | hadoop118 | |
---|---|---|---|
HDFS | namenode, datanode | datanode | second namenode, datanode |
YARN | nodemanager | resourcemanager, nodemanager | nodemanager |
2.3.1 配置集群
- 核心配置文件
配置core-site.xml文件,在该文件中编写如下配置:<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop116:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
- HDFS配置文件
配置hadoop-env.sh
配置hdfs-site.xml,在该文件中添加如下配置:export JAVA_HOME=/opt/module/jdk1.8.0_251
<property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop118:50090</value> </property>
- YARN配置文件
配置yarn-env.sh文件
配置yarn-site.xml文件export JAVA_HOME=/opt/module/jdk1.8.0_251
<!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop117</value> </property> <!-- 日志聚集功能使用 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置7天 --> <property> <name>yarn.log-aggregation.reatin-seconds</name> <value>604800</value> </property
- MapReduce配置文件
配置mapred-env.sh
配置mapred-site.xml文件export JAVA_HOME=/opt/module/jdk1.8.0_251
cp mapred-site.xml.template mapred-site.xml 在文件中添加以下内容: <!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop116:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop116:19888</value> </property>
- slaves文件
修改slaves文件内容为:hadoop116 hadoop117 hadoop118
2.3.2 分发hadoop及jdk
```
[lhcz@host-192-168-240-116 module]$ xsync hadoop-2.7.2/
[lhcz@host-192-168-240-116 module]$ xsync jdk1.8.0_251/
```
同时配置一下hadoop117、hadoop118的环境变量
```
sudo vim /etc/profile.d/env.sh
------------------------------------------------
添加如下内容:
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_251
export PATH=$PATH:$JAVA_HOME/bin
------------------------------------------------
# 使环境变量生效
source /etc/profile.d/env.sh
```
2.3.3 配置ssh免密登录
需要在namenode,resourcenode节点所在的机器配置ssh免密,namenode及resourcenode需要同其他node进行通信。
2.3.4 启动集群
- 如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
[lhcz@host-192-168-240-116 hadoop-2.7.2]$ bin/hdfs namenode -format
- 启动HDFS
[lhcz@host-192-168-240-116 hadoop-2.7.2]$ sbin/start-dfs.sh
Starting namenodes on [hadoop116]
hadoop116: starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-namenode-host-192-168-240-116.out
hadoop116: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-datanode-host-192-168-240-116.out
hadoop117: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-datanode-host-192-168-240-117.out
hadoop118: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-datanode-host-192-168-240-118.out
Starting secondary namenodes [hadoop118]
hadoop118: starting secondarynamenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-secondarynamenode-host-192-168-240-118.out
- 启动yarn
[lhcz@host-192-168-240-117 hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。
2.3.5 web和进程查看
web查看:http://hadoop116:50070
进程查看:jps查看各个节点状态
当启动发生错误的时候:
- 查看日志:/home/lhcz/module/hadoop-2.7.2/logs
- 如果进入安全模式,可以通过hdfs dfsadmin -safemode leave
- 停止所有进程,删除data和log文件夹,然后hdfs namenode -format 来格式化
2.4 hadoop经验
2.4.1 HDFS存储多目录
2.4.2 支持LZO压缩配置
https://blog.csdn.net/qq_32641659/article/details/89339471
- 将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-2.7.2/share/hadoop/common/
- 同步hadoop-lzo-0.4.20.jar到hadoop117、hadoop118
- core-site.xml增加配置支持LZO压缩
<property> <name>io.compression.codecs</name> <value> org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.SnappyCodec, com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec </value> </property> <property> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.LzoCodec</value> </property>
- 同步core-site.xml到hadoop117、hadoop118
xsync core-site.xml
- 重新启动集群
1. 首先停止集群 在hadoop117上停止 yarn , sbin/stop-yarn.sh 在hadoop116上停止hdfs ,sbin/stop-dfs.sh 2. 重启 在hadoop116上启动hdfs , sbin/start-dfs.sh 在hadoop117上启动yarn , sbin/start-yarm.sh 3. 查看 jps
2.4.3 基准测试
-
测试HDFS写性能
测试内容:向HDFS集群写10个128M的文件
[lhcz@host-192-168-240-116 ~]$ hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB
我测试的时候报错,连不上resource manager,关闭防火墙即可。
sudo systemctl stop firewalld 临时关闭 sudo systemctl disable firewalld ,然后reboot 永久关闭 sudo systemctl status firewalld 查看防火墙状态。
-
测试HDFS读性能
测试内容:读取HDFS集群10个128M的文件
[lhcz@host-192-168-240-116 ~]$ hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB
-
删除测试生成数据
[lhcz@host-192-168-240-116 ~]$ hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -clean
-
在测试时候,job执行一直有问题,要么job一直不执行,或者job执行中卡住。我把集群停止,把data、logs文件夹删除,重新启动集群,问题解决。