阿里云学生机搭建spark、hadoop集群(踩坑之路)

服务器:三台阿里云学生机(三个账号,都在华南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










你可能感兴趣的:(spark学习)