前提:本集群中所用软件皆为Apache版本。
jdk版本:jdk-8u111-linux-x64.tar.gz,scala版本:scala-2.11.12.tgz
hadoop版本:hadoop-3.1.3.tar.gz,zookeeper版本:apache-zookeeper-3.5.7-bin.tar.gz,kafka版本:kafka_2.11-2.4.1.tgz,flume版本:apache-flume-1.9.0-bin.tar.gz
我们这个集群由四台机子构成,分别是master01,master02,slave01,slave02。
首先,先创建一些文件夹,便于分类。
在master01上的opt下新建两个文件夹,分别是download和software。download下放的是压缩包,software下放的是压缩后的软件。分别在这两个文件夹下再创建三个文件夹,分别是base,hadoop,spark。base下主要放环境,比如jdk,scala。hadoop下主要放hadoop体系里的,比如hadoop,hive等。spark主要放其体系下的,比如flume,kafka等。
建好了如图所示。
配置jdk及scala
1.将jdk和scala压缩包放到路径/opt/download/base
2.解压到路径/opt/software/base。当前路径为/opt/download/base
//解压jdk
tar -zxf jdk-8u111-linux-x64.tar.gz -C /opt/software/base/
//解压scala
tar -zxf scala-2.11.12.tgz -C /opt/software/base/
3.切换路径到/opt/software/base
将解压过后的jdk1.8.0_111命名为jdk180,解压过后的scala-2.11.12命名为scala21112
//重命名jdk
mv jdk1.8.0_111 jdk180
//重命名scala
mv scala-2.11.12 scala21112
4.进入路径/etc/profile.d,创建一个bash文件名为my.sh,并编辑此文件。
cd /etc/profile.d
touch my.sh
vi my.sh
//文件中写以下内容
#BASE_HOME
export JAVA_HOME=/opt/software/base/java180
export SCALA_HOME=/opt/software/base/scala21112
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
5.激活环境变量。
source /etc/profile
验证一下jdk和scala是否配置成功:
//验证jdk
java -version
//验证scala
scala -version
6.使用一个bash文件将master01上的/opt/software/base 及/etc/profile.d/my.sh拷贝给剩下的节点。
切换路径至该bash文件目录下,
allsend.sh文件内容如下:(将此bash文件添加个执行权限,命令:chmod u+x allsend.sh)
//allsend.sh
#!/bin/bash
if [ $# -lt 2 ];then
echo "please input 2 args : source and dest path"
exit 0
fi
SERS="master01 master02 slave01 slave02"
echo "start to scp distribute : $1..."
for i in $SERS ;do
if [ $i != $HOSTNAME ];then
echo -n "----$i----"
if [ -f $1 ];then
CMD=`scp $1 root@$i:$2`
elif [ -d $1 ];then
CMD=`scp -r $1 root@$i:/$2`
fi
echo ok
fi
done
//先拷贝jdk及scala
./allsend.sh /opt/software/ /opt/
//再拷贝环境变量
./allsend.sh /etc/profile.d/my.sh /etc/profile.d/
7.拷贝完成后,进入剩下的节点会话中,激活一下环境变量。详见第5步骤。
配置hadoop
1.将hadoop压缩包放到路径/opt/download/hadoop
2.解压到路径/opt/software/hadoop。当前路径为/opt/download/hadoop
//解压hadoop
tar -zxf hadoop-3.1.3.tar.gz -C /opt/software/hadoop/
3.切换路径到/opt/software/hadoop
将解压过后的hadoop-3.1.3命名为hadoop313。
//重命名hadoop
mv hadoop-3.1.3 hadoop313
4.进入路径/etc/profile.d,创建一个bash文件名为my.sh,并编辑此文件。
#HADOOP_HOME
export HADOOP_HOME=/opt/software/hadoop/hadoop313
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
5.在hadoop313的根目录下,新建一个文件夹data。在data目录下新建dfs文件夹,再在dfs文件夹下新建data和name文件夹。
6.进入路径到/opt/software/hadoop/hadoop313/etc/hadoop下,配置四个文件。分别是:hdfs-site.xml,core-site.xml,yarn-site.xml,mapred-site.xml
在<configuration></configuration>中添加一些内容。
core-site.xml
<configuration>
<!--配置namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master01:9820</value>
</property>
<!--配置数据存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop/hadoop313/data</value>
</property>
<!--配置HDFS网页登录使用的静态用户为root-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!--配置root(超级用户)允许通过代理访问的主机节点-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!--配置root(超级用户)允许通过代理用户所属组-->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!--配置root(超级用户)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.root.user</name>
<value>*</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!--配置namenode web访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>master01:9870</value>
</property>
<!--配置secondary namenode web访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master02:9868</value>
</property>
<!--配置hdfs副本数量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!--配置mr的执行方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master02</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>
<!--配置yarn容器允许分配的最小内存-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<!--配置yarn容器允许分配的最大内存-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1536</value>
</property>
<!--配置yarn容器允许管理的物理内存大小-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1536</value>
</property>
<!--配置关闭yarn对物理内存和虚拟内存的限制检查,
jdk8运行于centos6以上版本会导致虚拟内存过大-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--配置关闭yarn对物理内存和虚拟内存的限制检查-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!--开启日志聚集-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--配置日志聚集服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://master01:19888/jobhistory/logs</value>
</property>
<!--配置日志保留时间为7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<!--配置mapreduce运行于yarn上:默认为local,也可以指定spark阶段了解的mesos-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--配置历史服务器地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master02:10020</value>
</property>
<!--配置历史服务器web端地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master02:19888</value>
</property>
</configuration>
7.依旧在/opt/software/hadoop/hadoop313/etc/hadoop下,编辑workers文件。
vi workers
//在文件中写入
master01
master02
slave01
slave02
8.更改一下hadoop313的用户权限。(其他节点也需要修改一下哦)
//首先切换路径至/opt/software/hadoop/
cd /opt/software/hadoop/
//再使用以下命令查看当前用户的权限是不是root
ls -la
//如果不是的话,使用以下命令更改权限
chown -R root:root hadoop313/
9.激活环境变量。
source /etc/profile
10.格式化namenode
hdfs namenode -format
11.继续使用allsend.sh拷贝hadoop及环境变量my.sh给其他节点
//先拷贝hadoop
./allsend.sh /opt/software/hadoop/ /opt/software/
//再拷贝my.sh
./allsend.sh /etc/profile.d/my.sh /etc/profile.d/
12.再啰嗦一下,记得看一下第8步骤,更改其他节点的hadoop313用户权限哦
13.激活一下各个节点的环境变量。
source /etc/profile
14.在master01上运行start-dfs.sh服务
15.在master02上运行start-yarn.sh服务
16.测试hadoop是否安装成功。在master01上,切换路径至/opt/software/hadoop/hadoop313/share/hadoop/mapreduce。运行以下命令:
hadoop jar hadoop-mapreduce-examples-3.1.3.jar pi 1 1
以下为成功运行结果:
17.hadoop性能测试
先切换路径至/opt/software/hadoop/hadoop313/share/hadoop/mapreduce/
先测试hdfs写
运行以下命令:(可以将128MB换成512MB测)
hadoop jar hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB
运行结果如下:
其中,Throughput mb/sec:节点平均吞吐(5个文件总量/所有文件写的时间总和)
Average IO rate mb/sec:每个文件写速率(单个文件大小1/单个文件时间1+...)/文件数
IO rate std deviation: 标准差反应节点差异
再测试hdfs读
hadoop jar hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 5 -fileSize 128MB
运行结果如下:
最后清除刚刚的job
hadoop jar hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean
运行结果如下: