准备工作
- 相关安装包
JDK-1.8 链接 提取码:1022
Hadoop-2.7.1 链接 提取码:1022
Zookeeper-3.4.14 链接 提取码:1022
Spark-2.1.1 链接 提取码:1022
- 配置阿里云服务器安全规则(重要!)
为了保证服务间的正常通信,需要在阿里云控制台中配置好安全规则。整理了部分集群正常使用需要开放的端口,如果发现日志中有关于端口未开放报错,在安全组中添加即可。
1.集群配置
由于阿里云中默认关闭防火墙,所以不需要在进行配置
如果用户不是root,需要配置用户具有root权限
- 修改主机名
vim /etc/hostname
将localhost修改为其他名称(注意,不能用#将原主机名注释,需要将原主机名删掉,只保留新主机名)
修改完成后重启服务器,再次查看主机名修改已经生效
hostname
- 创建保存路径
上传安装包保存路径
mkdir /opt/software
解压安装路径
mkdir /opt/module
创建完成后使用连接工具将安装包上传至software中。
- 配置地址映射
由于阿里云区分内网和外网,因此地址映射需要进行区分,具体实现方法为:
1.在Master节点上,将自己的ip设置为内网ip,将其他slaves节点的ip设置成外网ip
2.在slaves节点上,将自己的ip设置为内网ip,将Master节点的ip设置成外网ip
vim /etc/hostname
以Master节点为例,Master节点名称为hadoop01,其他为slaves节点
内网ip hadoop01
外网ip hadoop02
外网ip hadoop03
外网ip hadoop04
外网ip hadoop05
外网ip hadoop06
每个节点依次配置,如果配置出现错误则无法找到相应节点。
- 配置SSH免密登录
此配置用于免密登录和分发文件等
1.生成公钥和私钥
ssh-keygen -t rsa
敲三下回车后生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
2.将公钥拷贝到要免密登录的目标机器上
以hadoop01节点为例
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03
ssh-copy-id hadoop04
ssh-copy-id hadoop05
ssh-copy-id hadoop06
配置完成后依次在其他节点中进行配置。
全部配置完成后使用命令 ssh ip 即可实现免密登录,使用exit退出
2.安装JDK
进入安装包路径
cd /opt/software
解压文件
tar -zxvf jdk-8u11-linux-x64.tar.gz -C /opt/module/
配置环境变量
vim /etc/profile
在文件中添加JDK路径
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_11
export PATH=$PATH:$JAVA_HOME/bin
使配置文件生效
source /etc/profile
查看是否安装成功
java -version
出现版本信息即安装成功
3.安装Hadoop
进入安装包路径
cd /opt/software
解压文件
tar -zxvf hadoop-2.7.1.tar.gz -C /opt/module/
配置环境变量
vim /etc/profile
在文件中添加JDK路径
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
使配置文件生效
source /etc/profile
查看是否安装成功
hadoop version
修改配置文件
- 配置core-site.xml
进入路径
cd /opt/module/hadoop-2.7.1/etc/hadoop
vim core-site.xml
在文件中添加如下配置
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.1/data/tmp</value>
</property>
- 配置hadoop-env.sh
vim hadoop-env.sh
在文件中添加
export JAVA_HOME=/opt/module/jdk1.8.0_11
- 配置hdfs-site.xml
vim hdfs-site.xml
在文件中添加
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/module/data/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/module/data/tmp/dfs/data</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:50070</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop03:50090</value>
</property>
- 配置yarn-env.sh
vim yarn-env.sh
在文件中添加
export JAVA_HOME=/opt/module/jdk1.8.0_11
- 配置yarn-site.xml
vim yarn-site.xml
在文件中添加
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
- 配置mapred-env.sh
在文件中添加
export JAVA_HOME=/opt/module/jdk1.8.0_11
- 配置mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
在文件中添加
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 配置slaves
vim slaves
在文件中添加需要存储数据的节点,这些节点中会启动DataNode服务和nodemanager服务
hadoop01
hadoop02
hadoop03
hadoop04
hadoop05
hadoop06
- 编写集群分发脚本
进入路径
cd /usr/local/bin
创建文件
touch xsync
编辑文件
vim xsync
在文件中添加,注意修改循环中的主机名称
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=2; host<7; host++)); do
echo ------------------- hadoop0$host --------------
rsync -rvl $pdir/$fname $user@hadoop0$host:$pdir
done
修改脚本执行权限
chmod 777 xsync
在集群中分发配置好的配置文件,如果带宽足够则可以将解压并配置好的hadoop进行分发,也可以分别在节点中解压安装后只分发配置文件
xsync /opt/module/hadoop-2.7.1
- 启动Hadoop
如果集群是第一次启动,需要格式化NameNode
hadoop namenode -format
NameNode不可格式化多次,格式化多次时重新生成的clusterID会和DataNode冲突。DataNode要与NameNode一致,需要在临时路径中更改
vim /opt/module/data/tmp/dfs/data/current/VERSION
如果NameNode与ResourceManager不在同一个服务器中,不能使用start-all启动,需要在ResourceManager所在机器上启动yarn
(如果ResourceManager所在节点中没有配置好slaves,则只会在本地启动NodeManager)
如果按照本文配置,则启动方法为
1.在hadoop01节点中启动HDFS
/opt/module/hadoop-2.7.1/sbin/start-dfs.sh
编写启动脚本(根据集群情况调整)
touch start_hdfs.sh
chmod 777 start_hdfs.sh
vim start_hdfs.sh
在文件中添加
#start hdfs
echo "hdfs is starting..."
ssh hadoop01 "/opt/module/hadoop-2.7.1/sbin/start-dfs.sh"
2.在hadoop02节点中启动yarn
/opt/module/hadoop-2.7.1/sbin/start-yarn.sh
编辑启动脚本(根据集群情况调整)
touch start_yarn.sh
chmod 777 start_yarn.sh
vim start_yarn.sh
在文件中添加
#start yarn
echo "yarn is starting..."
ssh hadoop02 "/opt/module/hadoop-2.7.1/sbin/start-yarn.sh"
- 编写jps脚本
创建文件
touch start_jps.sh
设置权限
chmod 777 start_jps.sh
创建软连接
--Java路径根据你个人安装的情况而定
sudo ln -s /opt/module/jdk1.8.0_11/bin/jps /usr/local/bin/jps
编辑文件内容
vim start_jps.sh
#!/bin/sh
#查看各个主机的java进程
for HOST in hadoop01 hadoop02 hadoop03 hadoop04 hadoop05 hadoop06
do
echo ===================== $HOST =======================
ssh $HOST "jps"
done
查看namenode
hadoop01:50070
4.安装Zookeeper
进入安装包路径
cd /opt/software
解压文件
tar -zxvf zookeeper-3.4.14.tar.gz -C /opt/module/
修改配置
- 将/opt/module/zookeeper-3.4.14/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;
mv zoo_sample.cfg zoo.cfg
- 打开zoo.cfg文件,修改dataDir路径:
修改数据存储路径配置
dataDir=/opt/module/zookeeper-3.4.14/zkData
增加如下配置
server.1=内网ip:2888:3888
server.2=内网ip:2888:3888
server.3=内网ip:2888:3888
server.4=内网ip:2888:3888
server.5=内网ip:2888:3888
server.6=内网ip:2888:3888
- 在/opt/module/zookeeper-3.4.14/这个目录上创建zkData文件夹;
mkdir zkData
- 在/opt/module/zookeeper-3.4.14/zkData目录下创建一个myid的文件;
- 编辑myid文件;
vim myid
在文件中添加对应编号,以hadoop01为例
1
- 拷贝配置好的zookeeper到其他机器上;
xsync zookeeper-3.4.14
在其他节点上修改myid文件中内容2、3、4等
- 启动Zookeeper
1.集群节点中分别启动Zookeeper
cd /opt/module/zookeeper-3.4.14
bin/zkServer.sh start
2.编辑脚本启动
创建文件
touch start_zookeeper.sh
设置权限
chmod 777 start_zookeeper.sh
编辑文件内容
vim start_zookeeper.sh
在文件中添加
#!/bin/sh
for host in hadoop01 hadoop02 hadoop03 hadoop04 hadoop05 hadoop06
do
echo "$host zookeeper is starting..."
ssh $host "source /etc/profile;/opt/module/zookeeper-3.4.14/bin/zkServer.sh start"
done
集群分别查看状态
/opt/module/zookeeper-3.4.14/bin/zkServer.sh status
编辑脚本查看状态
创建文件
touch status_zookeeper.sh
设置权限
chmod 777 status_zookeeper.sh
编辑文件内容
vim status_zookeeper.sh
在文件中添加
for host in hadoop01 hadoop02 hadoop03 hadoop04 hadoop05 hadoop06
do
echo "$host zookeeper status"
ssh $host "source /etc/profile; /opt/module/zookeeper-3.4.14/bin/zkServer.sh status"
done
集群中有一个leader,剩下的都是follower
5.安装HBase
进入安装包路径
cd /opt/software
解压文件
tar -zxvf hbase-2.0.0-bin.tar.gz -C /opt/module
修改配置
进入配置文件路径
cd /opt/module/hbase-2.0.0/conf/
- hbase-env.sh修改内容
打开文件
vim hbase-env.sh
添加如下内容
export JAVA_HOME=/opt/module/jdk1.8.0_11
export HBASE_MANAGES_ZK=false
- hbase-site.xml修改内容
打开文件
vim hbase-site.xml
添加如下内容
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/zookeeper-3.4.10/zkData</value>
</property>
- regionservers修改内容
打开文件
vim regionservers
添加如下内容
hdaoop01
hadoop02
hadoop03
hadoop04
hadoop05
hadoop06
文件中添加的节点将会启动regionserver服务,用于存储数据
- 添加软连接
ln -s /opt/module/hadoop-2.7.1/etc/hadoop/core-site.xml /opt/module/hbase-2.0.0/conf/core-site.xml
ln -s /opt/module/hadoop-2.7.1/etc/hadoop/hdfs-site.xml /opt/module/hbase-2.0.0/conf/hdfs-site.xml
- 分发HBase
xsync /opt/module/hbase-2.0.0
- 启动HBase
进入目录
cd /opt/module/hbase-2.0.0/bin
执行启动命令
./start-hbase.sh
至此Hadoop+HBase搭建完毕,查看服务
网页查看HBase
hadoop01:16010
6.安装Spark(standalone模式)
进入安装包路径
cd /opt/software
解压文件
tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module/
修改配置
进入配置文件路径
cd /opt/module/spark-2.1.1-bin-hadoop2.7/conf/
- 修改配置文件名称
mv slaves.template slaves
mv spark-env.sh.template spark-env.sh
打开文件 slaves
vim slaves
添加如下内容
hadoop01
hadoop02
hadoop03
hadoop04
hadoop05
hadoop06
打开文件 spark-env.sh
vim spark-env.sh
添加如下内容
SPARK_MASTER_HOST=hadoop01
SPARK_MASTER_PORT=7077
打开文件 spark-config.sh
vim spark-config.sh
添加如下内容
export JAVA_HOME=/opt/module/jdk1.8.0_11
分发spark包
xsync /opt/module/spark-2.1.1-bin-hadoop2.7
- 启动spark
进入目录
cd /opt/module/spark-2.1.1-bin-hadoop2.7/sbin
执行命令
./start-all.sh
网页查看spark
hadoop01:8080
- 配置spark历史服务
修改spark-default.conf.template名称
mv spark-defaults.conf.template spark-defaults.conf
修改spark-default.conf文件,开启Log
vim spark-defaults.conf
添加如下内容
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop01:9000/directory
建立目录
hadoop fs –mkdir /directory
修改spark-env.sh文件
vi spark-env.sh
添加如下配置
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080
-Dspark.history.retainedApplications=30
-Dspark.history.fs.logDirectory=hdfs://hadoop01:9000/directory"
分发配置文件
xsync spark-defaults.conf
xsync spark-env.sh
启动历史服务
./start-history-server.sh
执行案例,查看结果
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop01:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100
查看历史服务
hadoop01:18080
总结
- 阿里云的公网地址和私网地址在配置是要特别注意,地址有误会导致服务间无法通信
- 阿里云安全组中需要开启服务需要的端口,端口未开启会导致服务无法工作
- 网页查看时也需要在安全组中开启端口