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 ‘\t‘;

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

加载数据表到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运行

原文地址:https://www.cnblogs.com/fenghuoliancheng/p/10483073.html

时间: 2024-10-09 15:27:22

Spark SQL学习记录的相关文章

spark sql学习

英文学习篇 http://spark.apache.org/docs/latest/sql-programming-guide.html 可以对照官方的API进行对照 http://spark.apache.org/docs/latest/api/scala/index.html 中文学习篇 http://demo.netfoucs.com/book_mmicky/article/details/39177041 spark sql学习汇总篇 http://blog.csdn.net/pelic

SQL学习记录

1.表的某一列对于只接受特定的值来说,需要增加一个约束条件, gender CHAR(1) CHECK (gender IN ('M','F')) 对于大多说数据库服务器中检查约束来说能够如期的工作,但对于MySQL来说,虽然定义了检查约束,但并不强制,实际上MySQL提供了另一种名为enum的字符数据类型,它可以将检查约束和数据定义融合在一起:gender ENUM('M','F'); 2.ALERT TABLE person MODIFY person_id SMALLINT UNSIGNE

[QT][SQL]sql学习记录3_sqlite 使用

详见 : http://www.runoob.com/sqlite/sqlite-create-table.html 约束表实例 下面是一个实例,它创建了一个 COMPANY 表,ID 作为主键,NOT NULL 的约束表示在表中创建纪录时这些字段不能为 NULL: sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), S

[QT][SQL]sql学习记录5_sqlite视图(View)

SQLite 视图(View) 视图(View)只不过是通过相关的名称存储在数据库中的一个 SQLite 语句.视图(View)实际上是一个以预定义的 SQLite 查询形式存在的表的组合. 视图(View)可以包含一个表的所有行或从一个或多个表选定行.视图(View)可以从一个或多个表创建,这取决于要创建视图的 SQLite 查询.. 视图(View)是一种虚表,允许用户实现以下几点: 用户或用户组查找结构数据的方式更自然或直观. 限制数据访问,用户只能看到有限的数据,而不是完整的表. 汇总各

[QT][SQL]sql学习记录5_sqlite Autoincrement(自动递增)

定义以及示例请见 : http://www.runoob.com/sqlite/sqlite-autoincrement.html SQLite Autoincrement(自动递增) SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增.我们可以在创建表时在特定的列名称上使用 AUTOINCREMENT 关键字实现该字段值的自动增加. 关键字 AUTOINCREMENT 只能用于整型(INTEGER)字段. 实例 假设要创建的 COMPANY 表如下所示: sq

【Spark深入学习 -16】官网学习SparkSQL

----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSession        2.2 创建DataFrames        2.3 非强类型结果集操作        2.4 程序化执行SQL查询        2.5 全局临时视图        2.6 创建DataSets        2.7 与RDD交互操作        2.8 聚集函数3.Sp

SQL学习笔记:选取第N条记录

Northwind数据库,选取价格第二高的产品. 有两种方法,一个是用Row_Number()函数: SELECT productname FROM (SELECT TOP 2 productname, Row_Number() OVER (ORDER BY unitprice desc) AS rownum FROM Products) AS tbl WHERE rownum = 2; 另一种是对子语句的的结果再进行排序: SELECT top 1 productname FROM (SELE

Spark SQL 中 dataFrame 学习总结

dataFrame多了数据的结构信息.就是schema. RDD是分布式的 Java对象的集合.DataFrame是分布式的Row对象的集合. DataFrame 提供了详细的结构信息,可以让sparkSQL清楚的知道数据集中包含哪些列,列的名称和类型各是什么? RDD是分布式的 Java对象的集合.DataFrame是分布式的Row对象的集合.DataFrame除了提供了 比RDD更丰富的算子以外,更重要的特点是提升执行效率.减少数据读取以及执行计划的优化,比如 filter下推.裁剪等. 提

[QT][SQL]sq]学习记录1_模糊搜索

sql学习网站: http://www.w3school.com.cn/sql/index.asp 用于模糊搜索数据库的数据 语句:http://www.w3school.com.cn/sql/sql_like.aspSQL LIKE 操作符: 接下来,我们希望从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:我们可以使用下面的 SELECT 语句:SELECT * FROM PersonsWHERE City LIKE '%lon%'