服务器:三台阿里云学生机(三个账号,都在华南1c)
系统:ubuntu
一、通过外网ip登录服务器
需要修改安全组,出入方向都一样,都加入这两条。为何加这两条后续慢慢说明。
第一条安全组功能之一就是为了能够本地ssh到服务器。(网上第一条几乎所有的端口配置都是22/22,后续解释为何改成1/65000)
授权策略 |
协议类型 |
端口范围 |
授权类型 |
授权对象 |
描述 |
优先级 |
创建时间 |
操作 |
允许 |
自定义 TCP |
1/65000 |
地址段访问 |
0.0.0.0/0
|
all |
1 |
2018-04-04 14:24:48 |
修改描述
|
克隆
|
删除
|
允许 |
全部 ICMP |
-1/-1 |
地址段访问 |
0.0.0.0/0
|
- |
1 |
2018-04-02 15:28:49 |
修改描述
|
克隆
|
删除
|
然后直接ssh root@公网IP,输入密码后即可登录。
二、修改hostName、hosts、关闭防火墙
1、在三台服务器上关闭防火墙
sudo ufw disable
关闭之后可以用sudo ufw status看一下防火墙状态
2、vi /etc/hostName
把localhost改成想要改成的主机名
把三台分别改成master,slave1,slave2
3、vi /etc/hosts
注意这里用公网IP后续起Hadoop是起不来的,必须要用私网IP.否则报如下的错:
2018-04-04 14:27:37,876 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.net.BindException: Problem binding to [master:9000] java.net.BindException: Cannot assign requested address; For more details see: http://wiki.apache.org/hadoop/BindException
添加:
私网IP1 slave1
私网IP2 slave2
私网IP3 master
删除:
127.0.0.1 localhost
不清楚的这里看一下,icmp协议用于在IP主机、路由器之间传递控制消息。控制消息指网络通不通、主机是否可达、路由是否可用等网络本身的消息(百度的)。ping就是用的icmp协议,所以上面安全组需要添加第二条。
但改完hosts文件之后发现内网IP竟然互相ping不通。
因为三台服务器是在不同的账号下,且VPC不同,所以需要通过高速通道互相连通内网。高速通道建立,目前到2018-10-01之前同区域建立高速通道是免费的。阿里云高速通道配置文档:https://help.aliyun.com/document_detail/44843.html?spm=a2c4g.11174283.6.552.pWj1LL
这时候,又是一个大坑了。参考于https://blog.csdn.net/ymybxx/article/details/78324493
解决完之后就可以ping通内网了。
三、ssh无密登录
sudo
apt-get
install
openssh-
server
sudo
apt-
get update
ssh-keygen
-t rsa -P
""//提示选择目录时,按 Enter 键,那么 id_rsa 和 id_rsa.pub 会生成到 root/.ssh 目录下
在三台服务器上执行:cd root/.ssh,cat id_rsa.pub>>authorized_keys,将 id_rsa.pub 追加到 authorized_keys。
将 slave1 和 slave2 的 id_rsa.pub 拷贝到 master(传输文件可用 scp),并将其内容追加到 master 的 root/.ssh/authorized_keys 中。同理,将 slave1 和 master 的 id_rsa.pub 追加到 slave2 的 authorized_keys,将 slave2 和 master 的 id_rsa.pub 追加到 slave1 的 authorized_keys。
最后验证互相无密登录:
ssh master
ssh slave1
ssh slave2
四、安装jdk
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
安装目录在/usr/lib/jvm/java-8-openjdk-amd64
vim /etc/profile
添加
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=${JAVA_HOME}/bin:$PATH
保存完退出
source /etc/profile
java -version 验证
五、安装Scala
本人所有包都在/root/sparkFiles下
下载scala-2.12.5.tgz
tar xvzf scala-2.12.5.tgz
解压到sparkFiles下,改名为scala-2.12.5
Vim /etc/profile
添加:
export SCALA_HOME=/root/sparkFiles/scala-2.12.5
export PATH=$SCALA_HOME/bin:$PATH
保存完退出
source /etc/profile
六、安装Hadoop
下载hadoop-2.7.5.tar.gz
tar xvzf hadoop-2.7.5.tar.gz
解压到sparkFiles下,改名为hadoop-2.7.5
Vim /etc/profile
添加:
export HADOOP_HOME=/root/sparkFiles/hadoop-2.7.5
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_ROOT_LOGGER=INFO,console
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib”
保存完退出
source /etc/profile
修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
修改$HADOOP_HOME/etc/hadoop/slaves,将原来的localhost删除,改成如下内容:
slave1
slave2
修改$HADOOP_HOME/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://master:9000
io.file.buffer.size
131072
hadoop.tmp.dir
/root/sparkFiles/hadoop-2.7.5/tmp
修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml
dfs.namenode.secondary.http-address
master:50090
dfs.replication
2
dfs.namenode.name.dir
file:/root/sparkFiles/hadoop-2.7.5/hdfs/name
dfs.datanode.data.dir
file:/root/sparkFiles/hadoop-2.7.5/hdfs/data
复制template,生成xml,命令如下:
cp mapred-site.xml.template mapred-site.xml
修改$HADOOP_HOME/etc/hadoop/mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
master:10020
mapreduce.jobhistory.address
master:19888
修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.address
master:8032
yarn.resourcemanager.scheduler.address
master:8030
yarn.resourcemanager.resource-tracker.address
master:8031
yarn.resourcemanager.admin.address
master:8033
yarn.resourcemanager.webapp.address
master:8088
复制master节点的hadoop文件夹到slave1和slave2上。
scp -r /sparkFiles/hadoop-2.7.5 root@slave1:/root/sparkFiles
scp -r /sparkFiles/hadoop-2.7.5 root@slave2:/root/sparkFiles
在slave1和slave2上分别修改/etc/profile,过程同master一样。
在master节点启动集群,启动之前格式化一下namenode:
cd /sparkFiles//hadoop-2.7.5/sbin
hadoop namenode -format
启动
./start-all.sh
查看集群是否启动成功:
jps
master显示:
SecondaryNameNode
ResourceManager
NameNode
slave显示:
NodeManager
DataNode
注:在启动之后,在本地用公网IP加8088打不开,查看slave日志,发现报错:
WARNorg.apache.hadoop.hdfs.server.datanode.DataNode:Problem connecting to server:master/192….:9000
这就是为什么安全组第一条这样配1/65000的原因了,因为slave不能访问master的Hadoop需要的各种默认端口,如果只是按网上配的22/22,就只能访问22端口,就会报错。1/65000就包含了Hadoop的所有默认端口,这样slave就能访问master所需的端口了。
本地可用公网ip加8088端口查看UI验证
七、安装spark
下载spark-2.2.0-bin-hadoop2.7.tgz
tar xvzf spark-2.2.0-bin-hadoop2.7.tgz
解压到sparkFiles下,改名为spark-2.2.0
Vim /etc/profile
添加:
export SPARK_HOME=/root/sparkFiles/spark-2.2.0
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
保存完退出
source /etc/profile
mv spark-env.sh.template spark-env.sh
mv log4j.properties.template log4j.properties
mv slaves.template slaves
在 spark-env.sh 结尾添加
export SCALA_HOME=/root/sparkFiles/scala-2.12.5
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_CONF_DIR=/root/sparkFiles/hadoop-2.7.5/etc/hadoop
修改 slaves 文件
master
slave1
slave2
将配置信息复制到其它服务器
cd /root/sparkFiles/spark-2.2.0/sbin
./start.all.sh
jps命令看master下是否出现master和worker,在 slave节点下是否出现 worker
运行 Spark 实例
run-example SparkPi 10
最后本地访问master的8080端口查看
参考资料:https://www.cnblogs.com/NaughtyBaby/p/5402569.html、https://yq.aliyun.com/articles/60309?spm=a2c4e.11154837.569296.66.4e2a5c2fyk2aUB、https://www.cnblogs.com/zengxiaoliang/p/6478859.html、https://blog.csdn.net/ymybxx/article/details/78324493