前言

因为公司项目有用到,整理了一下,特此记录 .网上教程几乎都是全家桶,上来就是安装Scala,Spark,Hadoop.不清楚为什么要安装,自己是否需要安装.又因为安装环境是学习的第一步,所以基本处于懵逼状态!

Scala,Spark,Hadoop介绍

什么是spark?

  Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

下面是官网上的一段话:

Get Spark from the downloads page of the project website. This documentation is for Spark version 2.4.0. Spark uses Hadoop’s client libraries for HDFS and YARN. Downloads are pre-packaged for a handful of popular Hadoop versions. Users can also download a “Hadoop free” binary and run Spark with any Hadoop version by augmenting Spark’s classpath. Scala and Java users can include Spark in their projects using its Maven coordinates and in the future Python users can also install Spark from PyPI.
If you’d like to build Spark from source, visit Building Spark.
Spark runs on both Windows and UNIX-like systems (e.g. Linux, Mac OS). It’s easy to run locally on one machine — all you need is to have javainstalled on your system PATH, or the JAVA_HOME environment variable pointing to a Java installation.
Spark runs on Java 8+, Python 2.7+/3.4+ and R 3.1+. For the Scala API, Spark 2.4.0 uses Scala 2.11. You will need to use a compatible Scala version (2.11.x).
Note that support for Java 7, Python 2.6 and old Hadoop versions before 2.6.5 were removed as of Spark 2.2.0. Support for Scala 2.10 was removed as of 2.3.0.

从上面可以看出:

  1. Spark 需要借助Hadoop客户端的库去使用 HDFS and YARN
    (yarn是作业调度和集群资源管理的一个框架。Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。)
  2. 你可以选择官方提前打包好的继承了某些稳定Hadoop版本的Spark,也可以随意搭配任意版本的Hadoop版本编译使用
  3. Scala 和Java使用者通过maven坐标将Spark引入项目
  4. Spark 支持Windows 和 类UNIX操作系统
  5. 配置好java环境Spark 就可以轻松的运行在一台机器上
  6. Spark 运行需要 Java 8+, Python 2.7+/3.4+ and R 3.1+.

什么是Hadoop?

  Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
  用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

什么是Scala?

  Scala是一门多范式的编程语言,一种类似java的编程语言 ,设计初衷是实现可伸缩的语言 、并集成面向对象编程和函数式编程的各种特性。

  所以使用Spark不一定需要安装Hadoop,也不一定需要安装Scala。Spark提供Java,Scala,Python和R中的高级API,以及支持通用执行图的优化引擎。如果不依赖Hadoop的hdfs进行持久化,则不需要Hadoop。如果不使用yarn模式启动集群,也不需要Hadoop。

Scala windows下安装

  1. 去官网 https://www.scala-lang.org/
  2. 下载页面 https://www.scala-lang.org/download/
  3. Scala 安装两种方式
    A. 通过ide安装,
    首先确定已经安装好Java8 jdk
    在IDEA的启动界面点击 Configure -> Plugins,然后搜索Scala,点击 Install 即可
    与其他编程语言相比,Scala有点不一样。Scala不是安装在系统范围内,而是为每一个Scala项目安装一个版本,通过ide可以为你创建的每一个项目管理一个定制版的Scala
    B.其他方式安装
    你可以选择它双击安装
    Spark环境搭建
    你也可以选择它解压缩
    Spark环境搭建
    Spark环境搭建
    配置环境变量,添加到path中
    Spark环境搭建
    执行命令
    scala -version
    Spark环境搭建
    安装成功.

Scala Linux下安装

操作系统版本:

CentOS release 6.8 (Final)

选择下载此版本
Spark环境搭建
上传到指定目录并解压缩

tar -zxvf scala-2.12.8.tgz

Spark环境搭建
配置环境变量

vim /etc/profile 
export SCALA_HOME=/usr/scala-2.12.8
export PATH=$PATH:$SCALA_HOME/bin

Spark环境搭建
执行命令 source /etc/profile 使环境立即生效
执行 scala -version
Spark环境搭建
Scala安装完成

Spark windows下安装

1、官网下载页面 https://spark.apache.org/downloads.html
Spark环境搭建
2、这里选择Spark版本2.4.0,打包类型为pre-built for apache hadoop 2.7 and later
3、点击下载
4、解压缩
Spark环境搭建
配置环境变量
Spark环境搭建
执行命令

run-example SparkPi 10

Spark环境搭建
执行命令

spark-shell

Spark环境搭建
查看 http://localhost:4040
Spark环境搭建
Spark安装完毕

Spark LINUX 安装

1、上传并解压缩

 tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz

2、配置环境变量

export SPARK_HOME=/usr/spark-2.4.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin

执行命令 source /etc/profile立即生效
3、执行spark-shell 或者 run-example SparkPi 10
出现异常:
Spark环境搭建
修改host

Vim /etc/hosts

添加一行

127.0.0.1	 iZ8vbcqz91cgdwzv6844ykZ	 localhost

保存并退出。中间的iZ8vbcqz91cgdwzv6844ykZ就是报错行里面不识别的主机名称,复制过来就行.
再次执行spark-shell
Spark环境搭建
安装完毕

Hadoop windows环境下安装

  1. 打开官网 http://hadoop.apache.org/
  2. 点击download
    Spark环境搭建
  3. 点击下载2.7.7的编译好的版本
    Spark环境搭建
  4. 点击推荐的镜像网站下载
    Spark环境搭建
  5. 下载好之后解压缩
    Spark环境搭建
  6. 重新回到官网,点击getstarted
  7. 点击图示wiki page,查看windows教程
    Spark环境搭建
  8. Hadoop开发人员在开发和测试期间使用的是Windows Server 2008和Windows Server 2008 R2。 由于Win32 API与相应的服务器SKU相似,Windows Vista和Windows 7也可能正常工作。
  9. 选择正确的java版本并设置java环境变量,Hadoop支持JDK1.7和1.6。设置的JAVA_HOME不能含有空格,如果你的java安装目录有空格,譬如 c:\Program Files\Java…,那么你配置JAVA_HOME的时候,需要使用Windows 8.3 Pathname 替换类似这种: c:\Progra~1\Java… instead of c:\Program Files\Java…
  10. 官网上接下去的步骤是从源码构建按照。我们不需要这么麻烦。刚刚,我们已经下好了编译好的包,bin目录下的命令是不能直接执行的,需要winutil.exe进行转换
    Spark环境搭建
  11. 下载winutils-master.zip压缩包,并解压缩
    Spark环境搭建
  12. 没有2.7.7对应的版本,怎么办,选一个最接近2.7.7的高版本,拷贝里面的文件至hadoop安装目录下的bin目录下。
  13. 在启动hadoop守护进程之前,需要编辑少量配置,配置的文件模板在安装目录下的etc/hadoop
    Spark环境搭建
  14. 配置hadoop环境变量,在etc/hadoop中查找hadoop-env.cmd,并向里面添加如下内容
	set HADOOP_PREFIX=c:\deploy 【这里是hadoop安装目录】
    set HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoop 
    set YARN_CONF_DIR=%HADOOP_CONF_DIR%
    set PATH=%PATH%;%HADOOP_PREFIX%\bin
  1. core-site.xml文件中添加以下内容
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://0.0.0.0:19000</value>
  </property>
</configuration>
  1. hdfs-site.xml文件中添加以下内容
 	<configuration>
      <property>
        <name>dfs.replication</name>
        <value>1</value>
      </property>
    </configuration>
  1. 最后,编辑slave,确保该文件有localhost
    默认配置将HDFS元数据和数据文件放在当前驱动器(安装目录所在的磁盘)上的\ tmp下。
    基本上,到这里配置就结束了。
    如果,想要使用yarn,需要配置下面文件,依旧是在/etc/hadoop下的文件mapred-site.xml中添加
<configuration>

   <property>
     <name>mapreduce.job.user.name</name>
     <value>%USERNAME%</value>
   </property>

   <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
   </property>

  <property>
    <name>yarn.apps.stagingDir</name>
    <value>/user/%USERNAME%/staging</value>
  </property>

  <property>
    <name>mapreduce.jobtracker.address</name>
    <value>local</value>
  </property>

</configuration>
文件mapred-site.xml中添加
<configuration>
  <property>
    <name>yarn.server.resourcemanager.address</name>
    <value>0.0.0.0:8020</value>
  </property>

  <property>
    <name>yarn.server.resourcemanager.application.expiry.interval</name>
    <value>60000</value>
  </property>

  <property>
    <name>yarn.server.nodemanager.address</name>
    <value>0.0.0.0:45454</value>
  </property>

  <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.server.nodemanager.remote-app-log-dir</name>
    <value>/app-logs</value>
  </property>

  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/dep/logs/userlogs</value>
  </property>

  <property>
    <name>yarn.server.mapreduce-appmanager.attempt-listener.bindAddress</name>
    <value>0.0.0.0</value>
  </property>

  <property>
    <name>yarn.server.mapreduce-appmanager.client-service.bindAddress</name>
    <value>0.0.0.0</value>
  </property>

  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>-1</value>
  </property>

  <property>
    <name>yarn.application.classpath</name>
    <value>%HADOOP_CONF_DIR%,%HADOOP_COMMON_HOME%/share/hadoop/common/*,%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*,%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/*,%HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/*,%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*</value>
  </property>
</configuration>
  1. 初始化环境变量,运行刚刚的hadoop-env.cmd设置环境变量,hadoop守护进程启动脚本会用到
  2. 配置系统环境变量,方便命令使用
    Spark环境搭建
    将变量添加到系统path中
    Spark环境搭建
  3. 格式化文件系统
    hdfs namenode -format
    看到这两行说明格式化成功
    Spark环境搭建
14/01/18 08:36:23 INFO namenode.FSImage: Saving image file \tmp\hadoop-username\dfs\name\current\fsimage.ckpt_0000000000000000000 using no compression
14/01/18 08:36:23 INFO namenode.FSImage: Image file \tmp\hadoop-username\dfs\name\current\fsimage.ckpt_0000000000000000000 of size 200 bytes saved in 0 seconds.
  1. 启动HDFS文件系统
    start-dfs.cmd
  2. 验证下HDFS是否运行,我们尝试将readme.txt放进去
    Spark环境搭建
  3. 切到此目录 执行命令:hdfs dfs -put README.txt /
    将 README.txt放到 hdfs 系统的根目录下
    查看我们根目录 :hdfs dfs -ls /
    Spark环境搭建
    到这里就结束了,yarn略过

Hadoop linux安装

  1. 基本要求
    a. linux环境下,需要安装Hadoop Java Versions推荐的JDK版本,Hadoop 2.7之后的版本要求jdk7.它是基于OpenJDK和Oracle(HotSpot)构建和测试的。
    Spark环境搭建
    b. 必须安装ssh并且必须运行sshd才能使用管理远程Hadoop守护程序的Hadoop脚本。
  2. 下载一个最新的稳定版本
  3. 解压缩这些发行版,编辑安装目录中文件etc / hadoop / hadoop-env.sh,定义一些参数,如下所示:
    export JAVA_HOME=/usr/java/latest
    
    同样的,为了方便使用Hadoop命令,也配置一下Hadoop的环境变量 /etc/profile
    export HADOOP_HOME=/usr/hadoop-2.7.7
    export PATH=$PATH:$HADOOP_HOME/bin
    
    执行source /etc/profile 使环境立即生效
  4. 执行命令hadoop,会显示hadoop脚本的使用说明
    Spark环境搭建
  5. 默认的,Hadoop被配置成非分布式模式,就像单个java进程,有利于debug
    在hadoop的安装目录下,执行以下命令,以下示例复制解压缩的conf目录以用作输入,然后查找并显示给定正则表达式的每个匹配项。 输出将写入给定的输出目录。
mkdir input
cp etc/hadoop/*.xml input
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input output 'dfs[a-z.]+'
cat output/*

这个步骤其实就是运行hadoop的mapreduce功能
Spark环境搭建

  1. Hadoop还可以在伪分布式模式下在单节点上运行,其中每个Hadoop守护程序在单独的Java进程中运行。
    etc/hadoop/core-site.xml:
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
etc/hadoop/hdfs-site.xml:
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

配置结束,接下去介绍如何在本地执行MapReduce job

MapReduce job

  1. Format the filesystem:
    执行命令:hdfs namenode -format
    Spark环境搭建
    看到类似这两行,说明格式化成功:
14/01/18 08:36:23 INFO namenode.FSImage: Saving image file \tmp\hadoop-username\dfs\name\current\fsimage.ckpt_0000000000000000000 using no compression
14/01/18 08:36:23 INFO namenode.FSImage: Image file \tmp\hadoop-username\dfs\name\current\fsimage.ckpt_0000000000000000000 of size 200 bytes saved in 0 seconds.
  1. 开启文件服务
./sbin/start-dfs.sh

Spark环境搭建
看到有个warning,
执行命令:

export HADOOP_ROOT_LOGGER=DEBUG,console
hdfs dfs -ls /

Spark环境搭建
可以看到glibc-2.14咩有找到,
执行命令

strings /lib64/libc.so.6 | grep GLIBC

Spark环境搭建
下载glibc-2.14,并编译安装
具体步骤参考: http://ftp.gnu.org/gnu/glibc/
重要: make操作完成后一定要执行make localedata/install-locales 否则会报
Spark环境搭建
当然,出这个错也好改
执行

vi /etc/sysconfig/i18n 

添加

LC_ALL=C
export LC_ALL

保存并退出
再执行下面的语句,使之生效

source /etc/sysconfig/i18n

退出shell,重新进入
执行 sbin/start-dfs.sh,期间要求输入几次密码,即登录用户的ssh密码
Spark环境搭建
NameNode - http://localhost:50070/
Spark环境搭建
文件服务开启成功

  1. 创建MapReduce jobs需要的文件目录
 	hdfs dfs -mkdir /user
    hdfs dfs -mkdir /user/<username>/input 这里的username是登录用户名,我的例子中是root
  1. 将输入文件复制到分布式文件系统中:当前pwd /usr/hadoop-2.7.
hdfs dfs -put etc/hadoop input

将当前目录下 etc/hadoop 拷贝到hdfs的/input中
绝对路径是

 hdfs://localhost:9000/input
  1. 执行样例
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input output 'dfs[a-z.]+'
  1. 查看输出文件
hdfs dfs -get output output 

将保存在hdfs output中的输出结果拷贝到当前文件目录的output 目录中
然后查看
到这里就全部结束了。


转载请注明出处

相关文章: