ubuntu下hadoop,spark配置

转载来自:http://www.cnblogs.com/spark-china/p/3941878.html

  1. 在VMWare 中准备第二、第三台运行Ubuntu系统的机器;

 

在VMWare中构建第二、三台运行Ubuntu的机器和构建第一台机器完全一样,再次不在赘述。。

与安装第一台Ubuntu机器不同的几点是:

第一点:我们把第二、三台Ubuntu机器命名为了Slave1、Slave2,如下图所示:

创建完的VMware中就有三台虚拟机了:

第二点:为了简化Hadoop的配置,保持最小化的Hadoop集群,在构建第二、三台机器的时候使用相同的root超级用户的方式登录系统。

2.按照配置伪分布式模式的方式配置新创建运行Ubuntu系统的机器;

按照配置伪分布式模式的方式配置新创建运行Ubuntu系统的机器和配置第一台机器完全相同, 

      下图是家林完全安装好后的截图:

3.  配置Hadoop分布式集群环境

根据前面的配置,我们现在已经有三台运行在VMware中装有Ubuntu系统的机器,分别是:Master、Slave1、Slave2;

下面开始配置Hadoop分布式集群环境:

Step 1:在/etc/hostname中修改主机名并在/etc/hosts中配置主机名和IP地址的对应关系:

我们把Master这台机器作为Hadoop的主节点,首先看一下Master这台机器的IP地址:

可以看到当前主机的ip地址是“192.168.184.133”.

我们在/etc/hostname中修改主机名:

进入配置文件:

可以看到按照我们装Ubuntu系统时候的默认名称,配置文件中的机器的名称是” rocky-virtual-machine”,我们把” rocky-virtual-machine”改为“Master”作为Hadoop分布式集群环境的主节点:

保存退出。此时使用以下命令查看当前主机的主机名:

发现修改的主机名没有生效,为使得新修改的主机名生效,我们重新启动系统后再次查看主机名:

发现我们的主机名成为了修改后的“Master”,表明修改成功。

打开在/etc/hosts 文件:

此时我们发现文件中只有Ubuntu系统的原始ip(127.0.0.1)地址和主机名(localhost)的对应关系:

我们在/etc/hosts中配置主机名和IP地址的对应关系:

修改之后保存退出。

 

接下来我们使用“ping”命令看一下主机名和IP地址只见的转换关系是否正确:

可以看到此时我们的主机“Master”对应的IP地址是“192.168.184.133”,这表明我们的配置和运行都是正确的。

进入第二台机器,看一下这台主机的IP地址:

可以看出这台主机的IP地址是“192.168.184.131”.

我们在/etc/hostname中把主机名称修改为“Slave1”:

保存退出。

为了使修改生效,我们重新启动该机器,此时查看主机名:

表明我们的修改生效了。

进入第三台机器,看一下这台主机的IP地址:

可以看出这台主机的IP地址是“192.168.184.132”.

我们在/etc/hostname中把主机名称修改为“Slave2”:

保存退出。

为了使修改生效,我们重新启动该机器,此时查看主机名:

表明我们的修改生效了。

 

现在, Slave1上的/etc/hosts中配置主机名和IP地址的对应关系,打开后:

此时我们修改为配置文件为:

把“Master”和“Slave1”和“Slave2”的主机名和IP地址的对应关系都配置进去。保存退出。

我们此时ping一下Master这个节点发现网络访问没有问题:

接着,在 Slave2上的/etc/hosts中配置主机名和IP地址的对应关系,配置完后如下:

保存退出。

 

此时我们ping一下Master和Slave1发现都可以ping通;

 

最后把在 Master上的/etc/hosts中配置主机名和IP地址的对应关系,配置完后如下:

此时在Master上使用ping命令和Slave1和Slave2这两台机器进行沟通:

发现此时已经ping通了两个slave节点的机器。

最后我们在测试一下Slave1这台机器和Master、Slave2的通信:

到目前为止,Master、Slave1、Slave2这三台机器之间实现了相互通信!

Step 2:SSH无密码验证配置

首先我们看一下在没有配置的情况下Master通过SSH协议访问Slave1的情况:

此时会发现我们是需要密码的。我们不登陆进去,直接退出。

怎么使得集群能够通过SSH免登陆密码呢?

按照前面的配置,我们已经分布在Master、Slave1、Slave2这三台机器上的/root/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。

此时把Slave1的id_rsa.pub传给Master,如下所示:

同时把Slave2的id_rsa.pub传给Master,如下所示:

在Master上检查一下是否复制了过来:

此时我们发现Slave1和Slave2节点的公钥已经传输过来

Master节点上综合所有公钥:

将Master的公钥信息authorized_keys复制到Slave1和Slave1的.ssh目录下:

此时再次通过SSH登录Slave1和Slave2:

此时Master通过SSH登录Slave1和Slave2已经不需要密码,同样的Slave1或者Slave2通过SSH协议登录另外两台机器也不需要密码了。

Step 3:修改Master、Slave1、Slave2的配置文件

 

首先修改Master的core-site.xml文件,此时的文件内容是:

我们把“localhost”域名修改为“Master”:

同样的操作分别打开Slave1和Slave2节点core-site.xml,把“localhost”域名修改为“Master”。

其次修改Master、Slave1、Slave2的mapred-site.xml文件.

进入Master节点的mapred-site.xml文件把“localhost”域名修改为“Master”,保存退出。

同理,打开Slave1和Slave2节点mapred-site.xml,把“localhost”域名修改为“Master”,保存退出。

最后修改Master、Slave1、Slave2的hdfs-site.xml文件:

我们把三台机器上的“dfs.replication”值由1改为3,这样我们的数据就会有3份副本:

保存退出。

Step 4:修改两台机器中hadoop配置文件的masters和slaves文件

首先修改Master的masters文件:

进入文件:

把“localhost”改为“Master”:

保存退出。

修改Master的slaves文件,

进入该文件:

具体修改为:

保存退出。

从上面的配置可以看出我们把Master即作为主节点,又作为数据处理节点,这是考虑我们数据的3份副本而而我们的机器台数有限所致。

把Master配置的masters和slaves文件分别拷贝到Slave1和Slave2的Hadoop安装目录下的conf文件夹下:

进入Slave1或者Slave2节点检查masters和slaves文件的内容:

发现拷贝完全正确。

至此Hadoop的集群环境终于配置完成!

4.测试Hadoop分布式集群环境;

首先在通过Master节点格式化集群的文件系统:

输入“Y”完成格式化:

格式化完成以后,我们启动hadoop集群:

我们在尝试一下停止Hadoop集群:

此时出现了“no datanode to stop”的错误,出现这种错误的原因如下:

每次使用 “hadoop namenode -format”命令格式化文件系统的时候会出现一个新的namenodeId,而我我们在搭建Hadoop单机伪分布式版本的时候往我们自己创建的tmp目录下放了数据,现在需要把各台机器上的“/usr/local/hadoop/hadoop-1.2.1/”下面的tmp及其子目录的内容清空,于此同时把“/tmp”目录下的与hadoop相关的内容都清空,最后要把我们自定义的hdfs文件夹中的data和name文件夹中的内容清空:

把Slave1和Slave2中同样的内容均删除掉。

重新格式化并重新启动集群,此时进入Master的Web控制台:

此时可以看到Live  Nodes只有三个,这正是我们预期的,因为我们Master、Slave1、Slave2都设置成为了DataNode,当然Master本身同时也是NameNode。

此时我们通过JPS命令查看一下三台机器中的进程信息:

发现Hadoop集群的各种服务都正常启动。

至此,Hadoop集群构建完毕。

 在1、2讲的从零起步构建好的Hadoop集群的基础上构建Spark集群,我们这里采用2014年5月30日发布的Spark 1.0.0版本,也就是Spark的最新版本,要想基于Spark 1.0.0构建Spark集群,需要的软件如下:

 

1.Spark 1.0.0,笔者这里使用的是spark-1.0.0-bin-hadoop1.tgz, 具体的下载地址是http://d3kbcqa49mib13.cloudfront.net/spark-1.0.0-bin-hadoop1.tgz

如下图所示:

笔者是保存在了Master节点如下图所示的位置:

2.下载和Spark 1.0.0对应的Scala版本,官方要求的是Scala必须为Scala 2.10.x:

 笔者下载的是“Scala 2.10.4”,具体官方下载地址为http://www.scala-lang.org/download/2.10.4.html 下载后在Master节点上保存为:

第二步:安装每个软件

 安装Scala

  1. 打开终端,建立新目录“/usr/lib/scala”,如下图所示:

 

 

 

    2.解压Scala文件,如下图所示:

把解压好的Scala移到刚刚创建的“/usr/lib/scala”中,如下图所示

3.修改环境变量:

进入如下图所示的配置文件中:

按下“i”进入INSERT模式,把Scala的环境编写信息加入其中,如下图所示:

从配置文件中可以看出,我们设置了“SCALA_HOME”并把Scala的bin目录设置到了PATH中。

按下“esc“键回到正常模式,保存并退出配置文件:

执行以下命令是配置文件的修改生效:

4.在终端中显示刚刚安装的Scala版本,如下图所示

发现版本是”2.10.4”,这正是我们期望的。

当我们输入“scala”这个命令的的时候,可以直接进入Scala的命令行交互界面:

此时我们输入“9*9”这个表达式:

此时我们发现Scala正确的帮我们计算出了结果 。

此时我们完成了Master上Scala的安装;

 

由于我们的 Spark要运行在Master、Slave1、Slave2三台机器上,此时我们需要在Slave1和Slave2上安装同样的Scala,使用scp命令把Scala安装目录和“~/.bashrc”都复制到Slave1和Slave2相同的目录之之下,当然,你也可以按照Master节点的方式手动在Slave1和Slave2上安装。

 

在Slave1上Scala安装好后的测试效果如下:

在Slave2上Scala安装好后的测试效果如下:

至此,我们在Master、Slave1、Slave2这三台机器上成功部署Scala。

安装Spark

 

Master、Slave1、Slave2这三台机器上均需要安装Spark。

首先在Master上安装Spark,具体步骤如下:

第一步:把Master上的Spark解压:

我们直接解压到当前目录下:

此时,我们创建Spark的目录“/usr/local/spark”:

把解压后的“spark-1.0.0-bin-hadoop1”复制到/usr/local/spark”下面:

第二步:配置环境变量

       进入配置文件:

在配置文件中加入“SPARK_HOME”并把spark的bin目录加到PATH中:

配置后保存退出,然后使配置生效:

第三步:配置Spark

 

进入Spark的conf目录:

在配置文件中加入“SPARK_HOME”并把spark的bin目录加到PATH中:

把spark-env.sh.template 拷贝到spark-env.sh:

使用vim打开spark-env.sh:

在配置文件中添加如下配置信息:

其中:

JAVA_HOME:指定的是Java的安装目录;

SCALA_HOME:指定的是Scala的安装目录;

SPARK_MASTER_IP:指定的是Spark集群的Master节点的IP地址;

SPARK_WORKER_MEMOERY:指定的Worker节点能够最大分配给Excutors的内存大小,因为我们的三台机器配置都是2g,为了最充分的使用内存,这里设置为了2g;

HADOOP_CONF_DIR:指定的是我们原来的Hadoop集群的配置文件的目录;

 

保存退出。

接下来配置Spark的conf下的slaves文件,把Worker节点都添加进去:

打开后文件的内容:

我们需要把内容修改为:

可以看出我们把三台机器都设置为了Worker节点,也就是我们的主节点即是Master又是Worker节点。

保存退出。

上述就是Master上的Spark的安装。

启动并查看集群的状况

第一步:启动Hadoop集群,这个在第二讲中讲解的非常细致,在此不再赘述:

启动之后在Master这台机器上使用jps命令,可以看到如下进程信息:

在Slave1 和Slave2上使用jps会看到如下进程信息:

第二步:启动Spark集群

 在Hadoop集群成功启动的基础上,启动Spark集群需要使用Spark的sbin目录下“start-all.sh”:

接下来使用“start-all.sh”来启动Spark集群!

读者必须注意的是此时必须写成“./start-all.sh”来表明是当前目录下的“start-all.sh”,因为我们在配置Hadoop的bin目录中也有一个“start-all.sh”文件!

 此时使用jps发现我们在主节点正如预期一样出现了“Master”和“Worker”两个新进程!

此时的Slave1和Slave2会出现新的进程“Worker”:

此时,我们可以进入Spark集群的Web页面,访问“http://Master:8080”: 如下所示:

从页面上我们可以看到我们有三个Worker节点及这三个节点的信息。

此时,我们进入Spark的bin目录,使用“spark-shell”控制台:

此时我们进入了Spark的shell世界,根据输出的提示信息,我们可以通过“http://Master:4040” 从Web的角度看一下SparkUI的情况,如下图所示:

当然,你也可以查看一些其它的信息,例如Environment:

同时,我们也可以看一下Executors:

可以看到对于我们的shell而言,Driver是Master:50777.

 

至此,我们 的Spark集群搭建成功,Congratulations!

第一步:通过Spark的shell测试Spark的工作

 

Step1:启动Spark集群,这一点在第三讲讲的极为细致,启动后的WebUI如下:

Step2:启动Spark Shell:

此时可以通过如下Web控制台查看shell的情况:

Step3:把Spark安装目录“README.md”拷贝到HDFS系统上

在Master节点上新启动一个命令终端,并进入到Spark安装目录下:

我们把文件拷贝到HDFS的root文件夹下:

此时,我们观察一下Web控制台,会发现该文件已经成功上传到HDFS上:

 

Step4:在Spark shell之下操作编写代码,操作我们上传的“README.md”:

首先,我们看一下在Shell环境下的“sc”这个自动帮助我们生产的环境变量:

可以看出sc就是SparkContext的实例,这是在启动Spark Shell的时候系统帮助我们自动生成的,SparkContext是把代码提交到集群或者本地的通道,我们编写Spark代码,无论是要运行本地还是集群都必须有SparkContext的实例。

接下来,我们读取“README.md”这个文件:

我们把读取的内容保存给了file这个变量,其实file是一个MappedRDD,在Spark的代码编写中,一切都是基于RDD操作的;

 

再接下来,我们从读取的文件中过滤出所有的“Spark”这个词

此时生成了一个FilteredRDD;

再接下来,我们统计一下“Spark”一共出现了多少次:

从执行结果中我们发现“Spark”这个词一共出现了15次。

此时,我们查看Spark Shell的Web控制台:

发现控制台中显示我们提交了一个任务并成功完成,点击任务可以看到其执行详情:

那我们如何验证Spark Shell对README.md这个文件中的“Spark”出现的15次是正确的呢?其实方法很简单,我们可以使用Ubuntu自带的wc命令来统计,如下所示:

发现此时的执行结果也是15次,和Spark Shell的计数是一样一样的。

第二步:使用Spark的cache机制观察一下效率的提升

 

基于上面的内容,我们在执行一下以下语句:

发现同样计算结果是15.

此时我们在进入Web控制台:

发现控制台中清晰展示我们执行了两次“count”操作。

现在我们把“sparks”这个变量执行一下“cache”操作:

此时在执行count操作,查看Web控制台:

此时发现我们前后执行的三次count操作耗时分别是0.7s、0.3s、0.5s。

此时我们 第四次执行count操作,看一下Web控制台的效果:

控制台上清晰的第四次操作仅仅花费了17ms,比前三次的操作速度大约快了30倍的样子。这就是缓存带来的巨大速度提升,而基于缓存是Spark的计算的核心之一!

 

第三步:构建Spark的IDE开发环境

 

Step 1:目前世界上Spark首选的InteIIiJ IDE开发工具是IDEA,我们下载InteIIiJ IDEA:

这里下载是最新版本Version 13.1.4:

关于版本的选择,官方给出了如下选择依据:

我们在这里选择Linux系统下的”Community Edition FREE”这个版本,这能完全满足我们任意复杂程度的Scala开发需求。

家林下载完成后保存在本地的如下位置:

Step 2:安装IDEA并配置IDEA系统环境变量

创建“/usr/local/idea”目录:

把我们下载的idea压缩包解压到该目录下:

安装完成后,为了方便使用其bin目录下的命令,我们把它配置在“~/.bashrc”:

【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第四步)(3)

配置完成后保存退出并执行source命令使配置文件生效。

Step 3:运行IDEA并安装和配置IDEA的Scala开发插件:

官方文档指出:

我们进入IDEA的bin目录:

此时,运行“idea.sh”出现如下界面:

此时需要选择“Configure”进入IDEA的配置页面:

选择“Plugins”,进入插件安装界面:

此时点击左下角的“Install JetBrains plugin”选项进入如下页面:

在左上方的输入框中输入“scala”来查找scala插件:

此时点击右侧的“Install plugin”:

选择“Yes”即可开启Scala插件在IDEA中的自动安装过程。

此时大约需要花费2分钟去下载安装,当然,网速不同下载的耗时也会有所不同:

此时重启IDEA:

此时重启IDEA:

重启后进入如下界面:

Step 4:在IDEA中编写Scala代码:

 

首先在进入在我们前一步的进入界面中选择“Create New Project”:

此时选在左侧列表中的“Scala”选项:

为了方便以后的开发工作,我们选择右侧的“SBT”选项:

点击“Next”进入下一步,设置Scala工程的名称和目录:

点击“Finish”完成工程的创建:

由于我们在前面选择了“SBT”选择,所以IDEA此时智能的帮助我们构建SBT工具:

我们点击工程名称“HelloScala”:

 

IDEA自动完成SBT工具的安装需要一段时间,家林这里花了大约5分钟的时间,SBT好后SBT会自动帮我们建立好一些目录:

此时右击src下的main下的scala在弹出的“New”下选择“Scala  Class”

输入文件名称:

把Kinde选择为“Object”:

点击“OK”完成:

【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第四步)(5)

此时把我们的“firstScalaApp”的源代码修改为如下内容:

此时我们点击“firstScalaApp”的右键选择“Run Scala Console”出现如下提示:

这是由于我们还没有设置Java的JDK路径,点击“OK”,进入如下视图:

此时我们选择最左侧的“Project”选项:

此时我们选择“No SDK”的“New”初选如下视图:

点击“JDK”选项:

选择我们在前面安装的JDK的目录:

点击“OK”

点击确认按钮:

此时直接点击代码区出现如下视图:

我们选择“Run ‘firstScalaApp’”来运行程序:

第一运行Scala会有些缓慢,运行结果如下图所示:

此时成功打印出“Hello Scala!”这个字符串。

此时表明程序运行成功。

 

Step 5:如果我们要用很酷的黑色背景,可以

File -> Settings -> Appearance -> Theme选择Darcula:

 

 

第四步:通过Spark的IDE搭建并测试Spark开发环境

 

Step 1:导入Spark-hadoop对应的包,次选择“File”–> “Project Structure” –> “Libraries”,选择“+”,将spark-hadoop 对应的包导入:

点击“OK”确认:

点击“OK”:

IDEA工作完成后会发现Spark的jar包导入到了我们的工程中:

Step 2:开发第一个Spark程序。打开Spark自带的Examples目录:

此时发现内部有很多文件,这些都是Spark给我提供的实例。

在我们的在我们的第一Scala工程的src下创建一个名称为SparkPi的Scala的object:

此时打开Spark自带的Examples下的SparkPi文件:

我们把该文的内容直接拷贝到IDEA中创建的SparkPi中:

第五步:测试Spark IDE开发环境

此时我们直接选择SparkPi并运行的话会出现如下错误提示:

从提示中可以看出是找不到Spark程序运行的Master机器。

此时需要配置SparkPi的执行环境:

选择“Edit Configurations”进入配置界面:

我们在Program arguments中输入“local”:

此配置说明我们的程序以local本地的模式运行,配置好后保存。

此时再次运行程序即可。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。