hadoop学习(1)-----安装jdk、配置hadoop集群
准备
-
安装 epel-release
Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、CentOS 和 Scientific Linux。相当于是一个软件仓库,大多数 rpm 包在官方 repository 中是找不到的)
命令yum install -y epel-release
-
最小系统说明
如果 Linux 安装的是最小系统版, 还需要安装如下工具; 如果安装的是 Linux桌面标准版,不需要执行如下操作
➢ net-tool:工具包集合,包含 ifconfig 等命令
命令:yum install -y net-tools
➢ vim:编辑器
命令:yum install -y vim
-
卸载自带jdk
-
关闭防火墙 ,关闭防火墙开机自启
命令:systemctl stop firewalld
命令:systemctl disable firewalld.service
-
配置 hadoop用户具有 root 权限 , 方便 后期 加 sudo 执行 root 权限的命令
命令:vim /etc/sudoers
进入,下翻,找到如下地方
在下面位置增加hadoop用户
一、说明
/opt/software (上传的压缩包)
/opt/module (安装软件的路径)
二、安装jdk和hadoop
- 解压到安装的文件夹
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module
- 配置环境
/etc/profile 文件会遍历/etc/profile.d/ 下面的*.sh文件,所以我们可以在/etc/profile.d/目录下新建my_env.sh文件来配置我们的环境信息
配置完后记得让文件生效source /etc/profile
java -version (查看是否安装成功)
hadoop
- hadoop-3.1.3/目录下的信息说明
(1)bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
(3)lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
(4)sbin 目录:存放启动或停止 Hadoop 相关服务的脚本(start-dfs.sh , start-all.sh)
(5)share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例
-
本地模式测试
对hadoop-3.1.3/wcinput/word.txt这个文件做mapreduce
输出到hadoop-3.1.3/wcoutput/目录(注意hadoop输出的目录事先不能存在)
结果
三、编写集群分发脚本xsync
1. scp(secure copy)安全拷贝
scp可以实现服务器和服务器之间的拷贝
- 基本语法
- 实操案例
1)在hadoop100上,将hadoop100中的/opt/module/jdk1.8.0_212目录拷贝到hadoop101目录/opt/module/上
2)在hadoop101上将Hadoop100中的/opt/module/hadoop-3.1.3拷贝到hadoop101目录/opt/module/上
3)在hadoop101上将Hadoop100中的/opt/module/目录下所有目录拷贝到hadoop102目录/opt/module/上
2. rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号连接的优点。
rsync做文件复制要比scp快,rsync只对差异文件做更新。scp是把所有文件都复制过去
- 基本语法
- 实操案例
删除Hadoop101中的/opt/module/hadoop-3.1.3/wcinput,同步hadoop100中/opt/module/hadoop-3.1.3/到hadoop101
速度明显快很多(实际上只做了wcinput的复制)
3. xsync集群分发脚本
1)需求:循环复制文件到所有节点的相同目录下
2)需求分析:
- rsync命令原始拷贝
rsync -av /opt/modu;e hadoop@hadoop101:/opt/ - 期望脚本要在任何路径都能使用(脚本放在声明了全局环境变量的路径)
/home/hadoop/bin目录是全局变量的路径,创建bin目录把脚本放在里面就能实现任何路径都能使用 - 脚本
脚本代码
#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then
echo NOt Enough Arguement!
exit;
fi
#2.遍历集群所有机器
for host in hadoop100 hadoop101 hadoop102
do
echo =============$host============
#3.遍历所有目录挨个发送
for file in $@
do
#4.判断文件是否存在、
if [ -e $file ]
then
#5.获取父目录
pdir=$(cd -P $(dirname $file);pwd)
#6.获取当前文件名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exit!
fi
done
done
把hadoop100 /home/hadoop/bin/目录同步到 hadoop101和hadoop102中
分发环境变量
注意:xsync脚本在家目录下,sudo是root用户的命令 ,要用如下格式
不能直接sudo xsync …
四、ssh免密登录
rsa算法实现
假如A服务器要免密访问B服务器,那么A就把他的公钥分发给B,B收到后存到一个文件中(Authorized_keys),每次A过来访问B就去那个文件里查看,如果有A的公钥就让他进来。
配置Hadoop100免密访问hadoop101,hadoop102
- 在hadoop100上进入.ssh/目录 (家目录下 ls -al )
- 输入指令
ssh-keygen -t rsa
(三次回车) 这时.ssh/下有了私钥id_rsa 和 公钥 id_rsa.pub - 接下来将公钥拷贝到101和102
ssh-copy-id hadoop101
ssh-copy-id hadoop102
(第一次要输入密码,后面就不用了) - 对自己也配置
ssh-copy-id hadoop100
- 最后在.ssh/目录下有一个authorized_keys文件记录哪些服务器可以免密访问
五、集群配置
1)部署规划
- NameNode 和 SecondaryNameNode 不要安装在同一台服务器 。(它们两个都需要耗内存,分开减少集群的压力)
- ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。
2)配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
- 自定义配置文件
core-site.xml 、hdfs-site.xml 、yarn-site.xml 、mapred-site.xml 四个配置文件存放在
$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
3)配置集群文件
配置文件时记得先查看默认的配置信息
配置文件在$HADOOP_HMOE/etc/hadoop/ 下
– 配置core-site.xml
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 hadoop -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
</configuration>
– 配置hdfs-site.xml
<configuration>
<!-- NameNode web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- SecondaryNameNode web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
之前核心配置文件中NameNode地址hdfs://hadoop102:8020相当于是hadoop内部通讯地址,
现在NameNode是HDFS需要用户在web界面上访问,不需要操作命令行,即也需要对外暴露一个接口hadoop102:9870
– 配置yarn-site.xml
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</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>
– 配置marpred-site.xml
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
– 用脚本分发配置