本文采用系统和软件版本如下:
Ubuntu16.04 64位
JDK 8u131
Hadoop2.8.0
Scala2.11.0
Spark 2.1.1
一、Hadoop与spark平台简介
1.Hadoop:
Hadoop是由Apache基金会所开发的分布式系统基础架构,实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS;Hadoop框架最核心设计就是HDFS和MapReduce,HDFS为海量数据提供了存储,MapReduce为海量数据提供了计算。
Hadoop要解决的问题:海量数据的存储(HDFS)、海量数据的分析(MapReduce)和资源管理调度(YARN)。
Hadoop主要作用于分布式。
2.Spark:
Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了Spark SQL、Spark Streaming、MLLib和GraphX等组件,也就是BDAS(伯克利数据分析栈),这些组件逐渐形成大数据处理一站式解决平台。从各方面报道来看Spark抱负并非池鱼,而是希望替代Hadoop在大数据中的地位,成为大数据处理的主流标准,不过Spark还没有太多大项目的检验,离这个目标还有很大路要走。
Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala 提供一个称为 Actor 的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing 模型)。在Spark官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。
二、Hadoop平台搭建
1.下载
首先在Hadoop官网下载Hadoop安装包http://hadoop.apache.org/,下载的文件为tar压缩包形式。
*Spark对于Hadoop的版本有一定要求,若要同时搭建Spark平台,需参照Spark要求下载对应的Hadoop版本。
2.创建Hadoop用户
如果你安装Ubuntu的时候不是用的”Hadoop”用户,那么需要增加一个名为Hadoop的用户
首先按ctrl+alt+t打开终端窗口,输入如下命令创建新用户:
sudo useradd –m Hadoop –s /bin/bash
这条命令创建了可以登录的hadoop用户,并使用/bin/bash作为shell。
接着使用如下命令设置密码,可简单设置为hadoop,按提示输入两次密码:
sudo passwd hadoop
为hadoop用户增加管理员权限,方便部署。
sudo adduser hadoop sudo
最后注销当前用户,返回登录界面。在登录界面中选择刚创建的hadoop用户进行登录。
3.更新apt+安装ssh
首先更新apt,执行如下命令:
sudo apt-get update
后续需要更改一些配置文件,建议安装vim
sudo apt-get install vim
安装软件时若需要确认,在提示处输入y即可。
集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server:
sudo apt-get install openssh-server
然后将密钥加入到授权中,配置成SSH无密码登录
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat./id_rsa.pub >> ./authorized_keys # 加入授权
此时再用ssh localhost命令,无需输入密码就可以直接登录
4.安装JAVA环境
JAVA安装环境还是推荐安装Oracle的JDK,网上有教程说可以直接通过apt来安装OpenJDK。经过实际操作,OpenJDK-9-jdk的安装错误迭出,至今我尚未找到完美的解决方案,本意是为了图方便,结果反倒造成了不必要的麻烦。
JDK的安装也并不是十分麻烦,首先还是要到ORACLE官网进行下载,注意下载系统对应的版本。
在usr目录下建立java安装目录
cd /usr
sudo mkdir java
解压jdk至目标安装目录
sudo tar –zxvfjdk-8u131-linux-x64.tar.gz –C /usr/java
为了方便设置JAVA_HOME,将文件夹进行重命名
cd/usr/java
sudo mv jdk1.8.0_131jdk
接下来编辑配置文件,配置环境变量,配置文件为/etc/profile,我们采用vim编辑器进行编辑
sudo vim/etc/profile
添加如下内容:
export JAVA_HOME=/usr/java/jdk
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
这里需要注意,PATH路径中的分隔符为英文冒号:
最后,重启机器或执行命令:source /etc/profile
source /etc/profile
可用java –version查看安装情况
5.安装Hadoop
将Hadoop安装包解压到/usr/local文件夹下
sudo tar –zxvfhadoop-2.8.0.tar.gz –C /usr/local
同样为了配置环境变量的方便,对解压后的文件夹进行重命名
sudo /usr/local
sudo mv hadoop-2.8.0hadoop
接下来编辑配置文件,配置环境变量
sudo vim/etc/profile
添加如下内容:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
最后,重启机器或执行命令:source /etc/profile
可用hadoop version查看安装情况
hadoop version
Hadoop 2.8.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git-r 91f2b7a13d1e97be65db92ddabc627cc29ac0009
Compiled by jdu on 2017-03-17T04:12Z
Compiled with protoc 2.5.0
From source with checksum60125541c2b3e266cbf3becc5bda666
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.8.0.jar
6.配置hadoop文件
hadoop的配置文件方案,网上的教程版本不一,因而在这里走了许多弯路,经过多次尝试,终于找到了适用于hadoop 2.8.0的配置文件方案
进入配置文件目录:
cd/usr/local/hadoop/etc/hadoop
修改core-site.xml:
修改hdfs-site.xml:
这里指定dfs的备份目录,单机用1份就行
修改mapred-site.xml
修改yarn-site.xml
*7.权限调整
这是很关键的一步,在按照网上其他教程安装并配置后,启动Spark各种报错,经过艰难的挣扎,终于发现是权限捣的鬼,而这一步网上教程居然一句也没提,真是……
所以要记住,尤其是Linux新手,权限的问题一定要打起十二分的注意,留心留心再留心
首先,将Hadoop与Spark的安装目录赋予读写权限,我采取直接一步到位的方式,赋予全部权限
sudochmod -R 777 /usr/local/hadoop
sudochmod -R 777 /usr/local/spark
接下来,由于Spark会利用HDFS进行读写操作,因而对HDFS也同样需要赋予权限,能提到这个事情的文章就更少了,也是困扰我时间最长的地方
不同版本Hadoop的命令格式不一样,实测2.8.0如下命令可用:
hdfs dfs-chmod -R 777 /
8.启动Hadoop
首先对hdfs进行格式化操作
hdfs namenode –format
启动Hadoop,网上许多教程写的是执行start-all.sh,但目前Hadoop推荐执行start-dfs.sh
sudo $HADOOP_HOME/sbin/start-dfs.sh
停止Hadoop可执行stop-dfs.sh
sudo $HADOOP_HOME/sbin/stop-dfs.sh
Hadoop运行后可使用jps命令查看,得到结果:
6577NameNode
27002 Jps
6927SecondaryNameNode
6735DataNode
注:如果开启了root用户,namenode等节点默认在root用户下启动,因而需在root用户下查看,输入su root切换
如果提示jps未安装,可输入source /etc/profile重新设置环境变量
三、Spark平台搭建
1.安装Scala
网上有的教程并没有安装Scala这一步骤,但由于Spark编程最契合的语言莫过于Scala,因而还是推荐安装Scala并采用Scala进行Spark的操作
将Scala安装包解压到/usr/local
sudo tar –zxvfscala-2.11.0.tgz –C /usr/local
同样,为了方便配置环境变量,将解压后的目录进行重命名
cd/usr/local
sudo mv scala-2.11.0 scala
类似的,也要配置环境变量sudo vim /etc/profile
export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin
保存并更新/etc/profile
source/etc/profile
运行scala –version查看是否配置成功
Scala code runner version 2.11.0 -- Copyright 2002-2013, LAMP/EPFL
2.安装Spark
解压Spark安装包到/usr/local
sudo tar –zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /usr/local
将解压目录重命名
cd/usr/local
sudo mvspark-2.1.1-bin-hadoop2.7 spark
配置环境变量,最终总体环境变量如下:
export JAVA_HOME=/usr/java/jdk
export CLASSPATH=$JAVA_HOME/lib/
export SCALA_HOME=/usr/local/scala
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin
保存并更新/etc/profile
source /etc/profile
3.配置Spark
在spark安装目录的conf子目录下复制并重命名spark-env.sh.template为spark-env.sh
cd$SPARK_HOME/conf
sudo cp spark-env.sh.template spark-env.sh
sudo vim spark-env.sh
在spark-env.sh中添加:
export JAVA_HOME=/usr/java/jdk
export SCALA_HOME=/usr/local/scala
export SPARK_MASTER_IP=localhost
export SPARK_WORKER_MEMORY=1G #内存大小可根据自己电脑配置进行设置
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop/
export SPARK_LOCAL_DIRS=/home/hadoop/data/sparktmp
4.启动Spark-Shell
cd $SPARK_HOME/bin
sudo./spark-shell
出现如下界面,表示Spark-Shell已成功启动