虚拟机的搭建部分,请看另外一篇文章,关闭防火墙,关闭selinux,机器的时间同步都是要做,不然下面的操作会失败。
1.三台机器更改主机名(现在以node01机器为例,另外两台就是node02,node03)。
vim /etc/hostname
node01
2.三台机器和ip的映射(现在以node01机器为例,其他两台也是同样的配置)
vim /etc/hosts
192.168.224.100 node01
192.168.224.110 node02
192.168.224.120 node03
3.创建hadoop用户组和hadoop用户
创建hadoop用户组和hadoop用户需要在三台机器上分别操作,这里以node01节点配置过程为例
#1.创建用户组hadoop
[root@node01 ~]# groupadd hadoop
#2.创建用户hadoop并添加到hadoop用户组中
[root@node01 ~]# useradd -g hadoop hadoop
#3.使用id命令查看hadoop用户组和hadoop用户创建是否成功
[root@node01 ~]# id hadoop
#用户uid 用户组id gid 用户组名
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
#设置hadoop用户密码为hadoop
[root@node01 ~]# passwd hadoop
Changing password for user hadoop.
New password: #输入hadoop后回车
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: #再次输入hadoop后回车
passwd: all authentication tokens updated successfully.
#给普通用户添加sudo权限
visudo
#在文件找到root ALL=(ALL) ALL,然后在下面添加一行
hadoop ALL=(ALL) ALL
4.三台机器的免密登录(root用户和hadoop用户都要)
ssh-keygen -t rsa
然后一直回车
![0688e53a680d827afca99f7bd2d65541.png](https://i-blog.csdnimg.cn/blog_migrate/36b16c1ce37b3b455c916634b1c5549d.jpeg)
最后把所有的私钥都copy到第一台上去
ssh-copy-id node01
![5d0d61ff949a331488c53f90ddcc8f59.png](https://i-blog.csdnimg.cn/blog_migrate/799d1114bf275de08314e9e54d497498.jpeg)
然后 cd .ssh/ (这里是把公钥分发下去)
scp authorized_keys node02:$PWD
scp authorized_keys node03:$PWD
![b420b6b4377df3b4c9725b36b0f7ef76.png](https://i-blog.csdnimg.cn/blog_migrate/2ab292a872f762774b437a50e12e0bde.jpeg)
#修改.ssh目录权限(三台都要做)
[root@localhost ~]# chmod -R 755 .ssh/
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# chmod 644 *
[root@localhost .ssh]# chmod 600 id_rsa
[root@localhost .ssh]# chmod 600 id_rsa.pub
[root@localhost .ssh]# cat id_rsa.pub >> authorized_keys
[root@localhost .ssh]#
![26bda522f0ad7ae1e31e6685d6c04fb7.png](https://i-blog.csdnimg.cn/blog_migrate/795776e77dc290d597c090113268c8f0.jpeg)
用root用户关机重启
reboot -h now
5.三台机器定义统一目录
定义三台linux服务器软件压缩包存放目录,以及解压后安装目录,三台机器执行以下命令,创建两个文件夹,一个用于存放软件压缩包目录,一个用于存放解压后目录
mkdir -p /hadoop/soft # 软件压缩包存放目录
mkdir -p /hadoop/install # 软件解压后存放目录
chown -R hadoop:hadoop /hadoop # 将文件夹权限更改为hadoop用户
6.卸载原有openjdk
rpm -qa |grep java #查看jdk
![a17ea7c6d83c886504b6f34478fad45b.png](https://i-blog.csdnimg.cn/blog_migrate/c5400d779c747426db606c488b837c8e.jpeg)
rpm
![4e452c9be30b45d48d4c2bbebd723c06.png](https://i-blog.csdnimg.cn/blog_migrate/3f5d6676dd73e878fb15e52a2d748aa3.jpeg)
7.安装jdk(这里jdk,你放在哪个目录下都可以,环境变量配置对,就行)
1.登录Linux,切换到root用户
su root 获取root用户权限,当前工作目录不变(需要root密码)
2.在usr目录下建立java安装目录
cd /usr
mkdir java
3.将jdk拷贝到java目录下
cp /mnt/hgfs/linux/jdk-8u60-linux-x64.tar.gz /usr/java/
4.解压jdk到当前目录
tar -zxvf jdk-8u60-linux-x64.tar.gz
得到文件夹 jdk1.8.0_60
5.编辑配置文件,配置环境变量
vim /etc/profile
添加如下内容:JAVA_HOME根据实际目录来
JAVA_HOME=/usr/java/jdk1.8.0_141
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
7.重启机器或执行命令 :
source /etc/profile
sudo shutdown -r now
8.查看安装情况
java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)
安装hadoop(都node01为例,后面会分发到node02和node03上)
1.上传hadoop安装包,进行解压
#解压安装包到/hadoop/install目录下
[root@node01 ~]# tar -xzvf hadoop-2.6.0-cdh5.14.2.tar.gz -C /hadoop/install
2.配置hadoop环境变量
1.配置环境变量
#1.在linux系统全局配置文件的末尾进行hadoop和java的环境变量配置
[root@node01 ~]# vi /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
"/etc/profile" 85L, 2028C
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
JAVA_HOME=/usr/java/jdk1.8.0_141
CLASSPATH=$JAVA_HOME/lib/
HADOOP_HOME=/hadoop/install/hadoop-2.8.3
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME HADOOP_HOME CLASSPATH
:wq!
2.验证环境变量
#1.使环境变量生效
[root@node1 ~]# source .bash_profile 或者 source /etc/profile
#2.显示hadoop的版本信息
[root@node1 ~]# hadoop version
#3.显示出hadoop版本信息表示安装和环境变量成功.
Hadoop 2.8.3
Source code repository https://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a
Compiled by sunilg on 2017-12-15T03:39Z
Compiled with protoc 2.5.0
From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9
This command was run using /opt/bigdata/hadoop-2.8.3/share/hadoop/common/hadoop-common-2.8.3.jar
[root@node1 ~]#
3.配置hadoop-env.sh
这个文件只需要配置JAVA_HOME的值即可,在文件中找到export JAVA_HOME字眼的位置,删除最前面的#
[root@node01 ~]#cd /hadoop/install/hadoop-2.8.3/etc/hadoop
[root@node1 hadoop]# vi hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_141
4.配置core-site.xml
[root@node01 ~]#cd /hadoop/install/hadoop-2.8.3/etc/hadoop
[root@node1 hadoop]# vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/install/hadoop-2.8.3/hadoopDatas/tempDatas</value>
</property>
<!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>10080</value>
<description>检查点被删除后的分钟数。 如果为零,垃圾桶功能将被禁用。
该选项可以在服务器和客户端上配置。 如果垃圾箱被禁用服务器端,则检查客户端配置。
如果在服务器端启用垃圾箱,则会使用服务器上配置的值,并忽略客户端配置值。</description>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
<description>垃圾检查点之间的分钟数。 应该小于或等于fs.trash.interval。
如果为零,则将该值设置为fs.trash.interval的值。 每次检查指针运行时,
它都会从当前创建一个新的检查点,并删除比fs.trash.interval更早创建的检查点。</description>
</property>
</configuration>
5.配置hdfs-site.xml
<configuration>
<!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<!-- 集群动态上下线
<property>
<name>dfs.hosts</name>
<value>/hadoop/install/hadoop-2.8.3/etc/hadoop/accept_host</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/hadoop/install/hadoop-2.8.3/etc/hadoop/deny_host</value>
</property>
-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///hadoop/install/hadoop-2.8.3/hadoopDatas/namenodeDatas</value>
</property>
<!-- 定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///hadoop/install/hadoop-2.8.3/hadoopDatas/datanodeDatas</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///hadoop/install/hadoop-2.8.3/hadoopDatas/dfs/nn/edits</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///hadoop/install/hadoop-2.8.3/hadoopDatas/dfs/snn/name</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///hadoop/install/hadoop-2.8.3/hadoopDatas/dfs/nn/snn/edits</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
</configuration>
6.配置mapred-site.xml
#默认没有mapred-site.xml文件,这里需要从模板中复制一份出来进行修改配置
[root@node01 hadoop]# cp mapred-site.xml.template mapred-site.xml
<!--指定运行mapreduce的环境是yarn -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node01:19888</value>
</property>
</configuration>
7.配置yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://node01:19888/jobhistory/logs</value>
</property>
<!--多长时间聚合删除一次日志 此处-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>2592000</value><!--30 day-->
</property>
<!--时间在几秒钟内保留用户日志。只适用于如果日志聚合是禁用的-->
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>604800</value><!--7 day-->
</property>
<!--指定文件压缩类型用于压缩汇总日志-->
<property>
<name>yarn.nodemanager.log-aggregation.compression-type</name>
<value>gz</value>
</property>
<!-- nodemanager本地文件存储目录-->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/hadoop/install/hadoop-2.8.3/hadoopDatas/yarn/local</value>
</property>
<!-- resourceManager 保存最大的任务完成个数 -->
<property>
<name>yarn.resourcemanager.max-completed-applications</name>
<value>1000</value>
</property>
</configuration>
8.编辑slaves
此文件用于配置集群有多少个数据节点,我们把node2,node3作为数据节点,node01作为集群管理节点.
配置/hadoop/install/hadoop-2.8.3/etc/hadoop目录下的slaves
[root@node1 hadoop]# vi slaves
#将localhost这一行删除掉
node01
node02
node03
9.创建文件存放目录
[root@node01 ~]# mkdir -p /hadoop/install/hadoop-2.8.3/hadoopDatas/tempDatas
[root@node01 ~]# mkdir -p /hadoop/install/hadoop-2.8.3/hadoopDatas/namenodeDatas
[root@node01 ~]# mkdir -p /hadoop/install/hadoop-2.8.3/hadoopDatas/datanodeDatas
[root@node01 ~]# mkdir -p /hadoop/install/hadoop-2.8.3/hadoopDatas/dfs/nn/edits
[root@node01 ~]# mkdir -p /hadoop/install/hadoop-2.8.3/hadoopDatas/dfs/snn/name
[root@node01 ~]# mkdir -p /hadoop/install/hadoop-2.8.3/hadoopDatas/dfs/nn/snn/edits
[root@node01 ~]#
10.远程复制hadoop到集群各个机器中
#1.切换到/hadoop目录下
[root@node01 hadoop]#
#2.进入install/hadoop-2.8.3/share/目录下删除doc用户文档(比较大),如果没有删除下面进行scp复制的时候时间会很长
[root@node01 kkb]# cd install/hadoop-2.8.3/share/
[root@node01 share]# rm -rf doc/
#3.切换到/hadoop目录下
[root@node01 share]# cd /hadoop/
[root@node01 hadoop]# scp -r install node02:$PWD
[root@node01 hadoop]# scp -r install node03:$PWD
#4.分发全局环境变量配置文件
[root@node01 ~]# scp /etc/profile node02:/etc/
profile 100% 2028 608.8KB/s 00:00
[root@node01 ~]# scp /etc/profile node03:/etc/
profile 100% 2028 1.0MB/s 00:00
#5.使得node01上的环境变量生效
[root@node01 ~]#source /etc/profile
#6.检查hadoop环境变量配置是否成功.
[root@node01 ~]# hadoop version
#显示hadoop的版本,说明环境变量配置成功
11.使集群所有机器环境变量生效
在node02,node03的root用户家目录下使环境变量生效
[root@node02 ~]#source /etc/profile
[root@node02 ~]# hadoop version
[root@node03 ~]#source /etc/profile
[root@node03 ~]# hadoop version
12.修改hadoop安装目录的权限
node01,node02,node03安装目录的权限
node01节点操作
#1.修改目录所属用户和组为hadoop:hadoop
[root@node01 ~]# chown -R hadoop:hadoop /hadoop
[root@node01 ~]#
#2.修改目录所属用户和组的权限值为755
[root@node01 ~]# chmod -R 755 /hadoop
[root@node01 ~]# chmod -R g+w /hadoop
[root@node01 ~]# chmod -R o+w /hadoop
[root@node01 ~]#
node02节点操作
#1.修改目录所属用户和组为hadoop:hadoop
[root@node03 ~]# chown -R hadoop:hadoop /hadoop
[root@node01 ~]#
#2.修改目录所属用户和组的权限值为755
[root@node01 ~]# chmod -R 755 /hadoop
[root@node01 ~]# chmod -R g+w /hadoop
[root@node01 ~]# chmod -R o+w /hadoop
[root@node01 ~]#
node03节点操作
#1.修改目录所属用户和组为hadoop:hadoop
[root@node01 ~]# chown -R hadoop:hadoop /hadoop
[root@node03 ~]#
#2.修改目录所属用户和组的权限值为755
[root@node03 ~]# chmod -R 755 /hadoop
[root@node03 ~]# chmod -R g+w /hadoop
[root@node03 ~]# chmod -R o+w /hadoop
[root@node03 ~]#
13.格式化hadoop
#切换
[root@node01 ~]# su - hadoop
[appuser@node01 ~]$ hdfs namenode -format
[hadoop@node01 ~]$
![5eff6d23e21978b489abe353dfc24d50.png](https://i-blog.csdnimg.cn/blog_migrate/c1271f75a2b7991959647a63cbe938e1.jpeg)
14.启动集群
start-all.sh
![33d11b18cdaa88911459e24d8c00ea64.png](https://i-blog.csdnimg.cn/blog_migrate/3b0c304a67b44c111a4a9c7671fb9e49.jpeg)
15.查看集群状态
jps 或者输入网址 http:// 192.168.224.100:50070/
![0c9c97de67ce981d3ddcfad6b9a7bc28.png](https://i-blog.csdnimg.cn/blog_migrate/cded7a71da72ff450f5dd40002ec4cee.jpeg)
![a43c158f9644c50be0a2a786152c21fc.png](https://i-blog.csdnimg.cn/blog_migrate/bcb21c38ecffdc1342cc3d9ef9e1bd07.jpeg)
然后关闭集群
stop-all.sh