搭建Spark集群

创建hadoop用户

#添加用户hadoop
adduser hadoop

这个过程中需要输入密码两次

Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

看到最后的字样就代表新建hadoop用户成功.
如果需要删除用户,使用下面的命令

userdel hadoop

把hadoop用户加入sudo用户组,编辑/etc/sudoers文件

sudo vi /etc/sudoers

然后在

root ALL=(ALL) ALL

后面加入

hadoop ALL=(ALL) ALL

注: 两个用户创建命令之间的区别
adduser: 会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。

下载所需要用到的工具包,并上传到hadoop用户目录

需要用到的工具包包括java,hadoop,scala,spark,.
这里我使用的各工具包的版本为

名称 版本号
Java jdk-8u161-linux-x64.tar.gz
hadoop hadoop-3.0.0.tar.gz
scala scala-2.11.8.tgz
spark spark-2.3.0-bin-hadoop2.7.tgz

这里我们先在其中一台机器上安装所有的工具包,然后使用scp命令将配置好的工具包同步到其余的服务器.
为了方便,我这里是先在windows机器上用FDM把所有的软件工具包下载好,然后使用ftp推送到服务器上的,由于是内网环境,所有上传带宽还不错,很快就上传完成了!

具体如下:


注解:类似的工具有rsync;scp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。rsync比scp会快一点,但当小文件多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。

安装java

:包括下面的spark,hadoopscala我都放在/usr/local目录,这是个人习惯问题,你也可以放在其他目录

解压并移动至/us/local目录

tar -zxvf jdk-8u161-linux-x64.tar.gz
mv jdk1.8.0_161 /usr/local

设置环境变量

export JAVA_HOME=/usr/local/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

安装hadoop

解压并移动至/us/local目录

tar -zxvf hadoop-3.0.0.tar.gz
mv hadoop-3.0.0 /usr/local

设置环境变量

export HADOOP_HOME=/usr/local/hadoop-3.0.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH

安装scala

解压并移动至/us/local目录

tar -zxvf scala-2.11.8.tgz
mv scala-2.11.8 /usr/local

设置环境变量

export SCALA_HOME=/usr/local/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH

安装spark

解压并移动至/us/local目录

tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz
mv spark-2.3.0-bin-hadoop2.7 /usr/local

设置环境变量

export SPARK_HOME=/usr/local/spark-2.3.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH

复制所有的环境变量到~/.profile

export JAVA_HOME=/usr/local/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export SCALA_HOME=/usr/local/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
export SPARK_HOME=/usr/local/spark-2.3.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop-3.0.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH

然后执行

source ~/.profile

:如果这里不配置的话,在hadoop3.0.0下面会出现以下的错误


虽然里面的JAVA_HOME /usr/local/jdk-8u161-linux-x64这个是因为我设错了,就因为这个我还排查了大半天,结果在这里还用上了,汗.....

报错:pc: ERROR: JAVA_HOME is not set and could not be found.

在hadoop-env.sh中,再显示地重新声明一遍JAVA_HOME,添加:

export JAVA_HOME=/usr/local/jdk1.8.0_161

配置集群服务器参数

我们这里用到的是三台服务器,一台master,两台slave.三台机器的名称和ip如下:

主机名称 ip地址
master 10.141.211.80
slave01 10.141.211.81
slave02 10.141.211.82

三台电脑主机的用户名均为hadoop.
三台机器可以ping双方的ip来测试三台电脑的连通性。
在master节点主机上的Shell中运行如下命令,测试能否连接到slave01节点主机

# -c 后面接的参数代表ping操作执行的次数
ping 10.141.211.81 -c 3

如果出现如下图,说明连接成功


为了更好的在Shell中区分三台主机,修改其显示的主机名,执行如下命令

sudo vim /etc/hostname

master的/etc/hostname添加如下配置:

master

同样slave01的/etc/hostname添加如下配置:

slave01

同样slave02的/etc/hostname添加如下配置:

slave02

:如果已经hostname文件中已经存在名称,则删除原有的名称

重启三台电脑,重启后在终端Shell中才会看到机器名的变化,如下图:



修改三台机器的/etc/hosts文件,添加同样的配置:

sudo vim /etc/hosts

配置如下:

127.0.0.1 localhost master
127.0.1.1 master #相应的改为slave01,或slave02 
10.141.211.80 master
10.141.211.81 slave01
10.141.211.82 slave02

: 127.0.0.1 localhost master这里增加master是为了这里是为了解决sudo: unable to resolve host slave01: Connection refused

配置ssh免密码登陆

先测试一下是否可以通过ssh登录本机

ssh localhsot

如果输入密码之后,登录成功,则代表可行,直接下一步配置免密码即可.否则,需要下载openssh-server

#通过apt下载ssh-verser
sudo apt install openssh-server -y

然后重复上面的验证过程.
接下来配置免密码登录

  • ssh-keygen创建公钥
ssh-keygen -t rsa

输入后,会提示创建.ssh/id_rsa、id_rsa.pub的文件,其中第一个为密钥,第二个为公钥。过程中会要求输入密码,为了ssh访问过程无须密码,可以直接回车 。

  • 复制公钥到authrized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在保证了三台主机电脑都能连接到本地localhost后,还需要让master主机免密码登录slave01和slave02主机。在master执行如下命令,将master的id_rsa.pub传送给两台slave主机。

scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@slave02:/home/hadoop/

在slave01,slave02主机上分别运行ls命令

ls ~

可以看到slave01、slave02主机分别接收到id_rsa.pub文件



接着在slave01、slave02主机上将master的公钥加入各自的节点上,在slave01和slave02执行如下命令:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub

如果master主机和slave01、slave02主机的用户名一样,那么在master主机上直接执行如下测试命令,即可让master主机免密码登录slave01、slave02主机。

ssh slave01

如果master主机和slave01主机的用户名不一样,还需要在master修改~/.ssh/config文件,如果没有此文件,自己创建文件。

Host master
  user Ruanrc
Host slave01
  user hadoop

然后master主机再执行免密码登录:

ssh slave01

Hadoop集群配置

修改master主机修改Hadoop如下配置文件,这些配置文件都位于/usr/local/hadoop-3.0.0/etc/hadoop目录下。

workers(hadoop3.0.0中将slaves文件改为了workers文件)
这里把DataNode的主机名写入该文件,每行一个。这里让master节点主机仅作为NameNode使用。

slave01
slave02

:这里需要删除workers文件中原来的localhost

core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop-3.0.0/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
  <property>
      <name>dfs.replication</name>
      <value>3</value>
  </property>
   <property> 
      <name>dfs.name.dir</name> 
      <value>file:/home/hadoop/hadoop/namenode</value> 
   </property> 
   <property> 
      <name>dfs.data.dir</name>
      <value>file:/home/hadoop/hadoop/datanode</value > 
   </property>

  </configuration>

mapred-site.xml

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

yarn-site.xml

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

:以上修改的文件需要在所有slave服务器上同步,使用前面的scp命令即可

同步配置文件

scp etc/hadoop/workers hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/workers  hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/core-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/core-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/hdfs-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/hdfs-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/mapred-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/mapred-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

scp etc/hadoop/yarn-site.xml hadoop@slave01:/usr/local/hadoop-3.0.0/etc/hadoop
scp etc/hadoop/yarn-site.xml hadoop@slave02:/usr/local/hadoop-3.0.0/etc/hadoop

启动hadoop集群

启动hadoop集群
在master主机上执行如下命令:

cd /usr/local/hadoop-3.0.0
hdfs namenode -format
start-all.sh

运行后,在master,slave01,slave02运行jps命令,查看:

jps

master运行jps后,如下图:



slave01运行jps后,如下图:



slave02运行jps后,如下图:

从上面的截图不难看出,master节点正常启动了namenode,slave01和slave02节点正常启动了datanode

spark集群配置

把spark作为master节点,两个slave01,slave02作为worker节点
在master节点主机上进行如下操作:

  1. 编辑slaves
    将slaves.template copy到slaves
cd $SPARK_HOME/conf
cp slaves.template slaves

slaves文件设置Worker节点。编辑slaves内容,把默认内容localhost替换成如下内容:

slave01
slave02
  1. 编辑spark-env.sh
    将 spark-env.sh.template 拷贝到 spark-env.sh
cp spark-env.sh.template spark-env.sh

编辑spark-env.sh,添加以下内容

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.0.0/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/hadoop-3.0.0/etc/hadoop
export SPARK_MASTER_IP=10.141.211.80
#参考我的另一篇文章,缺少该配置,会找不到worker节点
export SPARK_MASTER_HOST=10.141.211.80

SPARK_MASTER_IP 指定 Spark 集群 master 节点的 IP 地址;
配置好后,将master主机上的/usr/local/spark文件夹复制到各个节点上。
scp大法好!!!

启动spark集群

启动spark集群前,要先启动Hadoop集群。在master节点主机上运行如下命令:

$HADOOP_HOME/sbin/start-all.sh

启动spark集群

  1. 启动master节点
    在master节点主机上运行如下命令:
$SPARK_HOME/sbin/start-master.sh
  1. 启动所有slave节点
    在master节点主机上运行如下命令:
$SPARK_HOME/sbin/start-slaves.sh

报错:Spark 启动时,提示 JAVA_HOME not set
在sbin目录下的spark-config.sh 中添加对应的jdk 路径

export JAVA_HOME=/usr/local/jdk1.8.0_161

分别slave01、slave02节点上运行jps命令,可以看到多了个Worker进程



输入http://10.141.211.80:7077/即可查看网页端
40)

参考教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,428评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,024评论 3 413
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,285评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,548评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,328评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,878评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,971评论 3 439
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,098评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,616评论 1 331
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,554评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,725评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,243评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,971评论 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,361评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,613评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,339评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,695评论 2 370

推荐阅读更多精彩内容

  • 最近在学习大数据技术,朋友叫我直接学习Spark,英雄不问出处,菜鸟不问对错,于是我就开始了Spark学习。 为什...
    Plokmijn阅读 26,591评论 6 26
  • tidb1.0开始支持spark,有个组件tiSpark,不过目前只支持spark2.1版本。所以为了启用tiSp...
    darkranger阅读 702评论 0 2
  • --------"道路是曲折的,前途是光明的。"最近又涉及到了hadoop以及spark的安装,之前课题设计中有要...
    九七学姐阅读 3,062评论 3 5
  • 今天在微博上看到转发与2016.8.8日的微博,里面介绍的是《转眼》这首歌的创作灵感,本来应该叫《终章》,但是经过...
    Ashin你要往哪里去阅读 2,354评论 0 2
  • 亲爱的女儿,今晚回家到房间里以后,你拿着一个小纸盒晃啊晃,里面是一个粉色花纹的跳跳球。我看着你,不动声色,因为我知...
    小怪物_a3bf阅读 202评论 0 4