macoc 下 hadoop spark 安装和配置

安装 hadoop

brew install hadoop

使用 ssh 登陆

首先打开远程登陆权限:

系统偏好设置 -> 共享 -> 打开远程登录

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh localhost

测试Hadoop是否安装成功

Hadoop有三种安装模式:单机模式,伪分布式模式,分布式模式

测试单机模式

hadoop 的安装目录在 /usr/local/Cellar 中,进入 hadoop 目录,使用下面命令进行测试:

cd /usr/local/Cellar/hadoop/3.1.1/
mkdir input
cd input
echo 'hello world' > file1.txt
echo 'hello hadoop' > file2.txt
cd ..
hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount ./input ./output

cat output/part-r-00000

//输出为:
hadoop 1
hello 2
world 1

注意:不要在运行前建立,output 文件,否则会提示下面信息,导致运行失败:

org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/usr/local/Cellar/hadoop/3.1.1/output already exists

测试伪分布式模式

安装 spark

brew install apache-spark

修改配置信息

//安装后,还需要修改Spark的配置文件spark-env.sh
cd /usr/local/Cellar/apache-spark/2.4.0
cp ./libexec/conf/spark-env.sh.template ./libexec/conf/spark-env.sh

//编辑spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

验证spark

cd /usr/local/Cellar/apache-spark/2.4.0
bin/run-example SparkPi
bin/run-example SparkPi 2>&1 | grep "Pi is"

使用spark shell编写代码

// 启动Spark Shell
spark-shell
// 退出Spark Shell
:quit

通过 spark-shell 启动时,可以查看到 Spark 以及 Scala 的版本信息。

独立应用程序编程

接着我们通过一个简单的应用程序 SimpleApp 来演示如何通过 Spark API 编写一个独立应用程序。使用 Scala 编写的程序需要使用 sbt 进行编译打包,相应的,Java 程序使用 Maven 编译打包,而 Python 程序通过 spark-submit 直接提交。

Scala独立应用编程

// 安装sbt
brew install sbt
// 验证安装
sbt version
// 显示信息为:
[info] Loading project definition from /Users/chenxiaolong/project
[info] Set current project to chenxiaolong (in build file:/Users/chenxiaolong/)
[info] 0.1.0-SNAPSHOT

mkdir ./ScalaProjects        # 创建应用程序根目录
mkdir -p ./ScalaProjects/src/main/scala     # 创建所需的文件夹结构
cd ./ScalaProjects/test/src/main/scala
vim SimpleApp.scala

SimpleApp.scala 内容为:

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
    def main(args: Array[String]) {
        val logFile = "file:///usr/local/Cellar/apache-spark/2.4.0/README.md" // Should be some file on your system
        val conf = new SparkConf().setAppName("Simple Application")
        val sc = new SparkContext(conf)
        val logData = sc.textFile(logFile, 2).cache()
        val numAs = logData.filter(line => line.contains("a")).count()
        val numBs = logData.filter(line => line.contains("b")).count()
        println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
    }
}

同时在 test 目录下,新建 simple.sbt 文件,添加内容为:

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"

查看 test 目录下的文件结构为:

➜  test find .
.
./simple.sbt
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala

test 目录下,使用 sbt package 命令打包。打包成功后,显示信息为:

通过 spark-submit 运行程序:

spark-submit --class "SimpleApp" ./target/scala-2.11/simple-project_2.11-1.0.jar 2>&1 | grep "Lines with a:"

输出为:

Lines with a: 62, Lines with b: 31

Java独立应用编程

参考资料:

其他链接: