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上的文件路径名写