Spark进阶(七)

2 篇文章 0 订阅

hive使用案例
Spark进阶(六)安装好了hive的远程模式。
Continue:
http://www.sogou.com/labs/resource/q.php 中下载gz格式
//SogouQ1.txt、SogouQ2.txt、SogouQ3.txt分别是用head -n 或者tail -n 从SogouQ数据日志文件中截取

//访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL

使用方式:
在slave1上建表

//由'\t' 分割列与列,'\n'分割行与行
建的是外部表,所以需要指定存储的路径
CREATE EXTERNAL TABLE SOGOUQ1(DT STRING,WEBSESSION STRING,WORD STRING,S_SEQ INT,C_SEQ INT,WEBSITE STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/dataguru/data/SogouQ1';

在slave1上可以通过该表执行对slave2的hdfs远程调用,使用示例:

//查询有多少行数据
Select count(*) from SOGOUQ1;

//显示前10行数据
select * from SOGOUQ1 limit 10;

//搜索结果排名第1,但是点击次序排在第2的数据有多少?
select count(*) from SOGOUQ1 where S_SEQ=1 and C_SEQ=2;

//搜索用户点击的URL含baidu的数据有多少?
select count(*) from SOGOUQ1 where WEBSITE like '%baidu%';

//搜索结果排名第1,但是点击次序排在第2,URL含baidu的数据有多少?
select count(*) from SOGOUQ1 where S_SEQ=1 and C_SEQ=2 and WEBSITE like '%baidu%';

//session查询次数排行榜
select WEBSESSION,count(WEBSESSION) as cw from SOGOUQ1 group by WEBSESSION order by cw desc limit 10;
(主要还是复习一下排行榜)

//创建内部表并加载数据,**原数据被移动到默认路径
CREATE TABLE SOGOUQ2(DT STRING,WEBSESSION STRING,WORD STRING,S_SEQ INT,C_SEQ INT,WEBSITE STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' ;

//使用show tables;来查看是否表建好

//如果在本地加载的话,需要加一个Local,现在是将hdfs上的文件加载上(现在可以发现:/user/hive/warehouse/sogouq2里面出现加载进该表的SogouQ2.txt)
LOAD DATA INPATH '/dataguru/data/SogouQ2.txt' INTO TABLE SOGOUQ2;

使用下列命令尝试:
//session查询次数排行榜
select WEBSESSION,count(WEBSESSION) as cw from SOGOUQ1 group by WEBSESSION order by cw desc limit 10;

//查询有多少行数据
Select count(*) from SOGOUQ2;

hive的补充
1.hive的jar包替换hadoop较低版本的相同的jar包:用hive/lib/jline-.jar替换hadoop/yarn/相同的bao
2.hive-env.sh中 除了上次提到的hadoop_home
修改hive_home和hive_conf_dir

shark部分可以了解
shark安装

源码下载,解压缩
源码编译
SHARK_HADOOP_VERSION=2.2.0 SHARK_YARN=true sbt/sbt assembly

//这里的版本信息可以进入project中的SharkBuild.scala中查看
//编译后拷贝到各子节点worker上

修改配置文件
//shark-env.sh
export SPARK_MEM=2g

# (Required) Set the master program's memory
export SHARK_MASTER_MEM=1g

# (Optional) Specify the location of Hive's configuration directory. By default,
# Shark run scripts will point it to $SHARK_HOME/conf
export HIVE_CONF_DIR="/app/hadoop/hive013/conf"

# For running Shark in distributed mode, set the following:
export HADOOP_HOME="/app/hadoop/hadoop220"
export SPARK_HOME="/app/hadoop/spark091"
export MASTER="spark://hadoop1:7077"

scp到个节点

****************************************************
****************************************************
启动hive metasotre service
nohup bin/hive --service metastore > metastore.log 2>&1 &

启动shark
bin/shark


./bin/shark –service sharkserver <port>
./bin/shark -h <server-host> -p <server-port>

2.使用演示:
启动slave2的hive metasotre service
nohup bin/hive –service metastore > metastore.log 2>&1 &

master上启动shark
bin/shark
//此时查看master:8080可以发现APPlication信息

这里是Shark基于内存的特性(怎么觉得演示着都在slave1上操作?):

//建立cache表(好神奇?你说是cache就cache?!)
create table sogouQ1_cached as select * from sogouq1;

//搜索结果排名第1,但是点击次序排在第2的数据有多少?
select count(*) from sogouQ1_cached where S_SEQ=1 and C_SEQ=2;

//搜索用户点击的URL含baidu的数据有多少?
select count(*) from sogouQ1_cached where WEBSITE like '%baidu%';

//搜索结果排名第1,但是点击次序排在第2,URL含baidu的数据有多少?
select count(*) from sogouQ1_cached where S_SEQ=1 and C_SEQ=2 and WEBSITE like '%baidu%';

//session查询次数排行榜
select WEBSESSION,count(WEBSESSION) as cw from sogouQ1_cached group by WEBSESSION order by cw desc limit 10;

* SparkSQL第一步*

在master上
1.将mysql-connector-java-..-bin.jar路径添加到Spark_ClassPath下,启动Spark脚本:

$ Spark_CLASSPATH = $ Spark_CLASSPATH:/.../mysql-connector-java-..-bin.jar ./bin/spark-shell --master spark://master:7077

2.这样在hive中建的表可以通过sqlContext进行查询,同样在SparkSQL中建的表也可以在hive中查看:

//这东西还是要的。。
val sqlContext= new org.apache.spark.sql.SQLContext(sc)
import sqlContext._

sqlContext.sql("show  tables").show
sqlContext.sql("CREATE TABLE test(foo INT,bar SRTING)")

下面演示关于SparkSQL的具体的操作:

  1. 建“表结构”, 基于该“表结构”以RDD操作
  2. 存储为表
  3. 使用sql查询进行表的查询
  4. 并将查询结果(DSL)以RDD操作输出
case class Person(name:String,age:Int)
val people=sc.textFile("hdfs://master:8000/dataguru/week4/people.txt").map(_.split(",")).map(p=>Person(p(0),p(1).trim.toInt))
people.registerAsTable("people")

val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")
teenagers.map(t => "Name: " + t(0)).collect().foreach(println)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值