Spark SQL学习记录

Posted 烽火连城516

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark SQL学习记录相关的知识,希望对你有一定的参考价值。

HDFS

 

YARN

YARN架构:
1个RM(ResourceManager)主节点+N个NM(NodeManager)从节点
ResourceManager职责:一个集群active状态的RM只有一个,负责整个集群额资源管理和调度
1.处理客户端的请求(启动或杀死一个作业)
2.启动/监控ApplicationMaster(一个作业对应一个AM)
3.通过心跳监控NM
4.系统的资源分配和调度


NodeManager职责:整个集群中有N个节点,负责单个节点的资源管理和使用以及task的运行
1.定期向RM汇报本节点资源使用情况和各个Container的运行状态
2.接收并处理RM的Container启停的各种命令
3.单个节点的资源管理和任务管理


ApplicationMaster职责:每个作业/应用对应一个,负责 应用程序的管理
1.数据切分
2.为应用程序向RM申请资源(container),并分配给内部任务
3.与NM通信以启停task,task是运行在container中的
4.task的监控和容错
container职责:对任务运行情况的描述包括(cpu,memory,环境变量)

YARN执行流程:
1.用户向YARN提交作业
2.RM为该作业分配的第一个Container(启动AM)
3.RM会与对应的NM通信,要求NM在这个Container上启动应用程序的AM
4.AM首先向RM注册,然后AM将为各个任务申请资源,并监控运行情况
5.AM采用轮训的方式通过RPC协议向RM申请和领取资源
6.AM申请到资源后,便和相应的NM通信,要求NM启动任务
7.NM启动我们作业对应的task

YARN环境搭建:
mapred-site.xml配置
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml配置

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

启动yarn:sbin/start-yarn.sh
验证是否启动成功:jps
有如下进程:ResourceManager,NodeManager,Web访问:http://主机名:8088
停止yarn:sbin/stop-yarn.sh
提交MapReduce作业到yarn上运行:
jar包位置hadoop-2.x-cdh5.x/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.x-cdh5.7.jar
hadoop jar位置 wordcount /input/文件位置/文件名 /output/文件夹目录

Hive构建在Hadoop上的数据仓库,定义一种类SQL的HQL语言,通常用于离线数据处理
Hive底层的执行引擎有:MapReduce,Spark,Tez
压缩有Gzip,Lzo,SNappy,Bzip2
存储有:TextFile,SequenceFile,RCfile,ORCfILE,
UDF:自定义函数,自己发开

Hive

Hive环境搭建

1.下载地址:
2.解压:tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app/
3.配置:export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
4.安装一个mysql yum install mysql-server,输入service mysqld start 启动服务,输入:mysqladmin -u root -p password ‘123456‘来设置密码

5.在conf文件夹中hive.env.sh配置hadoop的安装路径:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

6.配置mysql的数据信息:有4项
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <!--alterdb为要创建的数据库名,注意字符集设置-->
    <value>jdbc:mysql://localhost:3306/alterdb?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <!--MySQL登录账户名-->
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <!--MySQL登录密码-->
    <value>123456</value>
  </property>
</configuration>

7.拷贝mysql驱动到hive安装路径下lib文件夹中 cp ~/software/mysql-connector-java-5.1.27-bin.jar .

8.启动hive  在hive的安装目录下${HIVE_HOME/bin} 执行 ./hive

Hive基本使用

9.创建表:

创建数据表:
CREATE TABLE table_name
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]

例如:create table hive_worddcount(context string);

如果创建数据表出现如下问题:hive> create table ehr_base(id string);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don‘t support retries at the client level.)说明MySQL中的hive数据库字符编码有问题,需要连接mysql服务器,并执行SQL语句修改hive数据库的字符编码alter database ‘数据库‘ character set latin1;
登录mysql(mysql --uroot -proot)
show tables;
select * from TBLS;
表的字段在COLUMNS_V2 select * from COLUMNS_V2;

表创建完成后,需要将数据加载到表里面(将linux服务器目录下的data中的数据例如hello.txt加载到hive表里面去)

使用Hive进行wordcount统计

10.加载数据到hive表

命令:LOAD DATA LOCAL INPATH ‘filepath‘ INTO TABLE tablename
例如:load data local inpath ‘/home/hadoop/data/hello.txt‘ into table hive_worddcount;

使用explode函数对split的结果集进行行拆列:

  select explode(split(context,‘  ‘)) as word from hive_wordcount;

11.查询统计词频出现的次数:
  select word,count(1) as count from (select explode(split(context,‘  ‘)) as word from hive_wordcount) word group by word order by count;

$hive> INSERT OVERWRITE LOCAL DIRECTORY ‘/tmp/wordcount_result’ SELECT word,count(1) FROM words GROUP BY word ORDER BY word;
LOCAL去掉表示导出到HDFS的目录;

lateral view explade()作用是把每行记录按照指定分隔符进行拆解

练习
1.创建员工表:
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 ‘ ‘;

2.创建部门表:
create table dept(
deptno int,
dname string,
location string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘ ‘;

加载数据表到hive中,执行:如下的hive语句:

hive> load data local input ‘/home/hadoop/data/dept.txt‘ into table dept;

hive> load data local input ‘/home/hadoop/data/emp.txt‘ into table emp;

求每个部门人数?

select deptno,count(1) from emp group by deptno;

12.

hive sql 提交执行以后会生产mr作业,并在yarn运行


 

 

以上是关于Spark SQL学习记录的主要内容,如果未能解决你的问题,请参考以下文章

Spark2.0学习记录

Spark记录-spark-submit学习

2020寒假学习记录——Spark及其生态圈的了解

spark pipeline原理学习和记录

ROS学习笔记-rosbag数据记录包的使用-记录和回放Spark机器人建图过程

spark记录SparkCore的调优之开发调优