Ubuntu16.04上Hadoop2.7.3+Spark2.0.2完全分布式集群搭建

从3月22日到4月1日,整整十一天,hadoop搭建从入门到放弃,终于在愚人节完成了【开心.jpg】——Happy Fool's Day

 

目录

1、环境搭建

虚拟机:

系统:

节点:

2、相关软件版本

3、主要参考文章

3.1 Hadoop2.7.3完全分布式集群搭建和测试(如果一切再重来)

3.2 The authenticity of host 'localhost (127.0.0.1)' can't be established的处理方法( stpeace)

3.3 linux下如何查询jdk的安装路径(stpeace)

3.4 Vmware虚拟机设置静态IP地址(麦兜日常学习笔记)

3.5 在Ubuntu下搭建Spark群集

4、搭建步骤

4.1 安装虚拟机

4.2 修改hostname与hosts文件

4.3 创建hadoop用户与hadoop用户

4.4 配置虚拟机网络,使虚拟机系统之间以及和host主机之间可以通过相互ping通

4.5 配置Java

4.6 配置ssh

4.6.1 安装ssh

4.6.2 验证ssh是否成功安装输入

4.6.3 生成秘钥对

4.6.4 导入authorized_keys

4.6.5 把master上的authorized_keys拷贝到其他主机的相应目录下,实现远程无密码登录

4.6.6 修改各台主机上authorized_keys文件的权限

4.6.7 完成之后,在master上执行下面操作,检查免密码登录是否成功。

4.7 配置hadoop(现在master上配置完,然后发给子节点)

4.7.1 直接通过wget命令安在线下载

4.7.2 解包移动

4.7.3 新建文件夹

4.7.4 配置文件(所有配置文件都在/usr/hadoop/etc/hadoop目录中)

4.7.7 将hadoop传输到子节点的usr/hadoop目录

4.8 配置环境变量

4.8.1 每个子节点都要配置以下一样的环境变量

4.8.2 启动hadoop

4.8.3 查看hadoop是否完全启动

4.9 配置Scala

4.9.1 安装Scala

4.9.2 查看Scala版本

4.9.3 查看Scala路径

4.10 配置spark

4.10.1 下载Spark 2.0.2

4.10.2 下载完毕后解压文件

4.10.3 将解压的文件移动到hadoop用户下

4.10.4 进入spark-2.0.2-bin-hadoop2.7文件夹下的 conf 文件夹,里面有个spark-env.sh.template 文件,是spark环境变量设置的目标,我们可以复制一个出来

4.10.5 接下来设置slaves文件

4.10.6 启动Spark

5、测试

5.1 启动Hadoop群集与Spark群集

5.1.1启动hadoop

5.1.2启动spark

5.1.3检查能否通过浏览器访问webapp


1、环境搭建

虚拟机:

VMware Worstation 15 (https://www.baidu.com/link?url=lUpoe9j2Gpnpg6pKsyG2saoSRYNZQuJHCEd8IozSFG8eiaf323AtDxMK1VCsFXVFQmWwOj6GLpVKq9yJLfXKwEKwzqP8kSv0svFCqiTwWPm&wd=&eqid=cbcfe22f00000b54000000025c9ed9a8

系统:

Ubuntu-16.04.6-server-amd64(http://releases.ubuntu.com/

节点:

Master:192.168.115.135

Slave1:192.168.115.136

Slave2:192.168.115.137

2、相关软件版本

以下软件都不需要单独下载,直接使用ubuntu内的命令下载

Hadoop:hadoop-2.7.3

Spark:spark-2.0.2-bin-hadoop2.7

Java:java(1.8.0_191)

Scala:scala 2.11.6

 

3、主要参考文章

3.1 Hadoop2.7.3完全分布式集群搭建和测试(如果一切再重来)

3.2 The authenticity of host 'localhost (127.0.0.1)' can't be established的处理方法( stpeace)

3.3 linux下如何查询jdk的安装路径(stpeace)

3.4 Vmware虚拟机设置静态IP地址(麦兜日常学习笔记)

3.5 在Ubuntu下搭建Spark群集

4、搭建步骤

4.1 安装虚拟机

为了给每个节点配置静态ip地址,安装ubuntu系统前需要先安装Vmware Workstation并配置好网络适配器


进入虚拟网络编辑器

选择NAT模式,勾选“将主机虚拟适配器链接到此网络”,取消“使用本地DHCP服务将IP地址分配给虚拟机”,同时在该页面可以看到子网ip和子网掩码
点击NAT设置,可以看到网关IP,一般不做修改

下面这一步很重要,影响到能否使用主机web访问虚拟机端口

检查宿主机VM8 网卡设置,打开网络和共享中心→ 更改适配器设置→,在VMware Network Adapter VMnet8上单击右键,选择属性按钮打开属性对话框。  

安装三个系统(master、slave1、slave2)以master为例,slave安装方法相同
新建虚拟机,选择提前下载好的ubuntu-16.04.6-server-amd64进行安装,命名为master,为了方便,密码都设为123456.

之后选项可以直接点下一步,直至完成,也可以根据硬盘容量更换存储地址。
系统开始正式安装,由于是静态配置ip地址,会进入如下界面:

按回车<Enter>确认

选第三项
输入要设置的ip地址

输入子网掩码(在虚拟网络编辑器可以查看)

输入网关(在虚拟网络编辑器可以查看)

DNS可以设置成8.8.8.8

4.2 修改hostname与hosts文件

以master上机器为例,打开终端

可以先查看一下目前的ip是不是我设置的那样

~$ ifconfig  #查看ip信息

执行如下的操作

把hostname修改成master:

~$ sudo vi /etc/hostname #打开hostname

将ubuntu改成master

把hosts修改成如下所示的样子:

~$ sudo vi /etc/hosts      #打开hosts文件

同样地,在slave1和slave2机器上做相似的操作,分别更改主机名为slave1和slave2,然后把hosts文件更改和master一样。

4.3 创建hadoop用户与hadoop用户

# 创建hadoop组
~$ sudo addgroup hadoop
# 在hadoop组创建hadoop用户
~$ sudo adduser -ingroup hadoop hadoop

# 给hadoop用户添加权限
~$ sudo vi /etc/sudoers  #打开sudoers文件

在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL,给hadoop用户赋予root用户同样的权限(这里一般会遇到即使用sudo命令打开依然没有修改权限的情况,用<:wq!>指令强制写入然后关闭)

接下来各台主机都用hadoop账户登录进行操作( su + <主机名> )

4.4 配置虚拟机网络,使虚拟机系统之间以及和host主机之间可以通过相互ping通

如果前面安装系统的时候已经选择了NAT模式,那么这里只需要使用 ping + <主机名>指令进行测试即可。分别在3台机器上都进行测试,出现以下情况则表示能连通。

按< Ctrl + C >终止命令,退出连通状态

4.5 配置Java

Java的安装这个不要单独下载jdk文件配置,而直接使用以下三条命令安装:

~$ sudo apt-get update
~$ sudo apt-get install openjdk-8-jdk
~$ java -version  #查看java版本,确认是否安装成功

配置ssh前建议先将之前调试好的三个系统进行备份,后面的步骤容易出错!!!

4.6 配置ssh

以下步骤三个系统都要做

4.6.1 安装ssh

~$ sudo apt-get install openssh-server

已有ssh或者安装成功了的输入命令

~$ ps -e | grep ssh

4.6.2 验证ssh是否成功安装输入

~$ ssh localhost

如果出现以下提示说明安装成功

但是笔者一般会遇到以下提示

The authenticity of host 'localhost ( : :1)' can't be established.

看似输完yes后能够输密码登录,实则会对后期产生影响

解决方案如下:

~$ hadoop@ubuntu:/home/master$ cd ~/.ssh     
                                            # 进入 .ssh 文件夹
~$ hadoop@ubuntu:~/.ssh$ sudo chmod 777 /etc/ssh/ssh_config 
                                            # 修改ssh_config文件权限
~$ hadoop@ubuntu:~/.ssh$ vi /etc/ssh/ssh_config 
                                            # 打开ssh_config文件

在ssh_config文件最后加上以下两行内容:

StrictHostKeyChecking no

UserKnownHostsFile /dev/null

再次输入<ssh localhost>

没有初出现The authenticity of host 'localhost ( : :1)' can't be established. 说明问题已解决。

4.6.3 生成秘钥对

~$ ssh-keygen -t rsa  #命令前不要加sudo!! 

# 输入之后一直选择enter即可。生成的秘钥位于 ~/.ssh文件夹下。可用cd 命令进入查看。

4.6.4 导入authorized_keys

~$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

这样,<ssh localhost>就可以不输密码登录了

4.6.5 把master上的authorized_keys拷贝到其他主机的相应目录下,实现远程无密码登录

~$ cd ~/.ssh  #进  入master的.ssh目录,执行复制操作
~/.ssh$ scp authorized_keys hadoop@slave1:~/.ssh/
~/.ssh$ scp authorized_keys hadoop@slave2:~/.ssh/

4.6.6 修改各台主机上authorized_keys文件的权限

所有机器上,均执行命令:

~$ chmod 600 ~/.ssh/authorized_keys

4.6.7 完成之后,在master上执行下面操作,检查免密码登录是否成功。

~$ ssh slave1
~$ ssh slave2

至此,ssh配置完成,可以保存备份一下。

4.7 配置hadoop(现在master上配置完,然后发给子节点)

4.7.1 直接通过wget命令安在线下载

~$ wget https://archive.apache.org/dist/hadoop/core/hadoop-2.7.3/hadoop-2.7.3.tar.gz

4.7.2 解包移动

# 解压hadoop包到当前目录
~$ tar -zxvf hadoop-2.7.3.tar.gz 解压
# 将安装包移到/usr目录下
~$ sudo mv hadoop-2.7.3 /usr/hadoop

4.7.3 新建文件夹

# 在/usr/hadoop目录下新建如下目录(root)
~$ cd /usr/hadoop               #切换到/usr/hadoop作为当前目录
/usr/hadoop$ mkdir dfs
/usr/hadoop$ mkdir dfs/name
/usr/hadoop$ mkdir dfs/data
/usr/hadoop$ mkdir tmp

4.7.4 配置文件(所有配置文件都在/usr/hadoop/etc/hadoop目录中)

由于前面java环境安装使用通过apt-get install openjdk-8-jdk,因此这里的JAVA_HOME环境变量值可以通过以下命令获得:

~$ ls -l /etc/alternatives/java      # 获取java路径

4.7.4.1 配置文件:hadoop-env.sh

修改JAVA_HOME值(改为export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64)

4.7.4.2 配置文件:yarn-env.sh

修改JAVA_HOME值(改为export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64)

4.7.4.3 配置文件:slaves

将内容修改为:

slave1

slave2

4.7.4.4 配置文件:core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
</configuration> 

4.7.4.5 配置文件:hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

4.7.4.6 配置文件:yarn-site.xml

<configuration>
    <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>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
</configuration>

4.7.6.7 配置文件:mapred-site.xml

先根据文件 mapred-site.xml.template 创建文件 mapred-site.xml

~$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

然后修改 mapred-site.xml 文件

<configuration>
    <property>                                                     
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
</configuration>

4.7.7 将hadoop传输到子节点的usr/hadoop目录

(如果传输时报错说 :权限拒绝,先把文件传送到非/usr目录下,然后在node上把这个文件再移动到/usr/hadoop)
如笔者正是将hadoop先传输到了子节点的/tmp目录下

~$ scp -r /usr/hadoop hadoop@slave1:/tmp
~$ scp -r /usr/hadoop hadoop@slave2:/tmp
# 然后,再分别从slave1和slave2上,将hadoop文件夹分别放到各自的/usr/hadoop中
# 在slave1机器:
~$ sudo mv /tmp/hadoop /usr/hadoop
# 在slave2机器:
~$ sudo mv /tmp/hadoop /usr/hadoop

4.8 配置环境变量

4.8.1 每个子节点都要配置以下一样的环境变量

# 编辑/etc/profile
~$ sudo gedit /etc/profile

在后边添加就可以

#hadoop 
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin 
export PATH=$PATH:$HADOOP_HOME/bin

执行< source /etc/profile >使更新的配置生效

配置完成的话可以通过< hadoop version >查看hadoop版本

4.8.2 启动hadoop

进入hadoop安装目录

~$ cd /usr/hadoop

格式化之前需要对 /usr/hadoop 目录权限进行修改

# 修改权限
/usr/hadoop$ sudo chmod -R 777 /usr/hadoop
# 格式化
/usr/hadoop$ bin/hdfs namenode -format
# 启动hadoop
/usr/hadoop$ sbin/start-all.sh

4.8.3 查看hadoop是否完全启动

# 输入jps查看状态
~$ jps

正常情况下应显示如下情况

4.9 配置Scala

4.9.1 安装Scala

~$ sudo apt-get install scala

4.9.2 查看Scala版本

~$ scala -version

4.9.3 查看Scala路径

由于前面java环境安装使用通过apt-get install scala,因此scala的路径可以通过以下命令获得:

# 获取scala路径
~$ ls -l /etc/alternatives/scala     

4.10 配置spark

4.10.1 下载Spark 2.0.2

~$ wget https://archive.apache.org/dist/spark/spark-2.0.2/spark-2.0.2-bin-hadoop2.7.tgz

文件会下载到当前目录下,不确定的话可以查看一下目录下有没有该文件。

4.10.2 下载完毕后解压文件

~$ tar xvf spark-2.0.2-bin-hadoop2.7.tgz

4.10.3 将解压的文件移动到hadoop用户下

(这里我们可以在hadoop用户下先建一个spark文件夹,也可以不建,直接移到 /usr/hadoop 里,这个路径没有过多要求)

~$ sudo mv spark-2.0.2-bin-hadoop2.7 /usr/hadoop/spark

4.10.4 进入spark-2.0.2-bin-hadoop2.7文件夹下的 conf 文件夹,里面有个spark-env.sh.template 文件,是spark环境变量设置的目标,我们可以复制一个出来

/usr/hadoop/spark/spark-2.0.2-bin-hadoop2.7/conf$ cp spark-env.sh.template spark-env.sh

打开该文件

/usr/hadoop/spark/spark-2.0.2-bin-hadoop2.7/conf$ vi spark-env.sh

在文件末尾添加以下内容

export SCALA_HOME=/usr/share/scala-2.11 
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 
export HADOOP_HOME=/usr/hadoop 
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
SPARK_MASTER_IP=master 
SPARK_LOCAL_DIRS=/usr/hadoop/spark/spark-2.0.2-bin-hadoop2.7
SPARK_DRIVER_MEMORY=1G 
export LD_LIBRARY_PATH=/usr/hadoop/lib/native/:$LD_LIBRARY_PATH
# 这里的内容是根据我虚拟机的环境来的,如果安装的版本和路径不一样,可以根据实际情况更改。

4.10.5 接下来设置slaves文件

/usr/hadoop/spark/spark-2.0.2-bin-hadoop2.7/conf$ cp slaves.template slaves
/usr/hadoop/spark/spark-2.0.2-bin-hadoop2.7/conf$ vi slaves
slave1
slave2

将内容改为

Spark在一台机器上就算配置完毕,接下来在另外两台机器上也做一模一样的配置即可。

4.10.6 启动Spark
 

# 启动spark前要先启动hadoop,然后再spark-2.0.2-bin-hadoop2.7文件夹下执行以下命令启动spark
/usr/hadoop/spark/spark-2.0.2-bin-hadoop2.7$ sbin/start-all.sh

运行jps看看Java进程,发现比Hadoop启动的时候多了Master进程。

切换到slave01节点上,运行JPS,看看进程,这里比Hadoop的时候多了一个Worker进程。说明我们的Spark群集已经启动成功。

5、测试

5.1 启动Hadoop群集与Spark群集

5.1.1启动hadoop

~$ /usr/hadoop/sbin/start-all.sh

5.1.2启动spark

~$ /usr/hadoop/spark/spark-2.0.2-bin-hadoop2.7$ sbin/start-all.sh

5.1.3检查能否通过浏览器访问webapp

hdfs管理界面  192.168.230.150:50070

yarn管理界面  192.168.230.150:8088

spark管理界面 192.168.230.150:8080

5.2 hadoop测试——wordcount

~$ cd /usr/hadoop
                # 进入本地hadoop目录(/usr/hadoop)
/usr/hadoop$ bin/hdfs dfs -mkdir -p /data/input
                # 在虚拟分布式文件系统上创建一个测试目录/data/input
/usr/hadoop$ bin/hdfs dfs -put README.txt  /data/input 
                # 将当前目录下的README.txt 文件复制到虚拟分布式文件系统中
/usr/hadoop$ bin/hdfs dfs-ls /data/input   
                # 查看文件系统中是否存在我们所复制的文件       

# 运行如下命令向hadoop提交单词统计任务
/usr/hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /data/input /data/output/result
# 查看result,结果在result下面的part-r-00000中
/usr/hadoop$ bin/hdfs dfs -cat /data/output/result/part-r-00000

 

 

 

发布了4 篇原创文章 · 获赞 7 · 访问量 2457

猜你喜欢

转载自blog.csdn.net/weixin_35085215/article/details/88952763