IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hadoop入门二(3.2.2版本) -> 正文阅读

[大数据]Hadoop入门二(3.2.2版本)

一.配置hdfs的三个进程以本地机器名comerdata001启动

目的:配置hdfs的老大NN、老二SNN、小弟DN三个进程以本地机器名comerdata001启动

好处:hdfs的三个进程和HA都是以机器名配置和启动的,这样的好处在于如果以后ip变化了,不用去修改配置文件,只需要直接修改机器的hosts文件即可

准备工作:

1.登录到hadoop001用户并切换到~/app/hadoop目录下

ps -ef | grep hadoop? #查看hadoop进程

sbin/start -dfs.sh #启动服务? ? sbin/stop -dfs.sh #关闭服务

启动hdfs的三个服务

2.ifconfig #查看Linux的ip地址

Linux的ip地址

修改机器名:

vi /etc/hosts #配置hadoop001用户的ssh信任关系

? ? ?进入之后在最后一行输入ip? 机器名

? ?注意:进入之后第一行和第二行千万不能删除!!!

前面ip;后面机器名

(一).配置Namenode以comerdata001启动

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

vi core-site.xml? #进入之后,第一行、第二行千万不能删除!!!

在<configuration>与</configuration>之间输入:

<property>

? ? ? ? <name>fs.defaultFS</name>

? ? ? ? <value>hdfs://comerdata001:9000</value>

? ? </property>

配置老大NN以机器名启动

(二).配置Datanode以comerdata001启动

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

cat workers #查看小弟DN? 【注意】:workers是3.x版本的小弟DN配置文件;2.x版本的小弟DN配置文件是slaves(奴隶变工人)

vi workers? #进入之后直接将localhost改为comerdata001即可

(三).配置Secondary Namenode以comerdata001启动

1.先看官网配置文件的参数

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

老二SNN官方默认参数

其中0.0.0.0代表SNN本身和hostname;9868是默认端口号

【注意】:9868/9869是3.x版本的老二SNN的默认端口;

2.x版本的老二SNN的默认端口是50090、50091

2.配置

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

vi hdfs-site.xml? #进入之后,第一行、第二行千万不能删除!!!

在<configuration>与</configuration>之间输入:

<configuration>

? ? <property>

? ? ? ? <name>dfs.replication</name>

? ? ? ? <value>1</value>

? ? </property>

? <property>

? ? ? ? <name>dfs.namenode.secondary.http-address</name>

? ? ? ? <value>comerdata001:9868</value>

? ? </property>

? ? ? <property>

? ? ? ? <name>dfs.namenode.secondary.https-address</name>

? ? ? ? <value>comerdata001:9869</value>

? ? </property>

配置老二SNN以机器名启动

配置NN、SNN和DN三个进程以comerdata001启动后,

cd /home/hadoop001/app/hadoop (cd ~/app/hadoop)

sbin/stop-dfs.sh? #关闭三个进程

ps -ef | grep hadoop? #查看进程是否完全关闭

sbin/start-dfs.sh? #启动三进程

以comerdata001启动三进程

!!!此时能明显看出老大NN和老二SNN是以comerdata001启动的,但是不能看出小弟DN以什么启动,这时候可以通过log日志查看一下小弟DN是否以comerdata001启动

cd ~/app/hadoop/logs 然后ll 即可。

通过logs查看hdfs的三进程以机器名启动

二./tmp目录、pid文件及更改数据存储目录

(一)./tmp目录、pid文件

用于控制进程的:进程启动会写一个pid;进程停止从pid文件读取进程号,然后kill -9 进程号

pid指的是服务的进程号

cd /tmp? 【注意:】这里的tmp目录是系统的tmp目录哟

tmp目录下的pid文件

cd hadoop-hadoop001 然后ll,显示dfs和mapred目录,其中dfs是配置目录和数据存储目录。

ll /tmp

cat?cat hadoop-hadoop001-datanode.pid? #显示35141,即datanode的pid是35141,也即datanode服务的进程号是35141.

ps -ef | grep 35141 #通过pid查看进程

查看DN进程的pid并以此pid来查看进程

!!!【问题】:为什么pid文件不能放在/tmp目录(系统自带的tmp目录)下面呢?

因为/tmp目录默认30天自动清除,到时候pid的文件就没有了,会影响服务的启动和重启。

下面手动删除DN的pid文件来模拟此过程:

①rm -f hadoop-hadoop001-datanode.pid? #删除DN的pid文件

②sbin/stop-dfs.sh? #(系统维护的时候)停止hdfs进程,但是表面上看没有任何问题

③ps -ef | grep hadoop #此时就会发现DN根本停不掉

模拟删除DN.pid停止不了该服务进程

④sbin/start-dfs.sh? #启动服务进程,这时候表面上看也没有任何问题

⑤ps -ef | grep hadoop?#但是此时就会发现DN的pid根本没有变化(还是之前的pid)

模拟删除DN.pid启动不了该服务新的进程

恶果:维护的时候,你以为更新配置或者更新jar ,DN重启生效了。其实DN压根都没有重启。

所以pid文件一定不能放在系统原有的/tmp目录里面。

(二).更改数据存储目录(2.x版本)

由上面知道pid文件放在系统原有的/tmp目录里面非常危险,其实数据存储目录也在该目录里面,也同样危险,所以要把它们放在用户自己的家目录里面。

cd ~/app/hadoop/etc/hadoop

vi core-site.xml? #进入之后新增:

<property>

? ? ? ? <name>hadoop.tmp.dir</name>

? ? ? ? <value>/home/hadoop001/tmp</value>

</property>

更改数据存储目录到用户自己的tmp目录下

kill -9 NN、SNN、DN的pid

cd ~/tmp

mv /tmp/hadoop-hadoop001 /home/hadoop001/tmp

su

cd /tmp

rm -rf *.pid

再次启动:

su - hadoop001

cd ~/app/hadoop

sbin/start-dfs.sh

jps

【可能问题1】尽管三个进程已经启动了,但/home/hadoop001/tmp目录下并没有三个.pid文件,这是因为mv之后没有做“ln -s”软连接,配置文件还是读取的老地方:系统/tmp目录下,而实际存储在/home/hadoop001/tmp目录下。这样也可能导致hdfs的三个进程启动不完整。

比如jps后发现Datanode、Secondary Namenode启动了,而Namenode进程没有启动。

解决办法一:建立软连接

解决办法二:格式化

su - hadoop001

cd ~/app/hadoop

sbin/stop-dfs.sh

bin/hdfs namenode -formate? #格式化

显示这行表示格式化成功

再sbin/start-dfs.sh即可

【可能问题2】启动之后,jps发现Namenode、Secondary Namenode启动了,而Datanode进程没有启动

解决办法:把~/tmp目录下dfs里面的VERSION的data的ID改为和name的一样再重新启动即可。具体如下:

cat ~/tmp/hadoop-hadoop001/dfs/data/current/VERSION

cat ~/tmp/hadoop-hadoop001/dfs/name/current/VERSION

然后对比下面两处,将data的clusterID通过vi命令改的和name的clusterID一样即可(我已经改过啦)

确保data和name的clusterID一致

(三).配置pid文件存放在用户的tmp目录下

cd ~/app/hadoop/etc/hadoop

vi hadoop-env.sh

配置pid的环境变量

然后重新启动即可。

(四).更改数据存储目录(3.x版本)

?上面(二)是2.x版本的操作,但我的hadoop是3.2.2版本,所以需要对core-site.xml文件做下修整

cd ~/app/hadoop/etc/hadoop

vi core-site.xml? #进入之后新增:

? ? ? ? <name>hadoop.tmp.dir</name>

? ? ? ? <value>/home/hadoop001/tmp/hadoop-${user.name}</value>

</property>

修整core-site文件,更改tmp目录

修整结束后一定要格式化哟!!!

解读官网:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

dfs.datanode.data.dir : 10块物理磁盘 ,5T

dfs.datanode.data.dir : /data01/dfs/dn,/data02/dfs/dn,/data03/dfs/dn.......

也就是说,一块磁盘写的能力30M/s ,那么它需要10s;而10块磁盘写的能力是300M/s,那么它10s就能写完,多块磁盘是为了存储空间更大,且高效率的读写IO。 肯定比单块磁盘更快。

所以生产上DN的数据目录参数,必然不能默认使用${hadoop.tmp.dir},需要根据自己实际情况写清楚。

三.yarn的部署

(一).基本概念

ResourceManager RM 是全局的进程

NodeManager? ? NM? ?是每个节点上的进程,管理这个节点上的资源分配和监控运行节点的健康状态。

(二).yarn部署教程

1.配置mapred-site.xml文件

cd?~/app/hadoop/etc/hadoop \ ll

查看yarn的配置文件

【注意】:

①2.x版本没有mapred-site.xml文件,需要拷贝模板文件mapred-queues.xml.template改名为mapred-site.xml;而3.x版本直接有mapred-site.xml文件。

②2.x版本不需要配置classpath。

vi?mapred-site.xml? #进入之后,前面的内容千万别动,然后新添加:

<property>

? ? ? ? <name>mapreduce.application.classpath</name

? ? ?<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>

</property>

配置mapred-site.xml文件

mapreduce.framework.name

yarn? ?表示mapreduce的计算框架在yarn上

2.配置yarn-site.xml文件

与2.x版本相比,3.x版本多了env-whitelist配置。

vi yarn-site.xml? 进入之后在图示位置新添加:

? ? <property>

? ? ? ? <name>yarn.nodemanager.env-whitelist</name>

? ? ? ? <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>

? ? </property>

配置yarn-site.xml文件

3.启动yarn

cd ~/app/hadoop

sbin/start-yarn.sh

yarn启动

4.yarn的浏览器打开

此时ResourceManager的端口号是8088

进入Windows的web界面,输入:ip:8088看能否打开网页,验证是否配置OK

yarn的网页打开

(三).端口挖矿处理及修改端口号

1.端口挖矿处理

根据生产上的经验,8088端口极易被挖矿(中病毒),表现是登录机器和操作命令时很卡很卡,且通过top命令查看到有个进程占据CPU100%。

解决办法一:找到挖矿文件,chmod 000权限给它。

解决办法一:进入挖矿文件,清空里面的内容。

解决办法一:进入挖矿文件开头加exit 0 然后直接退出。

但是问题的关键在于如何找到挖矿文件呢?

所以我们一般通过更改端口号的方法来尽可能的避免被挖矿

2.修改8088端口号

①配置:

vi yarn-site.xml? 进入之后,新增配置:

<property>

? ? ? ? <name>yarn.resourcemanager.webapp.address</name>

? ? ? ? <value>comerdata001:8123</value>

</property>

修改8088端口号为8123

②验证:进入Windows的web界面,输入:ip:8123看能否打开网页,验证端口号是否修改成功.

yarn新端口打开web

(四).经典案例Wordcount(词频统计)及源码实现

1.环境准备

配置个人环境变量

cd

vi .bashrc? 进入之后配置:

? ? ? export HADOOP_HOME=/home/hadoop001/app/hadoop

? ? ? export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

配置个人环境变量

. .bashrc? #使配置文件生效

which hdfs

2.数据准备

hdfs dfs -ls /

hdfs dfs -mkdir /input

vi 1.log? 输入:

? jepson

? ruoze

? xingxing

? a b c

? b a c

? jepson

? www.ruozedata.com ruoze a b c

hdfs dfs -put 1.log /input? #把文件从Linux放进hdfs的/input目录下

hdfs dfs -ls /input? #查看文件是否移动成功

hdfs dfs -cat /input/1.log? #查看文件内容是否丢失

3.find查找及计算作业

①find查找

当不知道jar包具体名字是什么,可以根据find查找关键字
find ./ -name '*example*'

find查找

②计算案例

yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /input /output1

词频统计流程

①number of splits:1 【切片是1 规则 】

②map tasks=1 【map 任务 1】

③reduce tasks=1 【reduce 任务 1】(生成的结果)

如果报错:Error file: prelaunch.err.

Last 4096 bytes of prelaunch.err :

Last 4096 bytes of stderr :

/bin/bash: /bin/java: No such file or directory

原因是没有这个目录,做个软连接即可:

先whereis java 再ll /bin/java看看有没有/bin/java目录,

再which java 最后做个ln -s /usr/java/jdk1.8.0_301/bin/java /bin/java

4.分析结果

hdfs dfs -ls /output1

hdfs dfs -cat /output1/part-r-00000

词频统计结果

运行流程:

第一步map:每一行按空格拆分单词 ,且每个单词赋予默认值为1

? (jepson,1)

? (ruoze,1)

? (xingxing,1)

? (a,1) (b,1) (c,1)

? (b,1) (a,1) (c,1)

? (jepson,1)

? (www.ruozedata.com,1)(a,1) (b,1) (c,1)

第二步reduce: 按单词维度,统计每个单词出现的次数(按字母顺序排序)

? a: 1+1+1=3==>? a 3

? b: 1+1+1=3==>? b 3

? c: 1+1+1=3==>? c 3

? jepson: 1+1=2==>? jepson 2

? ruoze: 1+1=2==>? ruoze 2

? www.ruozedata.com: 1==>? www.ruozedata.com 1

? xingxing: 1==>? xingxing 1

相当于SQL里面的select 单词,sum(value) from t group by 单词;

【附】

a 100 --> a 100*10

b 200? --> b 200*10

map? ? 映射? 年终奖10倍

reduce 规约? 3000块

5.解读源码

https://github.com/apache/hadoop

https://github.com/apache/hadoop/blob/release-3.2.2-RC3/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/WordCount.java

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:47:32  更:2021-12-11 15:48:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:36:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码