Spark +hadoop 完全分布式搭建 以及常见问题



所用信息版本:

主节点1台: ubuntu 16.04 desktop . 

从节点2台: ubuntu 14.04 server

hadoop 2.7.4

spark 2.2.0

 java 1.8

scala 2.12.3

(搭建过程 也是linux 命令熟悉过程)

先改下 三台主机名称: 主节点; server1 ,从节点slave1,slave2  


一、修改hosts文件

在主节点,就是第一台主机的命令行下;

vim /etc/hosts


在原文件的基础上加上:

127.0.0.1               localhost
192.168.198.100         server1
192.168.198.201         slave1
192.168.198.202         slave2

注意,第一个千万不能去。否者ping不通自己。

二、ssh互信(免密码登录)

我配置的是用户是yzk1,家目录应该是/home/zyk1/

复制代码
#在主节点执行下面的命令:
ssh-keygen
-t rsa -P '' #一路回车直到生成公钥
scp ~/.ssh/id_rsa.pub yzk1@slave1:/home/yzk1/.ssh/id_rsa.pub.master #从master节点拷贝id_rsa.pub到slave主机上,并且改名为id_rsa.pub.master scp ~/.ssh/id_rsa.pub yzk1@slave2:/home/yzk1/.ssh/id_rsa.pub.master #同
scp /etc/hosts yzk1@slave1:/etc/hosts #统一hosts文件,让几个主机能通过host名字来识别彼此
scp /etc/hosts yzk1@slave2:/etc/hosts #统一hosts文件,让几个主机能通过host名字来识别彼此

#在对应的主机下执行如下命令:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #master主机
cat ~/.ssh/id_rsa.pub.master >> ~/.ssh/authorized_keys #slave主机
复制代码

这样server1主机就可以无密码登录到其他主机,这样子在运行server1上的启动脚本时和使用scp命令时候,就可以不用输入密码了。

三、安装基础环境(JAVA和SCALA环境)

1安装JAVA 1.8

官网上下载 jdk包 看清对应版本。

在/usr下 :

makdir java

解压jdk放在/usr/java 下 


#增加JAVA_HOME
vim etc
/profile
#增加如下行: #Java home export JAVA_HOME=/usr/java/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar


#刷新配置:
source /etc/profile #当然reboot也是可以的

配置从主机的java环境

#使用scp命令进行拷贝,将安装包拷过去,然后tar zxvf 解压
scp  主节点压缩包 从节点位置
#其他的步骤如主节点配置一样

2安装 scala

类似安装java ,官方网站下载,并解压安装即可。再配置路径

export SCALA_HOME=/usr/scala/scala-2.12.3
export PATH=$PATH:${SCALA_HOME}/bin

四、Hadoop2.7.4完全分布式搭建

主节点:

1.去官方网站下载压缩包:https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.7.4/

2.解压并移动至相应目录

我的习惯是将软件放置/usr目录下:

tar -xvf hadoop-2.7.3.tar.gz
mv hadoop-2.7.3 /usr/hadoop

3.修改相应的配置文件:

(1)/etc/profile:

export HADOOP_HOME=/usr/hadoop/hadoop-2.7.4
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

(2)$HADOOP_HOME/etc/hadoop/hadoop-env.sh

修改JAVA_HOME 如下:

export JAVA_HOME=/usr/java/jdk1.8.0_144

(3)$HADOOP_HOME/etc/hadoop/slaves

slave1
slave2

(4)$HADOOP_HOME/etc/hadoop/core-site.xml(在$HADOOP_HOME下新建tmp文件夹)


       
                fs.defaultFS
                hdfs://server1:9000
       

       
                io.file.buffer.size
                 131072
      

       
                hadoop.tmp.dir
                /usr/hadoop/hadoop-2.7.4/tmp
       



5)$HADOOP_HOME/etc/hadoop/hdfs-site.xml  (在$HADOOP_HOME下新建hdfs文件夹,在该文件下新建data、name文件夹))


   
        dfs.namenode.secondary.http-address
        server1:9001
   

   
      dfs.replication
      2
   

   
      dfs.namenode.name.dir
      /usr/hadoop/hadoop-2.7.4/hdfs/name
   

   
      dfs.datanode.data.dir
      /usr/hadoop/hadoop-2.7.4/hdfs/data
   

        
                 dfs.webhdfs.enabled
                  true
        

(6)$HADOOP_HOME/etc/hadoop/mapred-site.xml

复制template,生成xml:

cp mapred-site.xml.template mapred-site.xml

内容:


 
    mapreduce.framework.name
    yarn
 

 
          mapreduce.jobhistory.address
          server1:10020
 

 
           mapreduce.jobhistory.webapp.address
          server1:19888
 


(7)$HADOOP_HOME/etc/hadoop/yarn-site.xml



       
                 yarn.nodemanager.aux-services
                 mapreduce_shuffle
        

       

          yarn.nodemanager.aux-services.mapreduce.shuffle.class 

org.apache.hadoop.mapred.ShuffleHandler
       

       
                 yarn.resourcemanager.address
                server1:8032
      

    
          yarn.resourcemanager.scheduler.address
          server1:8030
     

    
         yarn.resourcemanager.resource-tracker.address
         server1:8031
    

    
         yarn.resourcemanager.admin.address
         server1:8033
    

    
         yarn.resourcemanager.webapp.address
         server1:8088
    

                                              
                yarn.nodemanager.resource.memory-mb  #很重要,否者运行时候可能卡住。2.7.3版本之后至少要1.5G
                2048                                                        
       

   
        yarn.nodemanager.resource.cpu-vcores
        1
   



再启动之前我们需要

格式化一下namenode

hadoop namenode -format


再从节点配置:

将配置好的hadoop  scp -r到从节点,(注意最好和主节点目录完全一致(我都是放在/usr/hadoop/下),这样子不用修改配置文件) 然后配置/etc/profile ,最后各自source profile


测试HADOOP 安装成功:

启动 :

$HADOOP_HOME/sbin/start-all.sh

输入jps:

5780 ResourceManager
5413 NameNode
5624 SecondaryNameNode
8221 Jps

从节点:

nodemanager

datanode

jps

这样子基本正常

也可以通过web http://server1:50070 查看状态

测试样例:(其中wordcount.txt为本地文件)

hadoop fs -mkdir -p /Hadoop/Input
hadoop fs -put wordcount.txt /Hadoop/Input
hadoop jar ¥HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /Hadoop/Input /Hadoop/Output

运行成功后查看 output下文件。

五、Spark2.2.0完全分布式环境搭建:

主节点:

1 官方网站下载:

http://spark.apache.org/downloads.html


2.解压并移动至相应的文件夹(usr/下新建spark);

tar -xvf spark-2.2.0-bin-hadoop2.7.tgz
mv spark-2.2.0-bin-hadoop2.7 /usr/spark

3.修改相应的配置文件:

(1)/etc/profie

export SPARK_HOME=/usr/spark/spark-2.2.0-bin-hadoop2.7
export PATH=$PATH:${SPARK_HOME}/bin

(2)$SPARK_HOME/conf/spark-env.sh

cp spark-env.sh.template spark-env.sh
#配置内容如下:
export SCALA_HOME=/usr/scala/scala-2.12.3
export JAVA_HOME=/usr/java/jdk1.8.0_144
export SPARK_MASTER_IP=server1
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/usr/hadoop/hadoop-2.7.4/etc/hadoop
 
  

(3)$SPARK_HOME/conf/slaves

cp slaves.template slaves

配置内容如下

server1

slave1

slave2


将spark包scp -r 到从节点 (注意路径一致) ,然后配置修改/etc/profile,增加spark相关的配置,如server1节点一样

启动

$SPARK-HOME/sbin/start-all.sh

2.测试spark 

为了避免麻烦这里我们使用spark-shell,做一个简单的worcount的测试

用于在测试hadoop的时候我们已经在hdfs上存储了测试的源文件,下面就是直接拿来用就好了!

spark-shell
 
   
 
   
 
  
 
  
 
  
 
  
val file=sc.textFile("hdfs://server1:9000/Hadoop/Input/wordcount.txt")
val rdd = file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
rdd.collect()
rdd.foreach(println)

成功。(也可以通过web:  http://server1:8080/)查看状态


hadoop搭建过程常见错误:


1.从节点 datanode 无法启动 /启动立即停止

(根据查看log)可能原因:
  1. xml配置文件设置了 data.dir ,name.dir ,     datanode namenode ID不一致 : 由于 主节点 执行了 namenode -format清空了 data , name目录下文件 ,  而从节点的对应文件 还保留, 所以不一致。解决方法:手动清空从节点中的data ,name 文件夹下的所有文件。然后重新format 启动
  2. hosts配置错误, 127.0.0.1 localhost 必须正确!

2 nodemanager 从节点没启动/启动后立即停止:


这个必须起来。否者会卡运行mapreduce时候卡住:
网页上状态:YarnApplicationState:     ACCEPTED: waiting for AM container to be allocated, launched and register with RM.

解决方法:hadoop 2.7.3之后 这个值至少要1536 
(yarn-site.xml)
         yarn.nodemanager.resource.memory-mb
                2048
       

   
        yarn.nodemanager.resource.cpu-vcores
        1















你可能感兴趣的:(hadoop,spark,ubuntu)