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

来源:互联网 发布:德国骨科 知乎 编辑:程序博客网 时间:2024/06/06 19:17


所用信息版本:

主节点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               localhost192.168.198.100         server1192.168.198.201         slave1192.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.masterscp ~/.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 homeexport JAVA_HOME=/usr/java/jdk1.8.0_144export 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.gzmv hadoop-2.7.3 /usr/hadoop

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

(1)/etc/profile:

export HADOOP_HOME=/usr/hadoop/hadoop-2.7.4export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbinexport 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

slave1slave2

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

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://server1:9000</value>
        </property>
        <property>
                <name>io.file.buffer.size</name>
                 <value>131072</value>
       </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/usr/hadoop/hadoop-2.7.4/tmp</value>
        </property>
</configuration>

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

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>server1:9001</value>
    </property>
    <property>
      <name>dfs.replication</name>
      <value>2</value>
    </property>
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/usr/hadoop/hadoop-2.7.4/hdfs/name</value>
    </property>
    <property>
      <name>dfs.datanode.data.dir</name>
      <value>/usr/hadoop/hadoop-2.7.4/hdfs/data</value>
    </property>

         <property>
                 <name>dfs.webhdfs.enabled</name>
                  <value>true</value>
         </property>

</configuration>

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

复制template,生成xml:

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

内容:

<configuration>
 <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

  <property>
          <name>mapreduce.jobhistory.address</name>
          <value>server1:10020</value>
  </property>

  <property>
           <name>mapreduce.jobhistory.webapp.address</name>
          <value>server1:19888</value>
  </property>

</configuration>


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

<configuration>
<!-- Site specific YARN configuration properties -->
        <property>
                 <name>yarn.nodemanager.aux-services</name>
                 <value>mapreduce_shuffle</value>
         </property>

        <property>

          <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 

<value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>

        <property>
                 <name>yarn.resourcemanager.address</name>
                <value>server1:8032</value>
       </property>

     <property>
          <name>yarn.resourcemanager.scheduler.address</name>
          <value>server1:8030</value>
      </property>

     <property>
         <name>yarn.resourcemanager.resource-tracker.address</name>
         <value>server1:8031</value>
     </property>

     <property>
         <name>yarn.resourcemanager.admin.address</name>
         <value>server1:8033</value>
     </property>

     <property>
         <name>yarn.resourcemanager.webapp.address</name>
         <value>server1:8088</value>
     </property>

        <property >                                      
                <name>yarn.nodemanager.resource.memory-mb</name>  #很重要,否者运行时候可能卡住。2.7.3版本之后至少要1.5G
                <value>2048</value>                                                        
        </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>1</value>
    </property>
</configuration>

再启动之前我们需要

格式化一下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/Inputhadoop fs -put wordcount.txt /Hadoop/Inputhadoop 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.tgzmv 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.3export JAVA_HOME=/usr/java/jdk1.8.0_144export SPARK_MASTER_IP=server1export SPARK_WORKER_MEMORY=1gexport 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)
         <name>yarn.nodemanager.resource.memory-mb</name>
                <value>2048</value>
        </property>

    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>1</value>














原创粉丝点击