来源:

  慕课网 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. vue-cli打包构建时常见的报错解决方案

    报错1:vue-cli项目本地npm run dev启动后,chrome打开是空白页 解决方案:将config下的index.js中的assetsPublicPath路径都设置为‘/’绝对路径 报错2 ...

  2. [python]常用的几个包

    http://dev.mysql.com/doc/connector-python/en/connector-python-tutorial-cursorbuffered.html https://d ...

  3. C++ map修改指定key的value

    对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢?  C++ Code  12345678910111213141516171819202122 ...

  4. ios开发之--CGRect/CGSize/CGPoint/CGVector/CGAffineTransform/UIEdgeInsets/UIOffset和NSString之间的转换

    仅做记录,一个函数和字符串之间的互相转换 方法如下: UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN N ...

  5. Java Web项目--使用Servlet生成一个页面

    为了生成一个servlet对应的网页.我们需要新建一个web.xml,其中将会放置servlet的相关信息.web.xml文件放置在WebContent/WEB-INF/目录下.(我们在Eclipe中 ...

  6. 在静态工具类中需要注入mapper

    在xml中 <bean id="messageUtil" class="org.ldd.ssm.hangyu.utils.MessageUtil" ini ...

  7. .NET 4.0 中的契约式编程

    契约式编程不是一门崭新的编程方法论.C/C++ 时代早已有之.Microsoft 在 .NET 4.0 中正式引入契约式编程库.博主以为契约式编程是一种相当不错的编程思想,每一个开发人员都应该掌握.它 ...

  8. kafka基础概念

    kafka介绍 kafka is a distributed, partitiononed,replicated commited logservice. kafka是一个分布式的.易扩展的.安全性高 ...

  9. java URL、HTTP与HTML+CSS

    一.Web三大基石 1 二.API(Application Programming Interface,应用程序编程接口) 1 三.题目分析总结: 3 五.HTTP协议与寄信是类似的 6 请求报文 6 ...

  10. Exchange Pause or stop transport service

    The Microsoft Exchange Transport service is a service available both on the Microsoft Exchange Serve ...