Hadoop入门一(3.2.2版本)

Hadoop入门一(3.2.2版本),第1张

Hadoop入门一(3.2.2版本) 一.大数据

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

狭义大数据:hadoop软件本身,开源的(在gitlab上可以看到源代码和地址)

二.组成

Hadoop由以下三个部分组成:

1.hdfs  存储数据(主要是网盘存储)

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

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

实际上大数据也是这三个东西:

1.存储:hdfs、hbase、kudu

2.计算:mapreduce、spark、flink(其中spark和flink是重中之重)

3.资源和作业的调度:yarn

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

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

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

三.hadoop的安装部署

1.版本:hadoop-3.2.2(【注意】:下载二进制的binary,不要下载源代码)

2.要学会看官方文档:Apache Hadoop 3.3.1 – Hadoop: Setting up a Single Node Cluster.(注意版本哟)

(一).准备工作

1.官网下载压缩包:Apache Downloads

2.rz 上传hadoop压缩包到Linux(一般上传到root用户的/tmp目录,因为这个目录有777权限,在这个目录里没有权限的烦恼)

3.在Linux系统里创建一个用户hadoop001并在这个用户下创建以下文件夹:

useradd hadoop001  #新建用户hadoop001

su - hadoop001  #切换到该用户下

mkdir sourecode software app log lib data tmp shell app.bak.1 app.bak.2

sourcecode //存放源代码;software //存放安装包;app //解压后的目录;log //日志目录;data //数据目录;lib //存放第三方jar包;tmp //临时目录;app.bak.1和app.bak.2用于备份

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

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

4.把安装包从root用户移动到用户hadoop001

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

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

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

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

5.在root用户下赋予用户hadoop001的software目录下所以的权限:

    chown hadoop001:hadoop001 /home/hadoop001/software/*

(二).hadoop的软连接

1.切换到用户hadoop001的software目录解压hadoop压缩包到~/app目录:

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

2.进入到 /home/hadoop001/app做一个软连接:

  ln -s hadoop-3.2.2 hadoop

软连接

软连接的好处:

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

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

3.cd /home/hadoop001/app/hadoop查看,关心以下目录:

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

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

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

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个小弟)

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

(三).Java安装(jdk 1.8.0_301)

[参考mysql里jdk的安装部署(后期更新贴网址)]

1.解压(root用户下)  

2. mkdir -p /usr/java(这个目录是固定的,注意养成习惯)

     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

(四).ssh

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

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

【考题】:

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

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

  验证:root目录下,切到某个指定用户,再ssh root@机器名

从hadoop001跳到了root

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

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

  验证:exit到某个指定用户的家目录下,再再ssh root@机器名 date(执行完结果打印到控制台,然后又回到了当前目录)

从hadoop001到root执行命令后又回到了hadoop001

(五).配置JAVA_HOME

配置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(前面的#是注释标志,一定要删了哈,不然不会生效哟)

案例

测试一波:Local (Standalone) Mode下(只有程序启动时,才会有程序进程,用作调试)  单机模式: 无进程

cd /home/hadoop001/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"换行符之外的任意单个字符;“+”代表一次或多次匹配前面的字符或子表达式)参考:Java 正则表达式 | 菜鸟教程 (runoob.com)

ll    #运行结果:发现它自己创建了output文件夹

运行结果:自己创建了output文件夹

cd output

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

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

(六).伪分布式部署

1.hadoop需要单个节点,每个进程独立的跑起来。

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

chown -R hadoop001:hadoop001 hadoop/*

3.配置文件在/home/hadoop001/app/hadoop/etc/hadoop目录下

配置core核心服务

cd /home/hadoop001/app/hadoop/etc/hadoop

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

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

  在之间输入:

 

        fs.defaultFS

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

   

配置hdfs组件

vi hdfs-site.xml

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

  在之间输入:

 

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

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

   

配置ssh不需要密码启动

1.配置ssh启动不需要密码

cd ~

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

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

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

2.建立连接

cd .ssh

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

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

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

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 

对比:

Windows与Linux之间:上传rz 下载lz

Linux与hdfs之间:上传-put 下载:-get

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文件新增加了配置。

同步更新自:Hadoop入门一(3.2.2版本) - 简书 (jianshu.com)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5610001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存