简介:本文章详细介绍了hadoop-2.6.0-cdh5.7.0在centos6.X上的部署流程以及生产中注意事项**

1、hadoop入门简介

1.1 Hadoop是apache开源的一个大数据组件,它包括大数据的计算存储以及资源和作业调度功能个,官网hadoop.apache.org

  1. 广义: apache hadoop软件为主的生态圈(hive zookeeper spark hbase等)
  2. 狭义: apache hadoop软件

image.gif
1.2生产上hadoop版本使用情况

  1. 1.x 企业不用
  2. 2.x 主流
  3. 3.x 没有企业敢用
  4. a.采坑
  5. b.很多公司都是CDH5.x部署大数据环境 (www.cloudera.com),本文章以hadoop-2.6.0-cdh5.7.0版本进行部署的

image.gif
1.3hadoop的三大组成部分

  1. hdfs:存储,分布式文件系统
  2. mapreduce:计算 但是企业不用(开发难度高 代码量大 计算慢)
  3. yarn:资源(CPU memory)和作业调度

image.gif

2、下载安装包。

2.1百度搜索 cdh tar,打开第一个链接(http://archive.cloudera.com/cdh5/cdh/5/),该地址为cdh的软件仓库。
2.2搜索hadoop-2.6.0-cdh5.7.0,打开进入的是cdh版hadoop2.6.0的导航界面,该界面与hadoop官网的导航界面非常的类似,包含了详细的安装教程
1.1 hadoop简介以及伪集群部署 - 图7image.gif
1.1 hadoop简介以及伪集群部署 - 图9image.gif

2.3返回chd软件仓库界面,选择对应的tar包点击下载

1.1 hadoop简介以及伪集群部署 - 图11image.gif

3、安装前置条件

  1. 阅读cdhhadoop2.6.0官网可知:
  2. 3.1需安装JDK,具体的版本的hadoop对应JDK版本有详细的列表,生产中错误的JDk版本会有可能导致问题,如已经发现的某个JDK版本在HBase使用时会发生内存泄漏,生产严格按照要求来,采坑重要!!。
  3. 3.2需安装ssh软件,并配置ssh免密码互信。

image.gif

4、创建hadoop用户和上传hadoop软件

  1. useradd hadoo #创建hadoop用户,遵循一个组件由一个用户管理原则
  2. su - hadoopp
  3. mkdir app data software lib source #创建安装/数据/软件包/jar包/源码等文件夹
  4. cd software
  5. rz #将下载好的搜索hadoop软件以及jdk上传到software目录

image.gif

5、使用root用户安装JDK

5.1解压安装

  1. exit #退出hadoop用户
  2. java -version #查看系统是否已经默认安装了jdk
  3. rpm -qa | grep jdk #查询具体安装那些jdk软件
  4. yum -y remove XXX #将安装的jdk卸载,xxx为rpm查询的结果
  5. mkdir /usr/java # java安装目录,必须是该目录,CDH环境会识别它,采坑重要
  6. mkdir /usr/share/java #部署CDH需要mysql jdbc jar包,放在这里,采坑重要
  7. tar -zxvf /home/hadoop/software/jdk-8u152-linux-x64.tar.gz -C /usr/java/ #解压
  8. cd /usr/java
  9. ll #仔细查看,很奇怪,发现拥有者是uucp,目前只发现jdk解压会这样,这是一个坑,生产特定情况下会出现问题,需要修改拥有者,采坑重要
  10. chown -R root:root jdk1.8.0_152 #修改拥有者以及所属组
  11. #扩展知识,uucp用户查看passwd文件,可知其解释器是/sbin/nologin,表示无法登录即无法su,生产中若遇到这样的账户,且必须要登录,可将/sbin/nologin改为/bin/bash

image.gif
5.2 添加环境变量

  1. vim /etc/profile #编辑环境变量文件,追加如下内容:
  2. export JAVA_HOME=/usr/java/jdk1.8.0_152
  3. export JRE_HOME=$JAVA_HOME/jre
  4. export CLASSPATH=.:$JAVA_HOME/lib:$JER_HOME/lib:$CLASSPATH
  5. export PATH=$JAVA_HOME/bin:$JER_HOME/bin:$PATH
  6. 保存退出。
  7. source /etc/profile #更新环境变量
  8. java -version #这时候会发现java已经变成看我们想要的

image.gif

6、配置ssh免密码互信

  1. su - hadoop
  2. ssh-keygen #连续四个回车,生产~/.ssh文件夹
  3. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将公钥放到一个文件夹中
  4. chmod 600 authorized_keys #cdh操作指南这里没提示该步骤,但是hadoop官网有,不修改权限是后续不会成功地,采坑重要
  5. ssh localhost date #表示远程localhost机器执行date命令,不是远程过去,第一次远程需要输入yes确认

image.gif

7、部署hdfs

7.1解压软件

  1. su - hadoop
  2. tar -zxvf ~/software/hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app/ #解压
  3. cd ~/app/hadoop-2.6.0-cdh5.7.0/
  4. ll #解压后的目录如下,大数据组件目录一般都有相似结构
  5. bin # 客户端相关可执行脚本
  6. bin-mapreduce1 #
  7. cloudera #
  8. etc # 配置文件目录,一般都是conf
  9. examples # 样例
  10. examples-mapreduce1 #
  11. include #
  12. lib #jar包
  13. libexec #
  14. LICENSE.txt #
  15. NOTICE.txt #
  16. README.txt #
  17. sbin # 服务端相关可执行脚本
  18. share #共享文件
  19. src #源码

image.gif
7.2 编辑hadoop-env.sh配置文件

  1. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hadoop-env.sh #编辑该文件添加或修改如下配置,java安装家目录以及hadoop安装的家目录。
  2. export JAVA_HOME=/usr/java/jdk1.8.0_152
  3. export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

image.gif
7.3 编辑core-site.xml配置文件

  1. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml #编辑该文件添加或修改如下配置,并保存

image.gif
1.1 hadoop简介以及伪集群部署 - 图21image.gif
7.4 编辑hdfs-site.xml配置文件

  1. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hdfs-site.xml #编辑该文件添加或修改如下配置,并保存

image.gif
1.1 hadoop简介以及伪集群部署 - 图24image.gif
7.5 启动hdfs

  1. ~/app/hadoop-2.6.0-cdh5.7.0/bin/hdfs namenode -format #格式化文件系统,等待一会后出现successfully formatted日志信息,表示格式化成功
  2. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh #启动hdfs,观看控制台信息,得到如下信息:
  3. 1)、日志中显示分别启动了namenodedatanodesecondarynamenode三个进程,可用jps查看。
  4. 2)、启动secondary namenodes时提示我们要连接,因为该进程是在0.0.0.0服务器启动。上面我们只在localhost机器做了一次ssh登录,所以第一次ssh 0.0.0.0免秘钥时是需要yes确认的。
  5. 3 hadoop的日志为在~/app/hadoop-2.6.0-cdh5.7.0/logs/hadoop-用户名-进程名-主机名称.out

image.gif
通过 http://ip:50070/ 可访问hdfs界面。
1.1 hadoop简介以及伪集群部署 - 图27image.gif
7.6 配置hadoop环境变量

  1. su - hadoop
  2. vim ~/.bash_profile # 配置hadoop环境变量,追加如下内容
  3. export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
  4. export PATH=$HADOOP_PREFIX/bin:$PATH
  5. source ~/.bash_profile

image.gif
7.7 hdfs命令

  1. hdfs dfs #查找hdfs命令帮助,和linux及其相似
  2. hdfs dfs -ls / #列出/目录下所有文件,很类似于linux 的ls

image.gif

8、优化-以本机hostname机器启动hdfs

重要,步骤7启动hdfs,从日志中可以看出是以localhost和0.0.0.0机器启动的,生产中这样是不行的,尤其是在集群部署时,必须配置为主机名称,也不能为ip地址,这是规范
8.1 hdfs三大守护进程简介

  1. Jps #可展示运行的三大进程
  2. nameNode 简称nn,这里存储了文件的元信息,维护hdfs目录结构
  3. Secondary nameNode 万年老二,备份nameNode,当namendoe挂了时它顶上
  4. dateNode 真正干活的进程,即文件读写由该进程完成

image.gif
8.2hadoop配置文件简介

  1. cd ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop #配置文件存放目录
  2. ll
  3. hadoop-env.sh #配置jdk目录以及hadoop安装目录 重要
  4. hdfs-site.xml #hdfs配置的地方,如配置副本数 重要
  5. mapred-env.sh|mapred-site.xml.template #配置MR的地方,一般不需要配置
  6. yarn-env.sh #yarn环境配置的地方,一般不需要配置
  7. yarn-site.xml #yarn相关配置的地方 重要
  8. core-site.xml #是对yarn|hdfs|mr .xml 核心的和共有 配置

image.gif
8.3停止hdfs。

  1. su - hadoop
  2. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/stop-dfs.sh #停止hdfs,从日志中可看出每个进程由哪台机器进行关闭

image.gif
8.4修改相应配置文件

  1. exit #退出hadoop用户,使用root用户
  2. vim /etc/hosts #编辑hosts文件配置主机映射(如:192.168.153.131 hadoop002),若已经配置过,则跳过,这里一定要注意,第一行和第二行不能删改,采坑重要
  3. su - hadoop
  4. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml #将配置中的<value>hdfs://localhost:9000</value>的localhost用hadoop002替换,更改了nameNode启动机器地址
  5. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/slaves #更改datanode启动机器地址,将localhost使用hadoop002替换,若以后多个dataNode节点,只需用逗号分隔即可。
  6. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hdfs-site.xml #修改secondarynamenode添加如下所示的配置内容,具体配置信息查询官网得知。
  7. <property>
  8. <name>dfs.namenode.secondary.http-address</name>
  9. <value>hadoop002:50090</value>
  10. </property>
  11. <property>
  12. <name>dfs.namenode.secondary.https-address</name>
  13. <value>hadoop002:50091</value>
  14. </property>
  15. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh #此时启动会发现三个进程都是以hadoop002启动的

image.gif

9、优化-修改hadoop进程pid文件存放位置。

采坑重要,Linux在/tmp目录会定期删除一些文件和文件夹, 如30天周期,故hadoop进程pid文件存放/tmp目录下时,是有被删除风险,故需要重新修改pid文件存放位置

  1. mkdir /data/tmp #创建pid文件存储目录
  2. chmod -R 777 /data/tmp
  3. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hadoop-env.sh #编辑,修改原有的为export HADOOP_PID_DIR=/data/tmp
  4. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/stop-dfs.sh #
  5. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh #重启hadoop进程

image.gif

10、部署yarn

yarn进程是用于资源和工作调度管理,需要进行部署,mapreduce是运行的jar包,不需要部署,mapreduce一般是跑在yarn上
10.1修改相应配置文件

  1. 编辑mapred-site.xml,设置mr运行的环境为yarn
  2. su - hadoop
  3. cp ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/mapred-site.xml.template ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/mapred-site.xml #复制一份配置文件
  4. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/mapred-site.xml #添加如下配置
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. 编辑yarn-site.xml文件
  10. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/yarn-site.xml #添加如下配置
  11. <property>
  12. <name>yarn.nodemanager.aux-services</name>
  13. <value>mapreduce_shuffle</value>
  14. </property>

image.gif
10.2 启动yarn

  1. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-yarn.sh #启动yarn
  2. jps #这时会发现多出两个进程 ResourceManager和NodeManager
  3. ResourceManager :资源管理者,老大
  4. NodeManager :节点管理者,老二
  5. 通过http://ip:8088/ 可查看yarn运行界面

image.gif

11、运行mapreudce进行词频统计

11.1、简介
mapreudce分为map 映射,reduce 规约两种操作,注意不一定是map执行完后才执行reduce,可能map执行一半,reduce就开始运行了,实际计算很复杂。
11.211、进行词频统计

  1. find ./ -name '*example*.jar' #查询hadoop提供的样例jar包,找到我们需要的jar
  2. hadoop jar ./app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar #查看有哪些案列,我们需要的wordcount案列进行词频统计
  3. #创建两个log文件并上传hdfs
  4. cd ~/data/
  5. vim a.log
  6. cat a.log
  7. zuoze
  8. Jge
  9. dashu
  10. adai
  11. shiqi
  12. 1
  13. [hadoop@hadoop002 data]$ cat b.log
  14. cat: b.log: No such file or directory
  15. [hadoop@hadoop002 data]$ vim b.log
  16. [hadoop@hadoop002 data]$ cat b.log
  17. ruoze
  18. ruoze
  19. dashu
  20. wsk
  21. wsk
  22. 1
  23. 2
  24. 3
  25. hdfs dfs -mkdir -p /wordcount/inputdata #创建输入数据文件夹
  26. hdfs dfs -mkdir -p /wordcount/inputdata
  27. hdfs dfs -put b.log /wordcount/inputdata
  28. hadoop jar ~/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /wordcount/inputdata /wordcount/outputdata1 #提交mr作业到yarn,运行job至完成需要等待一会儿
  29. hdfs dfs -cat /wordcount/outputdata1/part-r-00000 #查看词频统计结果
  30. 1 2
  31. 2 1
  32. 3 1
  33. Jge 1
  34. adai 1
  35. dashu 2
  36. ruoze 2
  37. shiqi 1
  38. wsk 2
  39. zuoze 1

image.gif