0


Hadoop入门-笔记+问题解决方法-偏个人向(黑马程序员)

一部分文件资源:部分

一、前置章节

1.配置linux

(1)问题:配置SSH免密登录,第二步在每一台机器都执行:

ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3

若出现错误,需要将root用户登录后默认地址更改到有.ssh/的目录下

vim /etc/passwd
# 找到相应的用户,修改倒数第一个冒号前面的目录即可(例如:/home/fwx)

注意:此时我配置的免密切换登录,用户是普通用户(fwx),不是老师视频中的root用户

(2)配置JDK环境

链接:https://pan.baidu.com/s/1S7ZSMENmpxAHyb729omVqQ?pwd=qxef
提取码:qxef

2.概念

(1)大数据特征:从海量的高增长,多类别,低信息密度的数据中挖掘出高质量的结果

(2)大数据的核心工作:

    ①数据存储:可以妥善存储海量待处理数据

    ②数据计算:可以从海量数据中计算出背后的价值

    ③数据传输:协助在各个环节中完成海量数据的传输

(3)大数据的软件生态:

    ①存储:HDFS,HBase,Kudu,云平台

    ②计算:MapReduce,Spark,Flink

    ③传输:Kafka,Pulsar,Flume,Sqoop

(4)Hadoop提供:分布式数据存储,分布式数据计算,分布式资源调度

(5)Hadoop三个功能组件:HDFS,MapReduce,YARN

二、分布式存储 HDFS

1.分布式的基础架构:服务器数量多,混乱

(1)分布式的调度主要有两类架构模式:

    ①去中心化模式:服务期之间基于特定规则进行同步协调

    ②中心化模式:主从模式(如hadoop)

2.HDFS组件:Hadoop分布式文件系统

(1)HDFS集群:

    ①主角色:NameNode(老大)        node1

    ②从角色:DataNode(员工)        node1/2/3

    ③主角色辅助角色:SecondaryNameNode(秘书)        node1

(2)部署集群:

#1 上传Hadoop 安装包
#2 解压到/export/server
tar -zxvf hadoop-3.3.4.tar.gz -C /export/server
#3 构建软链接
cd /export/server
ln -s /export/server/hadoop-3.3.4/ hadoop
#4 进入hadoop安装包
cd hadoop

①安装包目录结构:

    bin:存放Hadoop各类程序(命令)

    etc:存放Hadoop的配置文件

    sbin:管理员程序

②修改配置文件:

    workers:配置从节点(DataNode)
cd etc/hadoop
vim workers

# 填入如下内容
node1
node2
node3
    hadoop-env.sh:配置Hadoop的相关环境变量
# 填入如下内容
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
    core-site.xml:Hadoop核心配置文件(xml:配置kv值)
# 在文件内部填入如下内容
# 第一个key:HDFS文件系统的网络通讯路径 
# 第一个value:协议为hdfs://   namenode为node1  namenode的通讯端口为8020  
# 第二个key:io操作文件缓冲区大小
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
    </property>

    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>
    hdfs-site.xml:HDFS核心配置文件
<configuration>
  <property>
    <name>dfs.datanode.data.dir.perm</name>    # datanode的权限
    <value>700</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>        # namenode的存储
    <value>/data/nn</value>
  </property>
  <property>
    <name>dfs.namenode.hosts</name>
    <value>node1,node2,node3</value>        # namenode的主机
  </property>
  <property>
    <name>dfs.blocksize</name>            #块大小
    <value>268435456</value>
  </property>
  <property>
    <name>dfs.namenode.handler.count</name>    #并发数
    <value>100</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>        #datanode的存储目录
    <value>/data/dn</value>
  </property>
</configuration>
    以上文件在./hadoop/etc/hadoop目录下

③准备数据目录:

    namenode数据存放node1的/data/nn

    datanode数据存放node1、node2、node3的/data/dn
# node1节点:
mkdir -p /data/nn
mkdir /data/dn
# node2和node3节点:
mkdir -p /data/dn

④分发Hadoop文件夹:

# 在node1执行如下命令
cd /export/server
scp -r hadoop-3.3.4 node2:`pwd`/
scp -r hadoop-3.3.4 node3:`pwd`/

⑤配置环境变量

# 三台同样配置
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

⑥授权为普通用户

chown -R 普通用户:普通用户组 /data
chown -R 普通用户:普通用户组 /export

⑦格式化整个文件系统

# 格式化namenode

# 确保以hadoop用户执行
su - fwx
# 格式化namenode
hadoop namenode -format

#启动

# 一键启动hdfs集群
start-dfs.sh
# 一键关闭hdfs集群
stop-dfs.sh
# 若有‘命令未找到’的错误,表明环境变量没配置好,以绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh
/export/server/hadoop/sbin/stop-dfs.sh

(3)集群部署常见问题

    ①Permission denied:当前用户无权操作

除了视频中:/data和/export/server/hadoop-3.3.4中没权限,也要保证/home/fwx/.ssh中普通用户有权限

    ②command not found:没配置好环境变量

    ③启动集群后只有node1正常:workers文件没正确配置

    start-dfs.sh-->启动SecondaryNameNode

    start-dfs.sh--根据core-site.xml-->启动NameNode

    start-dfs.sh--根据workers-->启动datanode(此步错误)

    ④未格式化:node1无NameNode,node2/3无反应

(4)查看HDFS WEBUI

http://node1:9870

3.HDFS的Shell操作

(1)进程启停管理

    ①一键启停脚本:

            start-dfs.sh的执行原理:在此机器上启动SNN,读取core-sitexml,确认并启动

            NameNode所在机器,读取workers,确定DataNode所在机器,启动全部DataNode

    ②当前机器进程启停:

            hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)

(2)文件系统操作命令

    ①HDFS文件系统路径:hdfs://node1:8020

        linux路径:file://

    ②hdfs命令:hdfs dfs -命令

         如:ls,mkdir,cat,cp,mv,chown

    ③上传/下载文件到HDFS指定目录下

         hdfs dfs -put/get 本地文件 目标

         可选项:-f:覆盖目标文件

                       -p:保留访问和修改时间,所有权和权限

    ④追加数据:本地 追加到 hdfs

          hdfs dfs -appendToFile 本地文件 目标

          若将`本地文件`换成`-`,则输入为从标准输入中读取

    ⑤rm(可选项:-skipTrash跳过回收站)
回收站功能默认关闭,如果要开启需要在core-site.xml内配置:
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>

<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value>
</property>

# 回收站默认位置:/user/用户名/.Trash

(3)HDFS客户端-Jetbrians产品插件

    ①Big Data Tools:方便操作HDFS

            Ⅰ.pycharm下载此插件

            Ⅱ.windows配置环境变量(推荐配置系统变量)---windows中的hadoop路径

            Ⅲ.下载hadoop.dll与winutils.exe

            Ⅳ.这俩放入$HADOOP_HOME/bin

            Ⅴ.打开pycharm的此插件,点HDFS

                    第一种(自定义):uri填NNip地址,用户名fwx,测试连接

                    第二种(配置文件夹):路径填/hadoop/etc/hadoop,但需要像linux一样的配置文件

注意:避免虚拟机IP与云服务器IP相撞

(4)HDFS客户端-NFS(网络文件系统):NFS这个插件,可以对外提供NFS网关,

供其他系统挂载

①配置NFS

Ⅰ.在core-site.xml中新增(注意fwx)

# 允许hadoop用户代理任何其他用户组
    <property>
        <name>hadoop.proxyuser.fwx.groups</name>
        <value>*</value>
    </property>
# 允许代理任意服务器的请求
    <property>
        <name>hadoop.proxyuser.fwx.hosts</name>
        <value>*</value>
    </property>

Ⅱ.在hdfs-site.xml(注意fwx)

# NFS操作HDFS系统,所使用的超级用户(hdfs的启动用户为超级用户)
  <property>
      <name>nfs.superuser</name>
      <value>fwx</value>
  </property>
# NFS接受数据上传时使用的临时目录
  <property>
      <name>nfs.dump.dir</name>
      <value>/tmp/.hdfs-nfs</value>
  </property>
# NFS允许连接的客户端IP和权限,rw--读写,
  <property>
      <name>nfs.exports.allowed.hosts</name>
      <value>192.168.88.1 rw</value>        # 多个ip用`;`相隔
  </property>

Ⅲ.俩文件分发到node2和node3,重启集群

scp core-site.xml hdfs-site.xml node2:`pwd`/
scp core-site.xml hdfs-site.xml node3:`pwd`/

Ⅳ.停止系统的NFS相关进程

systemctl stop nfs;systemctl disable nfs 
yum remove -y rpcbind

Ⅴ.启动portmap(HDFS自带的rpcbind功能)(root执行):hdfs --daemon start portmap

Ⅵ.启动nfs(HDFS自带的nfs功能)(hadoop执行):hdfs --daemon start nfs3

②验证NFS

在node2/node3执行:

Ⅰ.rpcinfo -p node1

Ⅱ.showmount -e node1

③在windows挂载HDFS文件系统

win11家庭版升级专业版激活码:J8WVF-9X3GM-4WVYC-VDHQG-42CXT

输入密钥后,打开powershell输入:irm massgrave.dev/get.ps1 | iex(没反应的科学上网)

选择1

Ⅰ.控制面板->程序->启动或关闭windows功能->勾上NFS->确定

Ⅱ.cmd->net use X: \192.168.88.142!(连接一个网络地址,挂载到X盘,NNip地址)

4.HDFS的存储原理

(1)修改副本数

①在hdfs-site.xml中设置文件上传到HDFS中拥有的副本数量(默认值3)

  <property>
      <name>dfs.replication</name>
      <value>3</value>
  </property>

②修改已经存在的文件的副本数量

# 修改为两个副本存储  -R :对子目录生效 
hdfs dfs -setrep [-R] 2 path

(2)fsck命令:检查文件的副本数

hdfs fsck path [-files [-blocks [-locations]]]
-files     可以列出路径内的文件状态
-files -blocks     有几个块,多少副本
-files -blocks -locations     输出每一个block详细

(3)NameNode元数据

Ⅰ.NameNode基于多个edits和一个fsimage,完成整个文件系统的管理和维护

①edits(像log):流水账文件,记录hdfs每一次操作,以及影响的文件所对应的block

②fsimage文件:将全部的edits文件,合并的最终结果

Ⅱ.SecondaryNameNode的作用:合并元数据

(4)HDFS数据的读写流程

客户端找一个datanode就行,剩下的副本复制由datanode之间完成

三、MapReduce & YARN入门

1.分布式计算常见的2种工作模式:

(1)分散->汇总(MapReduce)

(2)中心调度->步骤执行(Spark,Flink)

2.YARN:主从结构

(1)核心:

                ①主角色:ResourceManager--整个集群的资源调度者

                ②从角色:NodeManager--单个服务器的资源调度者

     辅助:③代理服务器:YARN运行时会有个WEB UI,保障WEB UI访问的安全性

                ④历史服务器:记录历史程序运行信息和日志

(2)YARN的容器:在所属服务器上分配资源的手段,提前占资源

3.YARN集群部署

(1)配置文件

mapred-env.sh

mapred-site.xml

yarn-env.sh

yarn-site.xml

链接:https://pan.baidu.com/s/1yxiSWV96Dp92YZyn46gwgw?pwd=oqou
提取码:oqou

(2)分发配置文件

①scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:pwd/

②scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3:pwd/

(3)集群启动命令

①一键启动YARN集群:start-yarn.sh

②一键停止YARN集群:stop-yarn.sh

③单台启动或停止:yarn --daemon start|stop resourcemanager|nodemanager|proxyserver

④历史服务器启动和停止:mapred --daemon start|stop historyserver

(4)查看YARN的WEB UI页面

http://node1:8088

注意:整个快照

(5)提交MapReduce任务到YARN执行

内置的MapReduce程序:wordcount--单词计数程序 pi--求圆周率

①提交示例MapReduce程序WordCount到YARN中执行
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount hdfs://node1:8020/input/wordcount/ hdfs://node1:8020/output/wc1
    参数wordcount,表示运行jar包中的单词计数程序(Java Class)

    参数1是数据输入路径(hdfs://node1:8020/input/wordcount/)

    参数2是结果输出路径(hdfs://node1:8020/output/wc1), 需要确保文件不存在
②提交求圆周率示例程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 3 1000
    参数pi表示要运行的Java类,这里表示运行jar包中的求pi程序

    参数3,表示设置几个map任务

    参数1000,表示模拟求PI的样本数(越大求的PI越准确,但是速度越慢)

四、分布式SQL计算--Hive入门

1.概念

(1)Hive:将sql语句翻译成MapReduce,Hive是单机工具,但是它可以提交给分布式运行的MapReduce程序运行。

(2)功能:①元数据管理(如存到mysql) ②解析器(sql到mapreduce)

(3)组件:

                ①元数据管理(Metastore 服务进程)

                ②SQL解析器(Driver驱动程序),完成SQL解析、执行优化、代码提交等功能

                ③用户接口:提供用户和Hive交互的功能

2.hive部署

链接:https://pan.baidu.com/s/10HN36zmlSJz6W0lFpQhG0A?pwd=vxkv
提取码:vxkv

(1) 安装mysql

①如果文件中降低密码复杂度不对

# 查看密码策略
show variables like '%validate_password%';
# 设置密码策略为低
set global validate_password.policy=LOW;
# 减少密码长度
set global validate_password.length=4;

②卸载mysql

https://blog.csdn.net/best_luxi/article/details/107066029

(2)配置hadoop

配置core-site.xml(跟NFS一样)

(3)安装hive

下载:

http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz

# 解压到node1服务器的:/export/server/内
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/
# 设置软连接
ln -s /export/server/apache-hive-3.1.3-bin /export/server/hive

(4)提供mysql驱动包

# 下载MySQL驱动包:
https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar

# 将下载好的驱动jar包,放入:Hive安装文件夹的lib目录内
mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/

(5)配置hive

# 在Hive的conf目录内,新建hive-env.sh文件,填入内容:
export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib
# 在Hive的conf目录内,新建hive-site.xml文件,填入链接代码

(6)初始化元数据库

# 新建数据库:hive
CREATE DATABASE hive CHARSET UTF8;
# 执行元数据库初始化
cd /export/server/hive
bin/schematool -initSchema -dbType mysql -verbos
# 初始化后,会在MySQL的hive库中新建74张元数据管理的表。

(7)启动Hive

# fwx用户拥有权限
chown -R fwx:fwx hive

# 创建一个hive的日志文件夹: 
mkdir /export/server/hive/logs

ps:不知道为什么,所有步骤都正确,但还是初始化元数据库错误,最后去某宝花钱配置的

3.Hive客户端

(1)HiveServer2 & Beeline

①HiveServer2服务:是Hive内置的一个ThriftServer服务,提供Thrift端口供其它客户端链接
    可以连接ThriftServer的客户端有:

            Ⅰ.Hive内置的 beeline客户端工具(命令行工具)

            Ⅱ.第三方的图形化SQL工具,如DataGrip、DBeaver、Navicat等
# 启动元数据管理(metastore)服务
后台启动:nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &

# 启动hiveserver2服务
后台启动:nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
②Beeline客户端:是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信
# 使用beeline客户端
/export/server/hive/bin/beeline
#  访问hiveserver2协议(hive默认端口10000)
! connect jdbc:hive2://node1:10000
# 输入用户:fwx,密码为空

如果connect错误,显示:No known driver to handle "jdbc:hive://node1:10000"

则需要看运行了几个RunJar,把多余的关掉重新开

如果再不行,就重启hdfs集群

五、BI:商业智能

1.FineBI:安装后->把hive连接驱动里的文件复制到Fine6.0\webapps\webroot\WEB-INF\lib(打好驱动)->在FineBI中选择“管理系统”->插件管理->从本地安装->找到fr-plugin-hive-driver-loader-3.0.zip资源包->hive隔离插件

标签: hadoop 笔记 大数据

本文转载自: https://blog.csdn.net/qq_39551301/article/details/137194635
版权归原作者 qq_39551301 所有, 如有侵权,请联系我们删除。

“Hadoop入门-笔记+问题解决方法-偏个人向(黑马程序员)”的评论:

还没有评论