栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop学习第一课(简单了解Hadoop以及Hadoop3.2.2版本的安装部署)

Hadoop学习第一课(简单了解Hadoop以及Hadoop3.2.2版本的安装部署)

一.Hadoop(大数据组件)
广义:以hadoop软件为主的生态圈(Sqoop、Flume、Spark、Flink、Hbase、Kafka和cdh环境)

狭义:hadoop软件本身,开源的(在gitlab上可以看到源代码和地址)--开源必会存在bug

二.组成
Hadoop由以下三个部分组成:

1.hdfs  存储数据(可以理解为网盘)--hbase、kudu(组件)

2.mapreduce  计算作业(生产上不使用,但设计理念指导着其他框架,比如Spark和Flink)

3.yarn  资源(CPU、内存memory)和作业的调度

大数据平台:存储是第一位,存储和计算是相辅相成的

例:假如有100台机器(电脑),有一个很大的计算作业,100G的数据

  ①首先需要存储.但是一台机器存不下去,那么就需要把这些数据分开存进这100台机器,这时候hdfs会把文件切割,进行分布式存储(读的时候会自动拼接)。

  ②计算(作业),可以跑在其中某台或几台,计算时就需要从hdfs存储的资源里抽取调度,通过集群光纤传输到计算机的机器上,计算完成后又会把结果再次执行回写到存储上面(这里的存储可以是外部存储)。

三.hadoop的安装部署
1.我用的版本是:hadoop-3.2.2(【注意】:下载二进制的binary,不要下载源代码)

2.学会看官方文档,跟着文档的步骤来进行

 

3.部署前的准备

3.1 从Windows上传文件到Linux:rz命令或者winscp软件

      上传hadoop包,到/tmp(权限777)目录,不会受权限影响

3.2 创建用户

 切换hadoop用户

创建自己的文件夹:

sourcecode(源代码编译)、software(安装包)、app(包解压目录)、log(日志文件)、lib(第三方jar)、data(数据目录)、tmp(临时文件)、sh(sh脚本)

 

 

【问题】:为什么要自己建立一个tmp目录,而不使用root用户下自带的/tmp目录?

  答:因为自带的/tmp目录会根据当前版本特性,默认清除定期(30天)不访问的内容。

3.3 安装包从root用户移动到用户hadoop

mv /tmp/hadoop-3.2.2.tar.gz /home/hadoop00/software

此时报错:Operation not permitted  原因:尽管自带的/tmp目录有777权限,但是新建的用户hadoop对hadoop-3.22.tar.gz的操作还是有权限限制的,所以不能移动。

  解决方法一:赋予新用户hadoop权限后再执行上述操作。

  解决方法二:退出到root用户,再执行:mv /tmp/hadoop-3.2.2.tar.gz  /home/hadoop/software

3.4 在root用户下赋予用户hadoop的software目录下所以的权限:

    chown hadoop:hadoop   /home/hadoop/software/*

4.hadoop的软连接
4.1 切换到用户hadoop的software目录解压hadoop压缩包到~/app目录:

  tar -xzvf hadoop-3.2.2.tar.gz -C /home/hadoop/app

4.2 进入到 /home/hadoop/app做一个软连接:

  ln -s hadoop-3.2.2 hadoop

软连接(相当于快捷方式)

软连接的好处:

①版本切换,只需要去shell脚本配置hadoop的名字即可.

②小盘转大盘(最后要查看用户和权限,然后启动服务)

4.3 cd /home/hadoop/app/hadoop查看,关心以下目录:

①bin  命令执行脚本(大部分的大数据项目解压后都有bin目录)

②sbin  启动或停止服务的脚本

③etc  配置文件(部分大数据项目解压后没有etc目录,而是生成config目录)

4.4 看官网,了解三种模式

①Local (Standalone) Mode 本地模式 ,不启动进程,实际工作中从来没用过[单个java进程]

②Pseudo-Distributed Mode  伪分布式 ,启动进程 单个进程(老大 小弟),学习

③Fully-Distributed Mode      集群模式 , 启动多个进程(2个老大,多个小弟),生产 。

[考点]:Hadoop has been demonstrated on Linux clusters with 2000 nodes.

Hadoop 的进程在集群中最多的正常的数量级可以部署在2000台机器中(可以认为它有2000个小弟))

5.Java安装(jdk 1.8.0_301)

软件要求:Java 一般用Java 8(我的版本jdk 1.8.0_301),在生产部署时一定要注意java的版本(生产部署时一定要注意其版本不在该问题版本列表中HadoopJavaVersions - HADOOP2 - Apache Software Foundation   ----这个网站是专门处理issue的)[注意]:凡是看到“组件名称-数字”,比如HADOOP-16795、SPARK-2908,表明该组件是有问题的,是存在ERROR的)

5.1 解压(root用户下)  

5.2. mkdir -p /usr/java(这个目录是固定的,因为后面CDH的部署强制要求jdk在这个位置)

mv jdk1.8.0_301 /usr/java/

chown -R root:root  /usr/java/*  #修正权限

vi /etc/profile      #配置全局环境变量

尾行添加:

         export JAVA_HOME=/usr/java/jdk1.8.0_301

         export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile   #使文件生效

which java  #检验配置java是否OK

6.ssh
伪分布式和集群模式都需要ssh

ssh:远程登录到目标地址,可能还会执行命令 ssh hadoop@hadoop001 date

【考题】:

6.1 从A机器跳到B机器远程登录,当前会话光标在哪里?

  答:在B机器,因为已经到了B机器,是跳到了B机器的家目录。

  验证:A-->hadoop      B-->root

[hadoop@hadoop001 ~]$ ssh root@hadoop001
root@hadoop001's password: 
Last login: Fri Nov 26 19:20:59 2021
[root@hadoop001 ~]# 

 

6.2 从A机器跳到B机器远程登录再执行命令,ssh hadoop@hadoop001 date 当前会话光标在A机器还是B机器?

  答:在A机器,因为执行命令结束后,会话也随之结束,然后又跳回来了。

  验证:A-->hadoop      B-->root

[hadoop@hadoop001 ~]$ ssh root@hadoop001 date
root@hadoop001's password: 
Tue Nov 30 09:04:29 CST 2021
[hadoop@hadoop001 ~]$ 

7.配置JAVA_HOME
 

cd app/hadoop/etc/hadoop

ll  (以.cmd结尾的是Windows下的执行文件;以.sh结尾的是Linux下的执行文件)

vi hadoop-env.sh 进入后在#JAVA_HOME=/usr/java/testing hdfs dfs -ls下面输入:

     JAVA_HOME=/usr/java/jdk1.8.0_301(前面的#是注释标志,一定要删了哈,不然不会生效哟!)

官方案例:(单机模式,无进程)

cd /home/hadoop/app/hadoop

mkdir input

cp etc/hadoop/*.xml input

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep input output 'dfs[a-z.]+'  #官方提供的例子(grep:过滤;input:输入的文件;output:过滤后的文件放这里;'dfs[a-z.]+' :过滤的条件)

[注]:'dfs[a-z.]+' :正则(“.”代表匹配除"rn"换行符之外的任意单个字符;“+”代表一次或多次匹配前面的字符或子表达式)参考:正则表达式 – 语法 | 菜鸟教程 (runoob.com)

ll    #运行结果:统计dfs开头的所有参数,放进output文件夹


[hadoop@hadoop001 hadoop]# cd output/
[hadoop@hadoop001 output]# ll
total 4
-rw-r--r-- 1 hadoop hadoop 11 Nov 21 10:14 part-r-00000
-rw-r--r-- 1 hadoop hadoop  0 Nov 21 10:14 _SUCCESS

ll  #显示_SUCCESS表示运行成功;part-r-00000存放运行结果


[root@ruozedata001 output]# cat part-r-00000
1       dfsadmin
[root@ruozedata001 output]# 

cat part-r-00000  #显示1 dfsadmin,表示dfsadmin出现了一次

8. 伪分布式部署
8.1 hadoop需要单个节点,每个进程独立的跑起来。

8.2 root用户下修正用户、用户组,避免权限错误:

chown -R hadoop:hadoop hadoop/*

8.3 配置文件在/home/hadoop/app/hadoop/etc/hadoop目录下 

1)配置core核心服务
cd /home/hadoop/app/hadoop/etc/hadoop

vi core-site.xml  #hdfs的访问路径

  进入之后,【第一行、第二行千万不要删除!!!】

 

之间输入:

   

        fs.defaultFS

        hdfs://hadoop001:9000  #官网上是localhost:9000,改成当前机器名哈

   

2)配置hdfs组件
vi hdfs-site.xml

  进入之后,【第一行、第二行千万不要删除!!!】--同上

  在之间输入:

 

        dfs.replication  #副本机制,默认为三份

        1   #(1台机器)1个副本

   

9. 配置ssh不需要密码启动
9.1 配置ssh启动不需要密码

切换到家目录

ssh-keygen   #按三次回车(如果忘了命令,输入ssh按两次Tab键)

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  #将公钥放进一个信任文件里(开始创建用户时没有配置密码,但是想要被访问就得配置公钥[相当于一个密码])

chmod 0600 ~/.ssh/authorized_keys #赋予600权限【重中之重】

9.2 建立连接

cd .ssh

chmod 600 authorized_keys #赋予600权限。ssh登录时仍然需要密码(所以赋予600权限超级重要)

ssh comerdata001  #用当前光标所在的用户去访问ssh(等价于ssh hadoop001@comerdata001)

第一次建立连接时,需要输入yes哈

9.3 格式化

为什么要格式化? 

答:①hdfs分布式文件存储部署在Linux环境中,而hdfs有自己约定的文件格式,所以一定要格式化去适应Linux环境;②格式化会生成一些初始的目录配置。

cd ~/app/hadoop

bin/hdfs namenode -format  #格式化完成后,文件存储在系统自带的/tmp目录

显示:Storage directory /tmp/hadoop-hadoop001/dfs/name has been successfully formatted.说明格式化成功

4.启动

sbin/start-dfs.sh

启动了三个进程:Namenode、Datanode、Secondary Namenode

①Namenode 名称节点,存储源数据,启动在当前机器 老大

②Datanode 数据节点,存储数据内容,启动在localhost 小弟

③Secondary Namenode 如果没有配置,启动在localhost,但是配置后也启动在当前机器 老二

“老大”被挂掉,“老二”上位。但是“老二”“能力不足”有局限性:因为“老二”去同步“老大”的数据并不是实时备份,而是每隔一小时备份一次。“老大”被挂掉,“老二”上位,数据可能会丢失,这样局限性很大。比如“老大”11:30出事了,“老二”上位只有11:00之前的数据。所以生产上一般不要“老二”,而是用另一个实时备份的“老大”,等“老大”一gg,新“老大”马上接替它。

jps #查看服务有没有启动成功(这个很不保险,有可能是假象,建议还是以ps -ef| grep hadoop为准)

Web访问Namenode
2.x 版本访问Web:端口号:50070

3.x 版本访问Web:端口号:9870

Windows打开浏览器,输入http://外网ip:9870(or 50070)

如果是云主机,端口号要在云主机的安全组打开,Windows打开网页需要关闭防火墙

关闭防火墙

  可参考配置可访问外网静态IP(四)配置虚拟机IP及Windows "ping" - 简书 (jianshu.com)

阿里云打开安全组

  1.打开阿里云,点击“云服务器ECS”,选择所买的实例所在地区;

  2.点击左侧菜单栏“网络与安全”下的“安全组”,点击“配置规则”;

  3.选择“入方向”配置:手动添加:

    ①端口范围:9870/9870(从端口号9870到9870结束,即只允许9870访问);

    ②授权对象:源:0.0.0.0/0,即允许所有IP访问

  4.刷新网页就OK了。

官方案例:
cd ~/app/hadoop

bin/hdfs dfs -mkdir /user  #创建目录(bin/hdfs dfs:在当前系统运行跑一个文件系统命令,可以用bin/hadfs --help命令和bin/hdfs dfs --help命令查看命令帮助看看此命令的用法;“/”不是Linux下的目录,而是hdfs自己存储生成的目录开始,Linux部署结束了是形成了自己的一套文件系统)

bin/hdfs dfs -ls / #查看hdfs自己文件系统的目录

bin/hdfs dfs -mkdir /user/hadoop001

bin/hdfs dfs -mkdir input  #前面没有输入绝对路径或当前路径,其默认是在当前用户所在的目录下(家目录)

bin/hdfs dfs -ls /user/hadoop001

bin/hdfs dfs -put etc/hadoop/*.xml input #将Linux里的/etc/hadoop下所有的.xml文件存放在hdfs环境input目录下。

bin/hdfs dfs -ls /user/hadoop001/input

跑案例计算:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep input output 'dfs[a-z.]+'

bin/hdfs dfs -get output output  #将文件从hdfs下载到Linux 

cd ~/app/hadoop/output/output

ll   #显示_SUCCESS表示运行成功;part-r-00000存放运行结果

cat part-r-00000

运行成功

【问题】:对比此处伪分布式cat part-r-00000和单机版cat part-r-00000,为什么运行程序一样会出现两种结果?

  (单机版结果:1 dfsadmin;而伪分布式多了1       dfs.replication)

   答:因为中途的.xml文件新增加了配置。

!!!!!关注我的博客,查看接下来的部署
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号