hadoop_spark伪分布式实验环境搭建和运行实例详细教程

时间:2021-01-04 22:55:05

hadoop+spark伪分布式环境搭建

安装须知

  • 单机模式(standalone):
  • 该模式是Hadoop的默认模式。这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。
  • 伪分布模式(Pseudo-Distributed Mode)
  • 这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点,其中所有的守护进程都运行在同一台机器上。
  • 全分布模式(Fully Distributed Mode)
    Hadoop守护进程运行在一个集群上,一台主机也可以运行完全分布式,需要安装多个独立的linux镜像,配置不同IP。

需要的软件及版本

软件

版本

Java编程语言(JDK8)

1.8.0_161

操作系统:LinuxCentOS

6.4

操作系统:Windows

Windows7/8/10

Apache Hadoop

2.7.5

Apache Spark

2.3.0

Apache Maven

3.5.2

LinuxCentOS下:Eclipse IDE

eclipse-jee-luna-SR2-linux-gtk

Windows下:Eclipse IDE

eclipse-jee-oxygen-2-win32-x86_64

安装步骤大纲

(1).硬/软件准备(虚拟一台主机)

(2).安装linux操作系统

(3).准备网络连接

(4).linux系统的一些配置

(5).安装JDK

(6).安装Hadoop

(7).安装Scala+Spark

(8)安装eclipse和maven

(9)运行wordcount例子程序

1.硬/软件准备

  • 第一步:硬/软件准备(虚拟一台主机)
  • (1)物理主机一台,CPU必须支持虚拟化功能(主流机大部分支持,如果被禁止可以在BIOS设置项里面设置开启),内存最好4G及以上,安装虚拟机的硬盘至少要留出20G空间。
  • (2)上述所有需求版本软件,由于我们的CentOS是32位,所以这些软件最好下载32位的linux版本的压缩包
  • (3)SecureCRTPortable(远程终端)
  • VMware Workstation Pro(虚拟机)
  • filezilla(windows与linux之间文件传输)

2.安装linux操作系统

(1)安装VM虚拟机,安装完毕后打开准备好的CentOS镜像(本教程以CentOS6.4为例子,6.x与7.x差别不大)

(2)   设置虚拟机的内存,处理器,硬盘和网络适配器,本教程设置如下:   内存:2GB

处理器:处理器数量1,内核数量1(根据个人机器配置适当调整)

硬盘:20GB

重点  网络适配器设置:自定义 VMnet8(NAT模式)

3.准备网络连接

(1)设置VM虚拟机的”虚拟网卡”的信息

在VM选项中点击  编辑(Edit)->虚拟网络编辑器(Virtual NetWork Editor)->选择Vmnet8 NAT模式 ,先配置子网IP,再配置子网掩码,最后设置NAT设置 (NAT setting ),配置完点击应用(apply),会在windows下的网络和共享下适配器管理中产生一个VMnet8的虚拟网卡。

具体配置参考如下:

Subnet IP:192.168.2.0 (可调整)

子网掩码:255.255.255.0

NAT setting->Gateway IP 改为:192.168.2.1(可调整)

(2)设置物理主机生成的虚拟网卡的信息

打开网络和共享中心,网络适配器,选择新生成的VMnet8,设置IP地址 为192.168.2.2(也可以根据情况调整)

(3)开启此虚拟机并选择I  have moved it,这样将不会重新生成虚拟网卡,  原来对虚拟机的配置不会浪费

(也可以根据情况调整,但要保证物理主 机生成的虚拟网卡,虚拟主 机虚拟网卡,CentOS的IP在同一网段中,即都配置为192.168.2.X   )

4.linux系统的一些配置

(1)登陆虚拟机,初始用户名及密码为hadoop(hadoop)

(2)查看ip地址,在控制台输入命令ifconfig查看本机的IP

$ifconfig

(3)修改ip地址的方式

第一种:命令行输入 $setup,进入伪图形界面,输入密码hadoop进入并选择NetWork configuration ,然后根据提示进行修改,具体如下

Static IP :192.168.2.100

gateWay IP:192.168.2.1

DNS Server:8.8.8.8

保存并退出 (推荐使用这种方式,简单不容易出错)

第二种:修改配置文件方式(需要简单linux使用基础,关于vi编辑器操作指令,不太推荐,了解就好)

输入以下指令并修改IP,:wq保存并退出

$vim  /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="static"

HWADDR="00:0C:29:3C:BF:E7"

IPV6INIT="yes"

NM_CONTROLLED="yes"

ONBOOT="yes"

TYPE="Ethernet"

UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"

IPADDR=“192.168.2.100”     (一般只修改这个就可以了)

NETMASK="255.255.255.0"

GATEWAY="192.168.2.1"

(4)重启网络设置,使新配置生效

进入管理员用户重启网络设置,命令如下:

$su

输入密码:hadoop       进入root用户,输入以下指令,使新网络配置生效

$service network restart

最后用ping命令检测是否连通

$ping 192.168.2.2

$ping 192.168.2.1

$ping www.baidu.com(如果连接到网络就能ping通)

Ctrl +Z(挂起进程)和Ctrl+C(强制中断)都可终止程序运行

(5)让普通用户具备sudo执行权限(root用户即管理员用户具有某些配置文件的权限,一般用户没有,需要root用户赋予,或者使用sudo命令)

切换到root用户,输入$su,然后输入密码,进入root用户,然后输入以下命令   $vi   /etc/sudoers, 在打开的文件里,找到

##allow root to run any commands anywhere

root  ALL=(ALL)   ALL

在这个地方添加一行:hadoop  ALL=(ALL)   ALL

然后保存并退出(记得改完退出root用户,不建议在root用户下操作)

(6)修改系统配置文件,设置启动项,让虚拟机以后默认以命令行模式启动,输入以下命令:

$sudo vi   /etc/inittab

修改id后面的数字,改为3,多用户模式,默认虚拟机以多用户命令行模式启动

(7)利用软件SecureCRT远程终端连接虚拟机,点击Quick Connect,输入如下:

protocol:SSH2

hostname:虚拟机ip地址 192.168.2.100(举例)

port:22

username:hadoop

选择accept&save ,然后就可以在远程终端操控虚拟机,比较方便快捷

用户密码都是hadoop

(8)修改默认主机名

进入hadoop用户,然后输入命令

$sudo vi /etc/sysconfig/network

然后修改HOSTNAME=bigdata(设置自己认为有意义的名字即可)

然后输入命令$sudo hostname立刻生效

* 如果是分布式多节点最好设置为host01(序列)

(9)修改hosts文件,把IP地址与主机名对应(重要),输入命令:

$sudo vi /etc/hosts

然后把自己的IP与主机名添加到最后一行,如

192.168.2.100      bigdata

保存并退出

可以$ping  bigdata测试

至此,linux基本环境配置成功,接下来安装软件

5.安装JDK

在linux系统下安装一个软件的步骤大致是这样的:

一.把安装包从本地主机上传到linux主目录下

二.解压安装包到指定路径(建议自己在主目录下定义)

三.根据软件安装位置修改系统环境变量,并使它生效

四.修改软件相关配置文件,并测试是否成功

下面开始JDK的安装:

(1).把安装包从本地主机上传到linux主目录下

两种方式

(a)利用软件FileZilla(在本地与虚拟机之间传文件的助手)

打开FileZilla,输入主机名,用户名,密码和端口号

192.168.2.100  hadoop  hadoop  22       然后快速连接(quick connect)

这时在左侧显示的是本地主机目录,右侧显示的是虚拟主机目录

只需要在左侧找到安装包拖动到右侧目录下,最好拖到根目录下或者根目录下指定的安装包文件下(强烈推荐!!!)

(b)在远程终端secureCRT中,使用快捷键Alt+p打开一个sftp,使用命令行把文件传到虚拟机主目录下,命令如下

put d:\xxx\yy\ll\jdk-7u65-linux-i585.tar.gz(自己的压缩包路径/名字)

(2).解压安装包到指定路径

#创建文件夹

$mkdir /home/hadoop/app

#解压

$tar –zxvf   jdk-7u55-linux-i586.tar.gz  -C  /home/hadoop/app

(3).根据软件安装位置修改系统环境变量,并使它生效

#将java添加到环境变量中

$sudo  vim /etc/profile

#在文件最后添加

export JAVA_HOME=/home/hadoop/app/jdk1.7.0-65

export PATH=$PATH:$JAVA_HOME/bin

#刷新配置

$source /etc/profile

(4).修改软件相关配置文件,测试是否成功

最后在命令行输入$java -version ,如果出现版本号既安装成功

注意:具体路径设置以自己的配置为准,不要死搬硬套,灵活设置

6.安装Hadoop

(1)下面开始Hadoop的安装:(参考JDK安装过程)

先上传hadoop的安装包到服务器上去/home/hadoop/(两种方式)

#解压

tar -zxvf hadoop-2.4.1.tar.gz  -C  /home/hadoop/app

伪分布式需要修改5个配置文件

第一个:hadoop-env.sh                              $cd/home/hadoop/app/hadoop-2.4.1/etc/hadoop

$vim hadoop-env.sh

#新加第27行

export JAVA_HOME=/home/app/jdk1.7.0_65

第二个:core-site.xml

<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->

<property>

<name>fs.defaultFS</name>

<value>hdfs://bigdata:9000</value>

</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->

<property>

<name>hadoop.tmp.dir</name>

<value>        /home/hadoop/app/hadoop2.4.1/hdfs_tmp</value>

</property>

第三个:hdfs-site.xml

<!-- 指定HDFS副本的数量 -->

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

第四个:mapred-site.xml

<!-- 指定mr运行在yarn上 -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

第五个:yarn-site.xml

<!-- 指定YARN的老大(ResourceManager)的地址 -->

<property>

<name>yarn.resourcemanager.hostname</name>

<value>bigdata</value>

</property>

<!-- reducer获取数据的方式 -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

(2)将hadoop添加到环境变量

$vim /etc/proflie

export JAVA_HOME=/home/app/java/jdk1.7.0_65

export HADOOP_HOME=/home/app/hadoop-2.4.1

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

刷新配置文件,使配置生效

$source /etc/profile

7.安装Scala

根据jdk和hadoop的安装经验,按照四个步骤,完成安装

下载Scala2.10.4,并按照前面的方式上传到linux目录下并解压

添加环境变量

$sudo vi /etc/profile

#scala

export SCALA_HOME=/home/app/scala  (根据具体情况修改)

export PATH=$SCALA_HOME/bin:$PATH

$source /etc/profile

#测试是否安装成功

$scala -version

(2)安装Spark(按照自己的安装路径和版本文件名等配置,不要照着敲)

根据jdk和hadoop的安装经验,按照四个步骤,完成安装

按照前面的方式上传到linux目录下并解压

添加环境变量

$sudo vi /etc/profile

#spark

export SPARK_HOME=/home/hadoop/app/spark-2.3.0-bin-hadoop2.4

export PATH=$SPARK_HOME/bin:$PATH

$source /etc/profile

#测试是否安装成功

$spark-shell

#修改conf目录下的spark-env.sh,添加环境变量

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_HOME=/home/hadoop/app/spark

export SPARK_JAR=/home/hadoop/app/spark/lib/spark-assembly-2.3.0-hadoop2.4.0.jar

export PATH=$SPARK_HOME/bin:$PATH

8.安装eclipse+maven

在linux系统下安装一个软件的步骤大致是这样的:

一.把安装包从本地主机上传到linux主目录下

二.解压安装包到指定路径(建议自己在主目录下定义)

三.根据软件安装位置修改系统环境变量,并使它生效

四.修改软件相关配置文件,并测试是否成功

和安装前面这些软件一样,安装eclipse和maven同样是把安装包上传到linux主目录,然后解压到指定文件夹,修改环境变量,把软件安装位置添加到环境变量,如果需要修改配置文件就修改,不需要就可以不用修改。最后测试是否成功,这两个都不用修改配置文件。

9.运行wordcount例子

#格式化namenode(是对namenode进行初始化)

$hdfs namenode -format (hadoop namenode -format)

#进入hadoop

$cd  /home/hadoop/app/hadoop-2.4.1/sbin

#先启动HDFS

$./start-dfs.sh

#再启动YARN

$./start-yarn.sh

#验证是否启动成功

使用jps命令验证            $jps

#启动Spark

$ cd  /home/hadoop/app/spark-1.1.0-bin-hadoop2.4/sbin

$ ./start-all.sh

#验证是否启动成功

使用jps命令验证

$jps

启动成功输入jps后会出现下面的进程:

1.namenode

2.secondnamenode

3.datanode

4.nodemanager

5.Resourcemanager

还可以添加免密认证,然后编写脚本一键执行启动所有进程

出现这些进程就可以开始运行简单的程序了,我们从wordcount开始示范,必须深入学习之后才能明白每一步和每一个进程代表的含义,目前只是搭建了一个能运行最简单的程序的环境,实际应用中还有很多待解决问题,有待深入学习。

首先了解简单的在分布式文件系统HDFS操作的命令

HDFS shell

1.0查看帮助

hadoop fs -help <cmd>

1.1上传

hadoop fs -put <linux上文件> <hdfs上的路径>

1.2查看文件内容

hadoop fs -cat <hdfs上的路径>

1.3查看文件列表

hadoop fs -ls /

1.4下载文件

hadoop fs -get <hdfs上的路径> <linux上文件>

Hadoop运行wordcount例子

$ cd /home/hadoop/app/hadoop-2.4.1/share/hadoop/mapreduce

$ vi test.txt

输入以下字符串:

hello world

hello tom

hello jim

hello kitty

hello angelababy

在web浏览器打开http://192.168.2.100:50070

选择Utilities-> Browse the file system就能查看hdfs系统中的文件test.txt

在hdfs根目录下建一个文件夹

$hadoop fs -mkdir /wordcount

$hadoop fs -mkdir /wordcount/input

然后使用hdfs的上传指令

$hadoop fs -put test.txt /wordcount/input

然后可以在web端找到对应的路径和文件

接着就开始从最简单的wordcount例子开始

大数据技术-WordCount例子分别在hadoop和spark运行的具体教程

基于Hadoop的MapReduce框架下的WordCount运行示例

第一步:在eclipse中编写程序

(1) 新建java工程,在新建工程下的src文件下新建包,推荐使用三段式命名法,如com.hadoop.cn,然后继续在包下新建.java文件,开始编写wordcount程序;

(2)由于wordcount程序需要很多hadoop相关的包,所以我们在动手编写程序之前最好先将准备好的hadoop_jar文件中的包添加到项目关联库中,具体操作如下:

右键点击wordcount项目,选择Build Path下的Add External Archive,然后找到我们准备好的hadoop_jar文件全选并确定。

(3)按照mapreduce框架的规范编写代码

第二步:使用eclipse打jar包

程序编写完成之后,右键点击项目,选择Export,然后选择Java下的JAR file,然后点击next,如图所示,修改自己想保存jar包的位置,然后点击finish,为了方便传输,可以放在桌面,传到linux系统后再删除。

第三步:发送jar包到linux系统并用命令行提交运行

利用文件传输工具filezilla,将桌面上的jar包传到linux系统下,一般保存在home/app/hadoop/share/mapreduce这个文件下,也可以新建自己的文件,把jar包拖动到该文件下,测试数据可以提前上传到hdfs的/wordcount/input下,我们以test.txt为例,我们在mapreduce文件夹下的运行指令为:

基本格式:hadoop  jar  jar包名称  主类—即main函数所在的类  输入文件路径 输出文件路径

例:hadoop jar WordCount_hadoop_test.jar cn.itcast.hadoop.mr.wordcount.WCRunner wordcount /wordcount/input  /wordcount/output

注:写主类的时候注意一定要写 包名.主类名,主类的名字是你main函数所在类的名字,文件输入路径按照hdfs上的文件路径名写,输出路径可以自己指定,最好是项目名/output

基于Spark的WordCount运行示例

第一步:在eclipse中编写程序

(1)新建java工程,在新建工程下的src文件下新建包,推荐使用三段式命名法,如com.hadoop.cn,然后继续在包下新建.java文件,开始编写wordcount程序;

(2)由于wordcount程序需要很多spark相关的包,所以我们在动手编写程序之前最好先将准备好的spark_jar文件中的包添加到项目关联库中,具体操作如下:

右键点击wordcount项目,选择Build Path下的Add External Archive,然后找到我们准备好的spark_jar文件全选并确定。

(3) 按照spark编码规范编写代码

第二步:使用eclipse打jar包

程序编写完成之后,右键点击项目,选择Export,然后选择Java下的JAR file,然后点击next,如图所示,修改自己想保存jar包的位置,然后点击finish,为了方便传输,可以放在桌面,

传到linux系统后再删除。

第三步:发送jar包到linux系统并用命令行提交运行

利用文件传输工具filezilla,将桌面上的jar包传到linux系统下,一般保存在home/app/spark/examples/jars这个文件下,也可以新建自己的文件,把jar包拖动到该文件下,测试数据可以提前上传到hdfs的/wordcount/input下,我们以test.txt为例,我们在mapreduce文件夹下的运行指令为:

基本格式:spark-submit  --class  主类-即main函数所在的类  jar包  输入文件

spark-submit  --class  com.spark.count.JavaWordCount /home/hadoop/app/spark-2.3.0-bin-hadoop2.7/examples/jars/WordCount_spark_test.jar

/wordcount/input/test.txt

注:写主类的时候注意一定要写 包名.主类名,主类的名字是你main函数所在类的名字,文件输入路径按照hdfs上的文件路径名写