diff --git a/chapter1/1.3Spark完全分布式环境搭建.md b/chapter1/1.3Spark完全分布式环境搭建.md index 1b6ac29..b9cfb2c 100644 --- a/chapter1/1.3Spark完全分布式环境搭建.md +++ b/chapter1/1.3Spark完全分布式环境搭建.md @@ -21,21 +21,19 @@ ### 1.3.1 下载Spark安装包 -到`Spark`官网:https://archive.apache.org/dist/spark/ 下载 -与你已搭建的`Hadoop`版本相匹配的安装包,这里选择`Hadoop`版本为`2.6.0`, -`Spark`版本为`2.2.0`。 +到`Spark`官网:下载地址 下载 +`Hadoop`版本为`2.7`,`Spark`版本为`2.3.4`的`spark`安装包。

- +

- ### 1.3.2 解压安装包 -选择`master`节点安装`Spark`,将下载的`spark-2.2.0-bin-hadoop2.6.tgz`安装包放在该节点的`/home/hadoop/soft/`目录下,然后执行`tar –zxvf spark-2.2.0-bin-hadoop2.6.tgz`命令进行解压。 +首先选择`master`节点安装`Spark`,将下载的`spark-2.3.4-bin-hadoop2.7.tgz `安装包上传至该节点的`/home/hadoop/soft/`目录下,然后执行`tar –zxvf spark-2.3.4-bin-hadoop2.7.tgz `命令进行解压。 ### 1.3.3 配置环境变量 @@ -44,11 +42,13 @@ 不要忘了`source /etc/profile` +该步骤所有节点均可执行 + +### 1.3.4 修改 spark-env.sh 配置文件 -#####修改 spark-env.sh 配置文件 首先生成一份`spark-env.sh`文件: -切换目录到: `/home/hadoop/soft/spark-2.2.0-bin-hadoop2.6/conf` +切换目录到: `/home/hadoop/soft/spark-2.3.4-bin-hadoop2.7.tgz/conf` 执行命令:`mv spark-env.sh.template spark-env.sh` 修改`spark-env.sh`文件: @@ -56,16 +56,18 @@ 执行命令:`vi spark-env.sh`,添加以下内容: ```shell -#指定JAVA_HOME位置 +#指定JAVA安装路径 export JAVA_HOME=java安装路径 -#spark master webui 端口,默认是 8080,跟 tomcat 冲突 +#指定SCALA安装位置 +export SCALA_HOME=scala安装路径 +#指定spark master webui 端口,默认是 8080,跟 tomcat 冲突 SPARK_MASTER_WEBUI_PORT=8888 #指定Master节点IP -export SPARK_MASTER_IP=masterIP +export SPARK_MASTER_IP=master节点IP ``` -### 1.3.4 修改 slaves 文件 +### 1.3.5 修改 slaves 文件 首先生成一份`slaves`文件 @@ -80,22 +82,24 @@ worker1 worker2 ``` -### 1.3.5 分发安装包 -把该节点的`spark`安装包分发到`worker1`节点和`worker2`节点(可通过`linux`的`scp`命令)。 +### 1.3.6 分发安装包 +把master节点的`spark`安装包分发到`worker1`节点和`worker2`节点(可通过`linux`的`scp`命令)。 -#####启动spark +### 1.3.7 启动spark 切换到`master`节点安装目录的`/sbin`目录下 执行命令启动`Spark`集群:`./start-all.sh` -### 1.3.6 检查webUI界面 -在浏览器输入如下地址:`http://master地址:8888/`,可见如下页面。 +### 1.3.7 检查webUI界面 + +启动完成后,在浏览器输入如下地址:`http://master地址:8888/`,可见如下页面。

+在该图片中,我们可以看到`Alive Workers: 3`,表示有三个运行中的`worker`节点。 至此,非高可用的`Standalone`模式即安装成功了。 diff --git a/chapter2/2结构化数据分析与处理简介.md b/chapter2/2结构化数据分析与处理简介.md index 1c1403b..4af4a29 100644 --- a/chapter2/2结构化数据分析与处理简介.md +++ b/chapter2/2结构化数据分析与处理简介.md @@ -2,12 +2,12 @@ ## 2.1 什么是Spark SQL -SparkSQL是spark用来处理结构化的一个模块,它提供一个抽象的数据集DataFrame,并且是作为分布式SQL查询引擎的应用。 -我们之前已经学习了hive,它将HiveSQL转换成MR,然后提交到集群上去执行,减少编写MR查询的复杂性,但是因为采用计算框架,所以执行效率比较慢,所以spark SQL就应运而生。 +`Spark SQL`是`Spark`用来处理结构化的一个模块,它提供一个抽象的数据集`DataFrame`,并且是作为分布式`SQL`查询引擎的应用。 +或许你之前学习过`Hive`,我们知道它将`HiveSQL`转换成`MR`,然后提交到集群上去执行,减少编写`MR`查询的复杂性,但是因为采用计算框架,执行效率比较慢,所以`Spark SQL`就应运而生。 -我们编写Spark SQL代码时从何开始呢?答案就是SparkSession。 +我们编写`Spark SQL`代码时从何开始呢?答案就是`SparkSession`。 ### 2.2 什么是SparkSession `Spark`中所有功能的入口点都是`SparkSession`类。要创建基本的`SparkSession`,只需使用`SparkSession.builder()`。 @@ -24,14 +24,15 @@ spark = SparkSession \ print(spark.version); ``` -有了SparkSession,下一步就是创建DataFrames。 +有了`SparkSession`,下一步就是创建`DataFrames`。 ### 2.3 创建DataFrames -使用`SparkSession`可以从现有`RDD`,`Hive`表或`Spark`数据源(`json`,`parquet`,`jdbc`,`orc`,`libsvm`,`csv`,`text`)等格式文件创建DataFrame。 +使用`SparkSession`可以从现有`RDD`,`Hive`表或`Spark`数据源(`json`,`parquet`,`jdbc`,`orc`,`libsvm`,`csv`,`text`)等格式文件创建`DataFrame`。 -以下示例为读取Json文件创建DataFrame。 -`df =spark.read.json("examples/src/main/resources/people.json")` -people.json数据如下: +以下示例为读取`Json`文件创建`DataFrame`。 +`df =spark.read.json("/people.json")` + +`people.json`数据如下: ```json {"name":"Michael"} @@ -40,9 +41,10 @@ people.json数据如下: ``` -有了DataFrames之后,我们就可以对数据进行相应操作; +有了`DataFrames`之后,我们就可以对数据进行相应操作. + ### 2.4使用DataFrames -在Python中,可以通过属性(df.age)或通过索引(df ['age'])(推荐使用)访问DataFrame的列。 +在`Python`中,可以通过属性`df.age`或通过索引`df ['age']`(推荐使用)访问`DataFrame`的列。 举例如下: ```python @@ -63,7 +65,8 @@ df.select("name").show() | Justin| +-------+ ``` -我们也可以通过编写SQL语句的方式执行上述操作。 + +我们也可以通过编写`SQL`语句的方式执行上述操作。 ### 2.5 通过SQL语句的方式 ```python @@ -85,24 +88,24 @@ sqlDF.show() 以下示例可将结果以`parquet`格式文件保存到`F:\\test\\anamesAndAges`路径。 ``` -//写入并保存到指定路径 +#写入并保存到指定路径 df.select("name", "age").write.format("parquet").save("F:\\test\\anamesAndAges") ``` ### 2.7 保存模式介绍 -`save()`方法支持设置保存模式。 +`save`方法支持设置保存模式。 -`SaveMode` 类型如下: + 类型如下: -| 所有语言 | 含义 | +| 所有语言 | 说明 | | ------------ | ------------ | -| `"error" or "errorifexists"` (默认) | 将`Dataset`保存到数据源时,如果数据已存在,则会引发异常。 | -| ` "append" ` | 将`Dataset`保存到数据源时,如果数据/表已存在,则Dataset的内容应附加到现有数据。 | -| `"overwrite"` | 覆盖模式意味着在将`Dataset`保存到数据源时,如果数据/表已经存在,则预期现有数据将被`Dataset`的内容覆盖。 | -| `"ignore"` | 忽略模式意味着在将`Dataset`保存到数据源时,如果数据已存在,则预期保存操作不会保存`Dataset`的内容而不会更改现有数据。这与`CREATE TABLE IF NOT EXISTSSQL`中的类似。 | +| `"error" or "errorifexists"` (默认) | 将`DataFrame`保存到数据源时,如果数据已存在,则会引发异常。 | +| ` "append" ` | 将`Dataset`保存到数据源时,如果数据/表已存在,则DataFrame的内容应附加到现有数据。 | +| `"overwrite"` | 覆盖模式意味着在将`DataFrame`保存到数据源时,如果数据/表已经存在,则预期现有数据将被`DataFrame`的内容覆盖。 | +| `"ignore"` | 忽略模式意味着在将`DataFrame`保存到数据源时,如果数据已存在,则预期保存操作不会保存`DataFrame`的内容而不会更改现有数据。这与`CREATE TABLE IF NOT EXISTSSQL`中的类似。 | ``` -//覆盖原有数据并写入到F:\\test\\anamesAndAges路径上 +#覆盖原有数据并写入到F:\\test\\anamesAndAges路径上 df.select("name", "age").write.mode("overwrite").format("parquet").save("F:\\test\\anamesAndAges") ``` \ No newline at end of file