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版本)_comer_liu的博客-CSDN博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容