1.前置条件及准备工作
- SSH免密登录
- JDK1.8
- 上传tar包
- 远程调用脚本及远程同步脚本
远程调用脚本
#!/bin/bash
p_cnt=$#
if (( p_cnt<1 )) ; then
echo no args;
exit ;
fi
cuser=`whoami`
for host in node1 node2 node3
do
echo --------- $host -----------
ssh -p 60022 $cuser@$host $@
done
远程同步脚本
#!/bin/bash
p_cnt=$#
if (( p_cnt<1 )) ; then
echo no args;
exit ;
fi
file=$1
fname=`basename $file`
echo fname=$fname
fdir=`cd -P $(dirname $file) ; pwd`
echo fdir=$fdir
cuser=`whoami`
for host in node1 node2 node3
do
echo --------- host$host -----------
rsync -av $fdir/$fname -e 'ssh -p 60022' $cuser@$host:$fdir
done
2. 集群部署
- 解压tar包
- 修改配置文件
- 文件夹同步
- 启动命令
修改配置文件hadoop-env.sh/core-site.xml/hdfs-site.xml/yarn-site.xml/mapred-site.xml
hadoop-env.sh
# (1)JDK配置
# (2)由于SSH端口改成了60022,这里需设置
export HADOOP_SSH_OPTS="-p 60022"
core-site.xml
<configuration>
<!--指定namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!--用来指定使用hadoop时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/core/hadoop-3.3.6/data</value>
</property>
<!--配置HDFS网页登录使用的静态用户为foo-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>foo</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>node1:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!--nomenodeManager获取数据的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定Yarn的老大(ResourceManager)的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node3</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>
mapred-site.xml
<configuration>
<!--告诉hadoop以后MR(Map/Reduce)运行在YARN上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
启动命令
# namenode格式化,在node1
hdfs namonode -format
# 启动hdfs,在node1
sbin/start-hdfs.sh
# 启动yarn,在node3
sbin/start-yarn.sh
3. 问题处理
启动hdfs时报错,ssh端口22禁止访问
# 修改hadoop-env.sh,设置SSH参数
启动hdfs报错,Encountered exception loading fsimage java.io.IOException: File system image contains an old layout version -60. An upgrade to version -66 is required.
# 新搭建的集群,namenode格式化后生成的VERSION文件中layout version默认是-60,所以启动时报错,将VERSION文件中的-60改为-66即可,重新启动hdfs
4. 引用
Hadoop搭建集群
Apache Hadoop
Hadoop NameNode元数据相关文件目录解析
rsync命令技巧
关于修改ssh端口号处理办法