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&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