Spark之路:(一)Scala + Spark + Hadoop环境搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sage_wang/article/details/79236051

一、Spark 介绍

Spark是基于内存计算的大数据分布式计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。

  • 1.提供分布式计算功能,将分布式存储的数据读入,同时将任务分发到各个节点进行计算;
  • 2.基于内存计算,将磁盘数据读入内存,将计算的中间结果保存在内存,这样可以很好的进行迭代运算;
  • 3.支持高容错;
  • 4.提供多计算范式;

1、Spark与Hadoop关系

  • Spark是一个计算框架。
  • Hadoop是包含计算框架MapReducehe分布式文件系统HDFS。
  • Spark是MapReduce的替代方案,而且兼容HDFS、Hive等分布式存储系统,可融入Hadoop生态。

2、Spark与Scala关系

  • Spark是用Scala开发的,因为计算数据,Scala它是函数式编程,它实现算法非常简洁优雅。
  • Scala即有面向对象组织项目工程的能力,又有计算数据的功能。

3、Scala与Java的关系:

  • 它们都是基于JVM的,但Scala可以调用Java的任何功能,比如Spark运行在Hadoop上,它可以调用Hadoop上的一切功能。
  • 你可以认为Scala它是一个升级版的Java,因为Scala它本身是一门支持面向对象的语言,在Scala中,一切皆对象,它是一门纯面向对象的语言,同时Scala也是面向对象以及函数式结合的语言。

4、大数据的开发语言是Scala,原因如下:

  • 大数据的本身是计算数据,而Scala即有面向对象组织项目工程的能力,又有计算数据的功能。
  • 现在大数据事实上的计算标准框架Spark,它是用Scala开发的,因为计算数据,Scala它是函数式编程,它实现算法非常简洁优雅。
  • 例:kafka,它是一个消息中间件,如果外部数据要流进大数据中心,我们一般都要用kafka作适配器,那如果大数据中心的数据流到外部,也是用kafka(如Spark计算的数据要交给HBASE或MySql,期间我们都会用kafka),很多的大数据组件都是用的Scala编写的,SO,如果你想成为一个顶级的大数据开发高手,你一定要掌握Scala。

二、环境搭建

Mac 下 Hadoop + Spark + Scala

1、安装前必备

  • 操作系统:Mac OS X
  • JDK:1.8.0_151
  • 命令终端:~/.bash_profile下添加
  • 软件包管理工具:brew(能够方便的安装和卸载软件,使用brew cash还可以安装图形化的软件,类似于Ubuntu下的apt-get以及前端里的npm)

2、安装配置Hadoop

2.1、配置ssh

配置ssh就是为了能够实现免密登录,这样方便远程管理Hadoop并无需登录密码在Hadoop集群上共享文件资源。
如果你的机子没有配置ssh的话,在命令终端输入ssh localhost是需要输入你的电脑登录密码的。配置好ssh后,就无需输入密码了。
第一步就是在终端执行ssh-keygen -t rsa,之后一路enter键,当然如果你之前已经执行过这样的语句,那过程中会提示是否要覆盖原有的key,输入y即可。
第二步执行语句cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys用于授权你的公钥到本地可以无需密码实现登录。
理论上这时候,你在终端输入ssh lcoalhost就能够免密登录了。

Q & A

1、mac无法ssh localhost
解决方案:

  • 编辑/etc/sshd_config文件,注释掉
    #ForceCommand /usr/local/bin/ssh_session
  • 启动sshd服务:
    sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
  • 停止sshd服务:
    sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist
  • 查看是否启动:
    sudo launchctl list | grep ssh
  • 如果看到下面的输出表示成功启动了:
    - 0 com.openssh.sshd
  • 最后ssh localhost 成功

2、权限问题
问题报错:
permission denied 显然这是权限问题,我直接为ssh目录赋予777、740和700都无效,还是报同样的错。
解决方案:
设置authorized_keys权限——chmod 600 authorized_keys
设置.ssh目录权限——chmod 700 -R .ssh
参考资料给出的解释是:文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,数字签名也不支持–!。

2.2、安装Hadoop

  • 安装命令,brew install hadoop
  • 安装路径,/usr/local/Cellar/hadoop/2.8.2

2.3、修改hadoop-env.sh

  • 进入安装目录如下,找到并打开hadoop-env.sh文件,
    /usr/local/Cellar/hadoop/2.8.2/libexec/etc/hadoop
  • 注释如下代码
    # export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"

  • 并在后面添加如下代码,JAVA_HOME为本机jdk版本
    export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="

    export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home"

2.4、配置hdfs地址和端口

  • 进入目录/usr/local/Cellar/hadoop/2.8.2/libexec/etc/hadoop,
  • 打开core-site.xml将<configuration></configuration>替换为
      <property>
     <name>hadoop.tmp.dir</name>
<value>/usr/local/Cellar/hadoop/hdfs/tmp</value>
    <description>A base for other temporary directories.</description>
  </property>
  <property>
     <name>fs.default.name</name>
     <value>hdfs://localhost:8020</value>
  </property>
</configuration>

2.5、配置mapreduce中jobtracker的地址和端口

  • 进入目录/usr/local/Cellar/hadoop/2.8.2/libexec/etc/hadoop,
  • 在相同的目录下,你可以看到一个mapred-site.xml.template首先将文件重命名为mapred-site.xml,
  • 同样将<configuration></configuration>替换为
<configuration>
      <property>
        <name>mapred.job.tracker</name>
        <value>localhost:8021</value>
      </property>
</configuration>

2.6、修改hdfs备份数

相同目录下,打开hdfs-site.xml加上

<configuration>
   <property>
     <name>dfs.replication</name>
     <value>1</value>
    </property>
</configuration>

2.7、格式化HDFS

这个操作相当于一个文件系统的初始化,执行命令hdfs namenode -format
在终端最终会显示成功
hdfs namenode -format.jpeg

2.8、环境变量配置

  • 执行编辑命令,sudo vim ~/.profile
  • add如下代码:
    #hadoop
    export HADOOP_HOME=/usr/local/Cellar/hadoop/2.8.2
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

  • 使之生效,source ~/.profile

2.9、检查hadoop

  • hadoop version
shiqingdeMacBook-Air:local shiqingwang$ hadoop version
Hadoop 2.8.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 66c47f2a01ad9637879e95f80c41f798373828fb
Compiled by jdu on 2017-10-19T20:39Z
Compiled with protoc 2.5.0
From source with checksum dce55e5afe30c210816b39b631a53b1d
This command was run using /usr/local/Cellar/hadoop/2.8.2/libexec/share/hadoop/common/hadoop-common-2.8.2.jar

2.10、 启动关闭Hadoop服务

  • 启动/关闭HDSF服务
    start-dfs.sh
    stop-dfs.sh
  • 启动成功后,我们在浏览器中输入http://localhost:50070可以看到
    start-dfs.png

  • 启动/关闭YARN服务
    start-yarn.sh
    stop-yarn.sh

  • 启动/关闭Hadoop服务(等效上面两个)
    start-all.sh
    stop-all.sh

  • 启动成功后,我们在浏览器中输入http://localhost:8088可以看到
    start-all.png

3、安装配置Spark

3.1、下载路径:http://spark.apache.org/downloads.html

3.2、选择版本:spark-2.2.1-bin-hadoop2.7

3.3、环境变量

  • 执行编辑命令,sudo vim ~/.profile
  • add如下代码:
    #spark
    export SPARK_HOME=/usr/local/spark
    export PATH=$PATH:$SPARK_HOME/bin
  • 配置生效,source ~/.profile

3.4、检查版本

  • 命令:spark-shell
    spark-shell.png

4、安装配置Scala

Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala 运行在Java虚拟机上,并兼容现有的Java程序。
Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。

4.1、安装命令,brew install scala

4.、检查版本,scala -version

Scala code runner version 2.12.4 -- Copyright 2002-2017, LAMP/EPFL and Lightbend, Inc.
scala> println("Hello, world!")
Hello, world!
scala> :q

4.3、环境变量

  • 执行编辑命令,sudo vim ~/.profile
  • add如下代码:
    #scala
    export SCALA_HOME=/usr/local/scala
    export PATH=$PATH:$SCALA_HOME/bin
  • 配置生效,source ~/.profile

Scala + Spark + Hadoop环境配置,终,终,终于大功告成!!!

附录

完整的环境变量配置文件如下

cat ./profile

#scala
export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin

#hadoop
export HADOOP_HOME=/usr/local/Cellar/hadoop/2.8.2
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

#spark
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin

相关网址推荐:

猜你喜欢

转载自blog.csdn.net/sage_wang/article/details/79236051