Hadoop入门教程

Posted itLaity

tags:

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

Hadoop入门教程

生命无罪,健康万岁,我是laity

分布式和集群的概念

  • 分布式:多台机器,每台机器上部署不同组件。
  • 集群:多台机器,每台机器上部署相同组件。

Hadoop核心组件

  • HDFS :分布式文件存储系统,用于解决海量数据存储
  • YARN :集群资源管理和任务调度框架,用于解决资源任务调度
  • MapReduce :分布式计算框架,用于解决海量数据计算。

HDFS 的shell

博客

基础命令

hadoop 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)
    • YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限即最终仲裁权
    • 提交用户的作业情况,并通过NM分配、管理各个机器上的计算资源。
  • NodeMananger (NM)
    • YARN中的从角色,一台机器一个,负责管理本机器上的计算资源
    • 根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。
  • ApplicationMaster(App Mstr) (AM)
    • 用户提交的每个应用程序均包含一个AM。
    • 应用程序中的”老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。
  • Client
    • 用户端
  • Container容器(资源的抽象)

YARN调度策略

  • Scheduler – 没有好的调度器,只有符合你业务的调度器
    • FIFO Scheduler : 先进先出调度器
    • Capacity Scheduler :容量调度器 – Apache版本YARN默认使用
    • Fair Scheduler :公平调度器

数据仓库基础知识

概念:数据仓库,是一个用于存储、分析、报告的数据系统

  • 数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持。

Hive入门

Hive是基于Hadoop的数据仓库软件,我们负责写Sql,Hive将我们写的Sql帮助我们转为mr

  • 元数据:表与文件的对应关系

元数据的概念Metadate,又称中介数据、中继数据,为描述数据的数据,主要描述数据的属性信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

元数据的存储:Hive说如果你不想自己存我有一个自己的关系型数据库Derby,当然你也可以使用第三方如mysql等。

Hive安装部署

搭建远程服务:不使用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数据库

已完成

Hive安装
  • 只需要在一台服务器上安装即可

  • 上传安装包并解压

tar zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/laityInstall/
  • 解决Hive与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&amp;useSSL=false&amp;useUnicode=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>
        	<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  -- 有这个就说明后台启动成功了
        
    • 2、启动hiveserver2服务 – 不推荐

      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
      
    • 3、beeline客户端连接 – 推荐

      • 拷贝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中用于统计插入等操作的状态任务  其返回结果如下

   ![在这里插入图片描述](https://img-blog.csdnimg.cn/95f33f406dff4da680b401ec37de1000.png)



  - 此信息类似于计数器 用于告知用户插入数据的相关信息 但是不影响程序的正常执行。

  - Hive新版本中 这是一个issues  临时解决方式如下

    https://community.cloudera.com/t5/Support-Questions/Hive-Metastore-Connection-Failure-then-Retry/td-p/151661

  ![在这里插入图片描述](https://img-blog.csdnimg.cn/93ebc442551b44cc83fe376844e53a21.png)



  - ==在mysql metastore中删除 PART_COL_STATS这张表即可==。

SQL语言:

  • Hive可视化客户端:DataGripDbeaverSQuirrel SQL Client

DML语法:

关系型数据库sql语句我之前复习完完不久,所以我这里就再不做笔记了。

Load加载数据操作
# 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插入数据操作
# 标准插入  -- 时间很慢
insert into table 表名("指定键") values("数据"...);
insert into table 表名 values("数据"...);
# insert + select
insert into table 表名 select 字段,字段... from student;
select查询语句
# 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 关联查询 外键
# 使用最多的join分别是:
inner join -- 内连接
left join  -- 左连接
# 内连接 -- 关联表的交集部分
# 左连接 -- 以左边表的全部数据为准,右边与之关联;左表数据全部返回,右表关联上的显示返回,关怀不上的显示null返回。
Hive 常用函数
# 查看hive有哪些函数
show functions;
# 描述一个函数的用法
describe function extended 函数名(count);

以上是关于Hadoop入门教程的主要内容,如果未能解决你的问题,请参考以下文章

HDU2022 海选女主角

hadoop入门容易吗?

Hadoop入门教程免费下载

Hadoop开发 Hadoop视频教程 段海涛老师Hadoop完全攻克Hadoop视频教程 Hadoop开发

视频教程:hadoop基础及演练 hadoop视频教程 hadoop从入门到精通的学习

尚硅谷大数据Hadoop教程-笔记01入门