| |
|
开发:
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查找 ②计算案例 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 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |