赞
踩
Hadoop
入门教程生命无罪,健康万岁,我是laity
Hadoop
核心组件HDFS
:分布式文件存储
系统,用于解决海量数据存储YARN
:集群资源管理
和任务调度框架,用于解决资源任务调度MapReduce
:分布式计算
框架,用于解决海量数据计算。HDFS
的shellhadoop fs -ls file:/// # 操作本地文件系统
hadoop fs -ls hdfs://Itlaity101:8020/ # 操作HDFS分布式文件系统
hadoop fs -ls / # 直接根目录,没有指定协议,将加载读取fs.defaultFS值。
# 创建文件夹 mkdir [-p] <hdfs 路径> hadoop fs -mkdir /Itlaity # 查看目录 hadoop fs -ls -h[-r] / # 上传命令 hadoop fs -put [-f] [-p] <localsrc:本地路径-客户端> <dst:HDFS地址> hadoop fs -put file:///root/1.txt hdfs://Itlaity101:8020/Itlaity/ # 标准写法 hadoop fs -put 1.txt /Itlaity/ # 简化写法 -- 参数配置好 # 查看文件内容 hadoop fs -cat <src> hadoop fs -cat /Itlaity/1.txt # 下载HDFS文件 hadoop fs -get <src> <localsrc> # 和上传命令相反 -f 覆盖 -p 保留访问和修改的时间,所有权和权限。 # 拷贝HDFS文件 hadoop fs -cp [-f] <src> <dst> # 追加数据操作 hadoop fs -appendToFile <localsrc> <dst> # 小文件追加合并 # 移动数据操作 hadoop fs -mv <src> <dst> # dst -- HDFS地址 localsrc -- 客户端地址 src -- HDFS相对路径
选项名称 | 使用格式 | 含义 |
---|---|---|
-ls | -ls <路径> | 查看指定路径的当前目录结构 |
-lsr | -lsr <路径> | 递归查看指定路径的目录结构 |
-du | -du <路径> | 统计目录下各文件大小 |
-dus | -dus <路径> | 汇总统计目录下文件(夹)大小 |
-count | -count [-q] <路径> | 统计文件(夹)数量 |
-mv | -mv <源路径> <目的路径> | 移动 |
-cp | -cp <源路径> <目的路径> | 复制 |
-rm | -rm [-skipTrash] <路径> | 删除文件/空白文件夹 |
-rmr | -rmr [-skipTrash] <路径> | 递归删除 |
-put | -put <多个linux上的文件> <hdfs 路径> | 上传文件 |
-copyFromLocal | -copyFromLocal <多个linux 上的文件> <hdfs 路径> | 从本地复制 |
-moveFromLocal | -moveFromLocal <多个linux 上的文件> <hdfs 路径> | 从本地移动 |
-getmerge | -getmerge <源路径> <linux 路径> | 合并到本地 |
-cat | -cat <hdfs 路径> | 查看文件内容 |
-text | -text <hdfs 路径> | 查看文件内容 |
-copyToLocal | -copyToLocal [-ignoreCrc] [-crc] [hdfs 源路径] [linux 目的路径] | 复制到本地 |
-moveToLocal | -moveToLocal [-crc] <hdfs 源路径> <linux目的路径> | 移动到本地 |
-setrep | -setrep [-R] [-w] <副本数> <路径> | 修改副本数量 |
-mkdir | -mkdir <hdfs 路径> | 创建空白文件夹 |
-touchz | -touchz <文件路径> | 创建空白文件 |
-stat | -stat [format] <路径> | 显示文件统计信息 |
-tail | -tail [-f] <文件> | 查看文件尾部信息 |
-chmod | -chmod [-R] <权限模式> [路径] | 修改权限 |
-chown | -chown [-R] [属主]: [属组]路径 | 修改属主 |
-chgrp | -chgrp [-R] 属组名称 路径 | 修改属组 |
-help | -help -help [命令选项] | 帮助 |
Namenode
– 大内存
Datanode
– 大磁盘
MapReduce
分布式计算框架 – 现在已经退居二线了
MapReduce
思想核心思想 :”先分再合,分而治之”。
把大的拆分成小的,把复杂的拆分成简单的,然后再合并组成这个问题的最终结果。
Map 表示第一阶段,负责”拆分”
Reduce表示第二阶段,负责”合并”:即对map阶段的结果进行全局汇总。
学会提交MapReduce
程序
MapReduce
执行流程# 体验一下
myhadoop.sh start # 执行脚本启动集群
cd /opt/laityInstall/hadoop/share/hadoop/mapreduce # 切换路径
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2 # 执行命令
YARN
通用的资源管理系统和调度平台。
ResourceManager
(RM)
NodeMananger
(NM)
ApplicationMaster(App Mstr)
(AM)
Client
Container容器(资源的抽象)
Scheduler
– 没有好的调度器,只有符合你业务的调度器
FIFO Scheduler
: 先进先出调度器Capacity Scheduler
:容量调度器 – Apache版本YARN默认使用Fair Scheduler
:公平调度器概念:数据仓库,是一个用于存储、分析、报告的数据系统。
Hive是基于Hadoop
的数据仓库软件,我们负责写Sql
,Hive将我们写的Sql
帮助我们转为mr
。
元数据的概念:Metadate
,又称中介数据、中继数据,为描述数据的数据,主要描述数据的属性信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
元数据的存储:Hive说如果你不想自己存我有一个自己的关系型数据库Derby
,当然你也可以使用第三方如MySQL
等。
搭建远程服务:不使用Hive自己的数据库,使用第三方数据库
<!--在core-size.xml中添加--> <!-- 整合hive 用户代理设置 --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> <!-- 文件系统垃圾桶保存时间 --> <property> <name>fs.trash.interval</name> <value>1440</value> </property>
MySQL
数据库已完成
只需要在一台服务器上安装即可
上传安装包并解压
tar zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/laityInstall/
Hadoop
之间guava版本差异cd /opt/laityInstall/apache-hive-3.1.2-bin/
rm -rf lib/guava-19.0.jar
cp /opt/laityInstall/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
修改配置文件
hive-env.sh
cd /opt/laityInstall/apache-hive-3.1.2-bin/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
export HADOOP_HOME=/opt/laityInstall/hadoop
export HIVE_CONF_DIR=/opt/laityInstall/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/opt/laityInstall/apache-hive-3.1.2-bin/lib
hive-site.xml
vim hive-site.xml
<configuration> <!-- 存储元数据mysql相关配置 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://Itlaity101:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=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> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Wang9264.</value> </property> <!-- H2S运行绑定host --> <property> <name>hive.server2.thrift.bind.host</name> <value>Itlaity101</value> </property> <!-- 远程模式部署metastore metastore地址 --> <property> <name>hive.metastore.uris</name> <value>thrift://Itlaity101:9083</value> </property> <!-- 关闭元数据存储授权 --> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> </configuration>
上传mysql jdbc驱动到hive安装包lib下
mysql-connector-java-5.1.32.jar
初始化元数据
cd /opt/laityInstall/apache-hive-3.1.2-bin/
bin/schematool -initSchema -dbType mysql -verbos
#初始化成功会在mysql中创建74张表
在hdfs创建hive存储目录(如存在则不用操作)
hadoop fs -mkdir /tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
启动hive
1、启动metastore服务
#前台启动 关闭ctrl+c
/opt/laityInstall/apache-hive-3.1.2-bin/bin/hive --service metastore
#前台启动开启debug日志
/opt/laityInstall/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console
#后台启动 进程挂起 关闭使用jps+ kill -9
nohup /opt/laityInstall/apache-hive-3.1.2-bin/bin/hive --service metastore &
# 查看jps
83078 RunJar -- 有这个就说明后台启动成功了
nohup /opt/laityInstall/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &
#注意 启动hiveserver2需要一定的时间 不要启动之后立即beeline连接 可能连接不上
# 显示两个 runjar 就是成功的表现
/opt/laityInstall/apache-hive-3.1.2-bin/bin/hive
拷贝node1安装包到beeline客户端机器上(node3)
scp -r /opt/laityInstall/apache-hive-3.1.2-bin/ Itlaity103:/export/server/
错误
Error: Could not open client transport with JDBC Uri: jdbc:hive2://node1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0)
修改
在hadoop的配置文件core-site.xml中添加如下属性:
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
/opt/laityInstall/apache-hive-3.1.2-bin/bin/beeline
beeline> ! connect jdbc:hive2://Itlaity101:10000
beeline> root
beeline> 直接回车
错误解决:Hive3执行insert插入操作 statstask异常
现象
在执行insert + values操作的时候 虽然最终执行成功,结果正确。但是在执行日志中会出现如下的错误信息。
- 开启hiveserver2执行日志。查看详细信息
```
2020-11-09 00:37:48,963 WARN [5ce14c58-6b36-476a-bab8-89cba7dd1706 main] metastore.RetryingMetaStoreClient: MetaStoreClient lost connection. Attempting to reconnect (1 of 1) after 1s. setPartitionColumnStatistics
ERROR [5ce14c58-6b36-476a-bab8-89cba7dd1706 main] exec.StatsTask: Failed to run stats task
```
- 但是 ==此错误并不影响最终的插入语句执行成功==。 - 分析原因和解决 - statstask是一个hive中用于统计插入等操作的状态任务 其返回结果如下  - 此信息类似于计数器 用于告知用户插入数据的相关信息 但是不影响程序的正常执行。 - Hive新版本中 这是一个issues 临时解决方式如下 https://community.cloudera.com/t5/Support-Questions/Hive-Metastore-Connection-Failure-then-Retry/td-p/151661  - ==在mysql metastore中删除 PART_COL_STATS这张表即可==。
SQL
语言:DataGrip
、Dbeaver
、SQuirrel SQL Client
等DML
语法:关系型数据库sql语句我之前复习完完不久,所以我这里就再不做笔记了。
# Hive服务的启动
nohup /opt/laityInstall/apache-hive-3.1.2-bin/bin/hive --service metastore & # metastore
nohup /opt/laityInstall/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 & # hiveserver2
# 客户端连接
/opt/laityInstall/apache-hive-3.1.2-bin/bin/beeline
beeline> ! connect jdbc:hive2://Itlaity101:10000
beeline> root
beeline> 直接回车
# 在 beeline客户端 中执行 -- 复制
load data local inpath "Hive部署的服务器中文件的地址(Itlaity101)" into table "HDFS存放的目标位置";
# 移动
load data inpath "HDFS的文件位置" into table "HDFS存放的目标位置";
# 标准插入 -- 时间很慢
insert into table 表名("指定键") values("数据"...);
insert into table 表名 values("数据"...);
# insert + select
insert into table 表名 select 字段,字段... from student;
# having与where区别 -- 两个都是过滤
having 在分组(group by)后对数据进行过滤
where是在分组前对数据进行过滤
having可以使用聚合函数
where不可以使用聚合函数
# 执行顺序
select state,sum(deaths) as cnts from t_usa_covid19
where count_date = "2021-01-28"
group by state
having cnts> 10000
limit 2;
# 也就是 from > where > group by > having > limit > order by > select
# 使用最多的join分别是:
inner join -- 内连接
left join -- 左连接
# 内连接 -- 关联表的交集部分
# 左连接 -- 以左边表的全部数据为准,右边与之关联;左表数据全部返回,右表关联上的显示返回,关怀不上的显示null返回。
# 查看hive有哪些函数
show functions;
# 描述一个函数的用法
describe function extended 函数名(count);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。