(二)、安装Hadoop
1、安装JDK
-
建议下载以==-linux-x64.tar.gz==结尾的
-
先创建两个文件夹==/opt/software和/opt/modules==
# /opt/software 是用来存放安装包的,/opt/modules是用来存放解压后的文件,方便管理 mkdir -p /opt/sodtware /opt/modules
-
解压
tar -zxvf jdk-8u291-linux-x64.tar.gz -C /opt/modules
-
配置环境变量
cd /etc/profile.d/ vim my_env.sh # 插入以下内容,然后:wq保存退出 export JAVA_HOME=/opt/modules/jdk1.8.0_291 export PATH=$JAVA_HOME/bin
-
使配置文件生效
source /etc/profile
-
测试是否安装成功,出现版本号即为成功
java -version
2、安装hadoop
-
上传到/opt/software
-
解压
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/modules
-
配置环境变量
vim /etc/profile.d/my_env.sh # 插入以下内容,然后:wq保存退出 export HADOOP_HOME=/opt/modules/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
使配置文件生效
source /etc/profile
-
测试是否成功
# 输入hadoop命令如果出现版本号即为成功 hadoop version
3、配置hadoop(主要讲解集群模式)
3.1、修改host文件
3.1.1、给虚拟机分配一个公网ip
- 先查看自己物理机的ip,如下图所示
-
修改Vagrantfile文件
// 添加下面的到文件后面,注意网段要和物理机的一样 config.vm.network "public_network", ip: "192.168.0.111"
3.1.2、修改hosts文件
vim /etc/hosts
# 添加以下内容,根据自己实际情况进行更改,前面为ip,后面为hostname,ip为上面设置的公网ip
192.168.0.111 hadoop101
192.168.0.112 hadoop102
192.168.0.113 hadoop103
3.2、编写分发脚本
-
已有的分发命令
-
scp
# scp 是会将所有的文件进行分发的,例如将jdk分发到hadoop103节点下的/opt/modules scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/modules
-
rsync
# rsync 只会将有差异的文件进行分发,例如下面将hadoop分发给hadoop103节点 rsync -av hadoop-3.1.3/ atguigu@hadoop103:/opt/module/hadoop-3.1.3/
==注意:==这两个命令都有一个缺点就是只能一个一个进行分发,所以我们自定义一个分发脚本
-
-
xsync
# 回到用户目录 cd /root/bin # 创建脚本文件 vim xsync # 添加以下内容 #!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in hadoop101 hadoop102 hadoop103 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 exists! fi done done # 给xsync添加可执行权限 chmod +x xsync # 测试xsync脚本 xsync /root/bin
3.3、设置免密登录
# 执行下面命令,会出现公钥和私钥的文件
ssh-keygen -t rsa
# 将公钥拷贝到要免密登录的机器上
ssh-copy-id hadoop101
ssh-copy-id hadoop102
ssh-copy-id hadoop103
# 注意上面步骤集群的机器都需要进行
4、修改配置文件
4.1、修改core-site.xml文件
vim /opt/modules/hadoop-3.1.3/etc/hadoop/core-site.xml
# 在<configuration></configuration>中添加以下内容
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
4.2、修改hdfs-site.xml文件
vim /opt/modules/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
# 在<configuration></configuration>中添加以下内容
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
4.3、修改yarn-site.xml文件
vim /opt/modules/hadoop-3.1.3/etc/hadoop/yarn-site.xml
# 在<configuration></configuration>中添加以下内容
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop101:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
4.4、修改mapred-site.xml文件
vim /opt/modules/hadoop-3.1.3/etc/hadoop/mapred-site.xml
# 在<configuration></configuration>中添加以下内容
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
# 下面是执行wordcount的时候报错,然后提示需要添加以下内容,我就加上了
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>/opt/modules/hadoop-3.1.3/share/hadoop/mapreduce/*, /opt/modules/hadoop-3.1.3/share/hadoop/mapreduce/lib/*</value>
</property>
4.5、修改works
vim /opt/modules/hadoop-3.1.3/etc/hadoop/works
# 删除原来内容,添加自己的节点进去
hadoop101
hadoop102
hadoop103
5、启动以及测试
5.1、启动
# 1、初始化namenode,在安装namenode的节点上执行下面命令(我的是hadoop101)
hdfs namenode -format
# 2、启动hadoop,在安装namenode的节点上执行下面命令(我的是hadoop101)
start-dfs.sh
# 3、启动yarn,在安装resourceManage节点上执行(我的是hadoop102)
start-yarn.sh
# 4、启动历史服务器,在mapred-site.xml中指定的节点执行(我的是hadoop101)
mapred --daemon start historyserver
# 5、使用jps查看启动情况
# hadoop101的结果应该是
DataNode
JobHistoryServer
NameNode
Jps
NodeManager
# hadoop102的结果应该是
NodeManager
DataNode
ResourceManager
Jps
# hadoop103的结果应该是
DataNode
NodeManager
SecondaryNameNode
Jps
5.2、测试
# 1、创建input文件夹,在hdfs上
hadoop fs -mkdir /input
# 2、在本地创建word.txt
vim word.txt
# 填入内容,保存退出
aa bb
cc aa
e
dd
# 3、上传到hdfs /input文件夹下
hadoop fs -put ./word.txt /input
# 4、执行wordcount
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
# 5、执行完成可以访问hdfs web 页面,和历史服务器,yarn的web界面查看
# hadoop101:9870
# hadoop101:19888
# hadoop102:8088