来源:

  慕课网 Spark SQL慕课网日志分析_大数据实战

目标:

  spark系列软件的伪分布式的安装、配置、编译

  spark的使用

系统:

  mac 10.13.3 /ubuntu 16.06,两个系统都测试过

软件:

  hadoop,hive,spark,scala,maven

  hadoop伪分布式、spark伪分布式

详细:

  software 存放安装的软件包
  app 所有软件的安装目录
  data 课程中所有使用的测试数据目录
  source 软件源码目录,spark

1)下载hadoop
archive.cloudera.com/cdh5/cdh/5/

2)Java环境配置
vim ~/.bashrc
source ~/.bashrc

export JAVA_HOME=/home/sumeng/app/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/home/sumeng/app/hadoop-2.6.0-cdh5.7.0
export PATH=$HADOOP_HOME/bin:$PATH

3)机器参数
修改机器名 sudo vim /etc/hostname
修改IP与hostname的映射关系 sudo vim /etc/hosts
ssh免密码登录
ssh-keygen -t rsa,然后一路回车
~$ ls -la 可以查看隐藏文件
~$ cd .ssh 打开隐藏文件ssh
里面有两个文件 id_rsa id_rsa.pub
~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

4)Hadoop配置文件修改:~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop(伪分布式)
1、hadoop-env.sh
vim etc/hadoop/hadoop-env.sh,修改其中的这句话:
export JAVA_HOME=/home/sumeng/app/jdk1.8.0_161

2、core-site.xml
vim etc/hadoop/core-site.xml,添加
#在hadoop2.x中用8020,1.x中端口是9000
<property>
<name>fs.defaultFS</name>
<value>hdfs://lenove:8020</value>
</property>
<property>
     <name>hadoop.tmp.dir</name>
     <value>/home/sumeng/app/temp</value>
  </property>

3、hdfs-site.xml
vim etc/hadoop/hdfs-site.xml
#hdfs的副本数
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
5)格式化HDFS
注意:这一步操作,只是在第一次时执行,每次如果都格式化的话,HDFS上的数据就会被清空
~$ bin/hdfs namenode -format

INFO common.Storage: Storage directory /home/sumeng/app/temp/dfs/name has been successfully formatted.

6)启动HDFS
在~/app/hadoop-2.6.0-cdh5.7.0安装目录下,bin是客户端的脚本,etc是配置文件,sbin是服务器相关的脚本(比如启动停止)

#启动namenode datanode
$ sbin/start-dfs.sh

可以访问lenove:50070

7)停止HDFS
$ sbin/stop-dfs.sh

#########################################################
HDFS shell常用命令
hadoop fs -ls / 查看hdfs的根目录
##########################################################
YARN 架构
一个ResourceManager 多个 NodeManager。ResourceManager:负责整个集群的资源管理和调度
修改配置文件
1)yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

2)mapred-site.xml
$ cd /home/sumeng/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop
$ cp mapred-site.xml.template mapred-site.xml
$ vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3)启停YARN
$ sbin/start-yarn.sh
$ sbin/stop-yarn.sh
4)web地址:http://lenove:8088/
########################################################
Mapreduce作业提交到Yarn上运行
在目录/home/sumeng/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce下
ha

########################################################
大数据数据仓库 Hive
简单容易上手,提供类似SQL查询语言HQL
为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储)
统一的元数据管理(可与Prestp/SparkSQL共享数据)

Hive 底层执行引擎:Mapreduce、Spark
1)下载Hive
网址:archive.cloudera.com/cdh5/cdh/5/
搜索:hive-1.1.0-cdh5.7.0.tar.gz
进入software目录,输入命令:wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
解压到~/app/下
2)系统环境变量vim ~/.bashrc
export HIVE_HOME=/home/sumeng/app/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
3)修改配置文件
1)hive-env.sh
在目录/home/sumeng/app/hive-1.1.0-cdh5.7.0/conf下
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
添加一句HADOOP_HOME=/home/sumeng/app/hadoop-2.6.0-cdh5.7.0
2)hive-site.xml
~/app/hive-1.1.0-cdh5.7.0/conf$ vim hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1:3306/sparkSQL?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
</configuration>
4)安装mysql:
https://www.jianshu.com/p/a8e4068a7a8a
在系统偏好中启动mysql服务
登陆命令:mysql -uroot -p
下载mysql驱动:
将mysql-connector-java-5.1.46-bin.jar拷贝到$HIVE_HOME/lib/下
5)启动hive:
先启动hadoop的dfs/yarn
$HIVE_HOME/bin/hive
在后台hive sql提交执行后会生成mr作业,并在yarn上运行
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
create table dept(
deptno int,
dname string,
location string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

load data local inpath '/Users/sumeng/data/emp.txt' into table emp;
###########################################################
安装scala2.11.8:
安装maven3.3.9:
https://www.jianshu.com/p/d28276f5a991
###########################################################
Spark
MapReduce的局限性
执行效率低下
map 输出结果在磁盘上,reduce再读取
mapreduce每个作业都是以进程的形式,启动销毁成本很高,jvm复用:多个作业跑在同一个进程

1)下载
官网上有pre-build for Hadoop2.6预编译版本,但是2.6.0,2.6.1等都是有区别的,所以选择源码下载
右击选择复制链接,用wget方式下载
sumeng@lenove:~/sofrware$ wget https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0.tgz
解压 tar -zxvf spark-2.1.0.tgz -C ~/app/

2)编译
1)maven版本3.3.9及其以上;java7+
2)不需要--执行export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
3)pom.xml添加:
查找/repositories,添加
<repository>
<id>cloudera</id>
<url>http://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
4)如果编译的scala版本是2.10
执行命令./dev/change-scala-version.sh 2.10
5)mvn编译命令
./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver -U -X
6)在spark目录下会出tgz文件
7)解压到~/app/,配置环境变量
3)启动
local模式,2个线程:
spark-shell --master local[2]
standalone模式:
1个master+n个worker\
注意:以下操作都是在编译之后的spark-2.1.0-bin-2.6.0-cdh5.7.0目录下
1)
在conf/目录下
cp spark-env.sh.template spark-env.sh
vim spark-env.sh:
SPARK_MASTER_HOST=lenove
SPARK_WORKER_CORES=2 #每个worker多少个core
SPARK_WORKER_MEMORY=2g #每个worker的内存
SPARK_WORKER_INSTANCES=1 #worker的实例数

这时可以在sbin/目录下执行 ./start-all.sh ./stop-all.sh 启动服务端,可以在logs/目录下查看日志,启动的core/内存信息
在bin/目录下提交任务:spark-shell --master spark://localhost:7077
(bin目录已经配置到环境变量中,可以直接输入命令)
每一个spark-shell就是一个作业

2)补充:--Mac跳过 --ubuntu14.04中报错没有设置JVAA_HOME
在sbin的目录下的spark-config.sh 文件下未添加JAVA_HOME的索引
在该配置文件下添加 :
export JAVA_HOME=/usr/java/jdk1.8.0_111 即可
###########################################################
Hive :
hive on mapreduce:sql-->翻译为mapreduce作业,效率低速度慢
改进hive on spark-->shark,缺点hql解析依赖hive,仅仅把物理执行计划从mr替换为spark作业
Shark终结后产生两个分支:
1)hive on spark
是hive的一部分,hive社区,源码是在Hive中
其目的是把Spark作为Hive的一个计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算。
2)Spark SQL
Spark社区,源码是在Spark中
Spark SQL概述
支持SQL / Hive QL
应用不仅局限于sql
访问hive json等文件的数据
提供了SQL的api,DataFrame和Dataset的api
3)两者区别
结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序
需要理解的是,Hive和SparkSQL都不负责计算,它们只是告诉Spark,你需要这样算那样算,但是本身并不直接参与计算。
两者sql引擎不一样,计算引擎都是spark

第一步:配置idea的scala环境
下载Scala插件+maven
第二步:编写程序
第三步: cd /Users/sumeng/IdeaProjects/ImoocSparkSQLProject 进入项目所在目录
mvn clean package -DskipTests对项目进行编译
输出以下结果:
[INFO] Building jar: /Users/sumeng/IdeaProjects/ImoocSparkSQLProject/target/sql-1.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
第四步:执行.sh文件

参考官方文档:http://spark.apache.org/docs/2.1.0/sql-programming-guide.html#getting-started

###########################################################
注意:每个 Spark Application 都会开启一个自己的 Web UI,默认端口号为4040。 访问地址: http://:4040 。如果同一 node 上运行了多个 Spark Application 则这些应用的端口将会往上累加,eg : 4040,4041,4042 。
在控制台查看spark job:默认端口是localhost:4040

spark shell & spark sql---spark操作hive表
总结为:
hive-site.xml配置文件
--jars传递mysql驱动包
实际操作:
spark-shell操作hive
1、启动hadoop的dfs、yarn、hive ,可以通过jps验证是否开启
2、spark shell 如果想访问hive的元数据,需要作如下拷贝
meng$ cp hive-site.xml ~/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/conf/
3、spark-shell --help
启动:
./spark-shell --master local[2] --jars ~/software/mysql-connector-java-5.1.46-bin.jar
执行相关命令:
scala> spark.sql("select * from emp e join dept d on e.deptno=d.deptno").show

期间出现报错,但不影响使用
ERROR ObjectStore: Version information found in metastore differs 1.1.0 from expected schema version 1.2.0. Schema verififcation is disabled hive.metastore.schema.verification so setting version.
解决error:在~/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/conf/hive-site.xml中添加下面内容
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>

spark-sql 操纵hive表
0、部分配置需要参考spark-shell
1、以local模式启动spark作业
./spark-sql --master local[2] --jars ~/software/mysql-connector-java-5.1.46-bin.jar
spark-sql控制台:默认端口是localhost:4040
###########################################################
1、启动hadoop
2、启动thriftserver服务--默认端口是10000
./sbin/start-thriftserver.sh --master local[2] --jars ~/software/mysql-connector-java-5.1.46-bin.jar
3、启动beeline客户端
./beeline -u jdbc:hive2://localhost:10000 -n sumengdeMacBook-Pro
4、在beeline客户端输入查询命令
show tables;
select * from emp e join dept d on e.deptno = d.deptno;

5、可以在启动一个beeline
6、每个 Spark Application 都会开启一个自己的 Web UI,默认端口号为4040。 访问地址: http://:4040 。如果同一 node 上运行了多个 Spark Application 则这些应用的端口将会往上累加,eg : 4040,4041,4042 。
在控制台查看spark job:默认端口是localhost:4040
7、停止thriftserver服务
./stop-thriftserver.sh

rhriftserver 和普通的spark-shell spark-sql有什么区别
1)没启动一个spark-shell或spark-sql,都会启动一个spark Application
2)启动一个thriftserver,不管你启动多少个客户端(beeline/code),永远都是只有一个spark allication
开发中,经常是编写的多个spark应用程序,通过jdbc连接thriftserver,解决了一个数据共享的问题,多个客户端可以共享数据
###########################################################
jdbc编程方式访问thriftserver服务,进而spark sql数据
maven添加依赖
注意:在使用jdbc开发时,要先启动thriftserver

###########################################################
第六章:DataFrame&DataSet
简介:
dataset是分布式数据集
dataframe是一种dataset,以列(列名、列的类型、列值)的形式构成的分布式数据集,出现在R/Pandas
rdd 分布式可以并行处理的数据集
dataframe更像数据库的表
RDD:
java/scala ==> Jvm
python ==> python runtime
DataFrame:
java/scala/python ==> Logic plan 逻辑执行计划

DataFrame 基本API操作:
idea编写DataFrameAPP,将json文件加载成一个dataframe,并进行sql操作
参考DataFrameRDDAPP.scala文件
DataFrame与RDD互操作interoperating with RDD
操作之一:反射方式
操作之二:缺少视频6-7

DataFrame API操作案例实战:

操作外部数据源
7-2,有一张架构图,很好
7-3,视频缺失

7-6,操作Hive表数据--sparl-shell下
0)前期工作
拷贝hive-site.xml配置文件到conf目录
--jars传递mysql驱动包(hive的元数据在mysql存放)
1)启动一个spark-shell
2)未启动hadoop,照样执行成功,因为只需要访问mysql上的元数据即可,不需要访问hdfs
scala> spark.sql("show tables").show
3)执行这句话就需要提前启动hadoop。以下两句等价。
scala> spark.table("emp").show
scala> spark.sql("select * from emp").show
4)sql与dataframel API结合使用。sql的返回值是DataFrame类型。
spark.sql("select deptno,count(1) from emp group by deptno").filter("deptno != 20").show
5)插入数据
spark.sql("insert into emp values (70,null,null,null,null,null,null,null)")
6)创建新的表
spark.sql("select deptno,count(1) as mount from emp group by deptno").write.saveAsTable("hive_table")
7)注意:
SparkSQL在集群中运行,将一个查询任务分解成大量的Task分配给集群中的各个节点来运行。查询数据时,shuffle的时候使用了缺省的,即200个partition,也就是200个Task
在生产环境一定要注意设置spark.sql.shuffle.partitions,默认是200
spark.sqlContext.setConf("spark.sql.shuffle.partitions","10")

7-7,操作MySQL表数据--sparl-shell下
可参考官方文档
返回是Dataframe类型,对应TBLS表
val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:mysql://127.0.0.1:3306/sparkSQL").option("dbtable", "sparkSQL.TBLS").option("user", "root").option("password", "root").option("driver", "com.mysql.jdbc.Driver").load()

7-8综合使用
关联mysql和hive表数据关联操作
1)向mysql插入DEPT表
create database spark;
use spark;

create table DEPT(
DEPTNO int(2) primary key,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);

insert into DEPT values(10,"ACCOUNTING","NEW YORK");
insert into DEPT values(20,"RESEARCH","DALLAS");
INSERT into DEPT values(30,"SALES","CHICAGO");
insert into DEPT values(40,"OPERATIONS","BOSTON");
2)hive中已经存在的emp表
3) 联合操作
参考idea中的代码

Spark SQL慕课网日志分析(1)--系列软件(单机)安装配置使用的更多相关文章

  1. 以慕课网日志分析为例-进入大数据Spark SQL的世界

    下载地址.请联系群主 第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目 ...

  2. 【慕课网实战】八、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    用户行为日志:用户每次访问网站时所有的行为数据(访问.浏览.搜索.点击...)     用户行为轨迹.流量日志   日志数据内容: 1)访问的系统属性: 操作系统.浏览器等等 2)访问特征:点击的ur ...

  3. 【慕课网实战】四、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    文本文件进行统计分析:id, name, age, city1001,zhangsan,45,beijing1002,lisi,35,shanghai1003,wangwu,29,tianjin... ...

  4. 【慕课网实战】九、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    即席查询普通查询 Load Data1) RDD DataFrame/Dataset2) Local Cloud(HDFS/S3) 将数据加载成RDDval masterLog = sc.textFi ...

  5. 【慕课网实战】七、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    用户:     方便快速从不同的数据源(json.parquet.rdbms),经过混合处理(json join parquet),     再将处理结果以特定的格式(json.parquet)写回到 ...

  6. 【慕课网实战】六、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    DataFrame它不是Spark SQL提出的,而是早起在R.Pandas语言就已经有了的.   A Dataset is a distributed collection of data:分布式的 ...

  7. 【慕课网实战】一、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    课程整套CDH相关的软件下载地址:http://archive.cloudera.com/cdh5/cdh/5/ cdh-5.7.0 生产或者测试环境选择对应CDH版本时,一定要采用尾号是一样的版本 ...

  8. 【慕课网实战】五、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    提交Spark Application到环境中运行spark-submit \--name SQLContextApp \--class com.imooc.spark.SQLContextApp \ ...

  9. 【慕课网实战】三、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    前置要求: 1)Building Spark using Maven requires Maven 3.3.9 or newer and Java 7+ 2)export MAVEN_OPTS=&qu ...

随机推荐

  1. erlang-sunface的博客地址

    erlang-sunface的博客地址: http://blog.csdn.net/abv123456789/article/category/2206185

  2. List<T>转DataTable

    /// <summary> /// 将集合类转换成DataTable /// </summary> /// <param name="list"> ...

  3. jdk 配置时时区设置

    在eclipse中的 Default VM Arguments:添加 -Duser.timezone=Aisa/Shanghai

  4. Hadoop1.2.1 配置文件详解

    首先我们先回顾一下Hadoop的一些概念: Apache Hdoop 1.x 组成 NameNode(元数据服务器) Secondary NameNode(辅助元数据服务器) JobTracker(任 ...

  5. VS2010类模板更改,增加版权等等信息

    本文转载自XDOTNET 在开发过程中往往需要在每一个页面(类)增加注释等等内容,VS2010中可以修改模板,在原有模板中增加一个类,会引用System等等命名空间,以及一些程序集.下面我们来看看如何 ...

  6. Struts入门(三)深入Struts用法讲解

    访问Servlet API Action搜索顺序 动态方法调用 指定多个配置文件 默认Action Struts 后缀 接收参数 处理结果类型 1.访问Servlet API 首先我们了解什么是Ser ...

  7. Sharepoint ECMAScript

    前言 本文完全原创,转载请说明出处,希望对大家有用. 本篇博客是个人总结,一方面以便日后查看,另一方面希望能为其他人提供一些便利. 阅读目录 加载必要文件 (Get,Update,Delete,Add ...

  8. WebStorm 常用安装,配置,快捷键

    WebStorm  软件资源   http://pan.baidu.com/s/1c2OmyQW(不建议使用汉化版,都已可能出现很多意想不到的问题) * Web前端集成开发工具 - WebStorm ...

  9. Zabbix分布式监控

    上一篇:Zabbix的API的使用 zabbix分布式监控 新建一台主机 安装zabbix proxy和数据库 yum -y install mariadb-server zabbix-proxy-m ...

  10. angularJs-脏检查

    来自:http://www.cnblogs.com/liuyanan/p/4935652.html scope是一个指向应用model的object,也是表达式的执行上下文. scope被放置在一个类 ...