hadoop入门简介
Hadoop是apache开源的一个大数据组件,它包括大数据的计算存储以及资源和作业调度功能个,官网hadoop.apache.org
广义: 以apache hadoop软件为主的生态圈(hive zookeeper spark hbase等)
狭义: apache hadoop软件
hadoop的三大组成部分
hdfs:存储,分布式文件系统
mapreduce:计算 但是企业不用(开发难度高 代码量大 计算慢)
yarn:资源(CPU memory)和作业调度
下载安装包
百度搜索 cdh tar,打开第一个链接(http://archive.cloudera.com/cdh5/cdh/5/),该地址为cdh的软件仓库
搜索hadoop-2.6.0-cdh5.7.0,打开进入的是cdh版hadoop2.6.0的导航界面,该界面与hadoop官网的导航界面非常的类似,包含了详细的安装教程
返回chd软件仓库界面,选择对应的tar包点击下载
创建hadoop用户和上传hadoop软件
useradd hadoo #创建hadoop用户,遵循一个组件由一个用户管理原则
su - hadoopp
mkdir app data software lib source #创建安装/数据/软件包/jar包/源码等文件夹
cd software
rz #将下载好的搜索hadoop软件以及jdk上传到software目录
使用root用户安装JDK
exit #退出hadoop用户
java -version #查看系统是否已经默认安装了jdk
rpm -qa | grep jdk #查询具体安装那些jdk软件
yum -y remove XXX #将安装的jdk卸载,xxx为rpm查询的结果
mkdir /usr/java # java安装目录,必须是该目录,CDH环境会识别它,采坑重要
mkdir /usr/share/java #部署CDH需要mysql jdbc jar包,放在这里,采坑重要
tar -zxvf /home/hadoop/software/jdk-8u152-linux-x64.tar.gz -C /usr/java/ #解压
cd /usr/java
ll #仔细查看,很奇怪,发现拥有者是uucp,目前只发现jdk解压会这样,这是一个坑,生产特定情况下会出现问题,需要修改拥有者,采坑重要
chown -R root:root jdk1.8.0_152 #修改拥有者以及所属组
#扩展知识,uucp用户查看passwd文件,可知其解释器是/sbin/nologin,表示无法登录即无法su,生产中若遇到这样的账户,且必须要登录,可将/sbin/nologin改为/bin/bash
添加环境变量
vim /etc/profile #编辑环境变量文件,追加如下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_152
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JER_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JER_HOME/bin:$PATH
保存退出。
source /etc/profile #更新环境变量
java -version #这时候会发现java已经变成看我们想要的
配置ssh免密码互信
su - hadoop
ssh-keygen #连续四个回车,生产~/.ssh文件夹
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将公钥放到一个文件夹中
chmod 600 authorized_keys #cdh操作指南这里没提示该步骤,但是hadoop官网有,不修改权限是后续不会成功地,采坑重要
ssh localhost date #表示远程localhost机器执行date命令,不是远程过去,第一次远程需要输入yes确认
部署hdfs
su - hadoop
tar -zxvf ~/software/hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app/ #解压
cd ~/app/hadoop-2.6.0-cdh5.7.0/
ll #解压后的目录如下,大数据组件目录一般都有相似结构
bin # 客户端相关可执行脚本
bin-mapreduce1 #
cloudera #
etc # 配置文件目录,一般都是conf
examples # 样例
examples-mapreduce1 #
include #
lib #jar包
libexec #
LICENSE.txt #
NOTICE.txt #
README.txt #
sbin # 服务端相关可执行脚本
share #共享文件
src #源码
编辑hadoop-env.sh配置文件
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hadoop-env.sh #编辑该文件添加或修改如下配置,java安装家目录以及hadoop安装的家目录。
export JAVA_HOME=/usr/java/jdk1.8.0_152
export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
编辑core-site.xml配置文件
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml
编辑hdfs-site.xml配置文件
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hdfs-site.xml
启动hdfs
~/app/hadoop-2.6.0-cdh5.7.0/bin/hdfs namenode -format #格式化文件系统,等待一会后出现successfully formatted日志信息,表示格式化成功
~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh #启动hdfs,观看控制台信息,得到如下信息:
1)、日志中显示分别启动了namenode、datanode、secondarynamenode三个进程,可用jps查看。
2)、启动secondary namenodes时提示我们要连接,因为该进程是在0.0.0.0服务器启动。上面我们只在localhost机器做了一次ssh登录,所以第一次ssh 0.0.0.0免秘钥时是需要yes确认的。
3) hadoop的日志为在~/app/hadoop-2.6.0-cdh5.7.0/logs/hadoop-用户名-进程名-主机名称.out
通过 http://ip:50070/ 可访问hdfs界面
配置hadoop环境变量
su - hadoop
vim ~/.bash_profile # 配置hadoop环境变量,追加如下内容
export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
export PATH=$HADOOP_PREFIX/bin:$PATH
source ~/.bash_profile
hdfs命令
hdfs dfs #查找hdfs命令帮助,和linux及其相似
hdfs dfs -ls / #列出/目录下所有文件,很类似于linux 的ls
优化-以本机hostname机器启动hdfs
Jps #可展示运行的三大进程
nameNode 简称nn,这里存储了文件的元信息,维护hdfs目录结构
Secondary nameNode 万年老二,备份nameNode,当namendoe挂了时它顶上
dateNode 真正干活的进程,即文件读写由该进程完成
hadoop配置文件简介
cd ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop #配置文件存放目录
ll
hadoop-env.sh #配置jdk目录以及hadoop安装目录 重要
hdfs-site.xml #hdfs配置的地方,如配置副本数 重要
mapred-env.sh|mapred-site.xml.template #配置MR的地方,一般不需要配置
yarn-env.sh #yarn环境配置的地方,一般不需要配置
yarn-site.xml #yarn相关配置的地方 重要
core-site.xml #是对yarn|hdfs|mr .xml 核心的和共有 配置
停止hdfs
su - hadoop
~/app/hadoop-2.6.0-cdh5.7.0/sbin/stop-dfs.sh #停止hdfs
修改相应配置文件
exit #退出hadoop用户,使用root用户
vim /etc/hosts #编辑hosts文件配置主机映射(如:192.168.153.131 hadoop002),若已经配置过,则跳过,这里一定要注意,第一行和第二行不能删改,采坑重要
su - hadoop
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml #将配置中的<value>hdfs://localhost:9000</value>的localhost用hadoop002替换,更改了nameNode启动机器地址
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/slaves #更改datanode启动机器地址,将localhost使用hadoop002替换,若以后多个dataNode节点,只需用逗号分隔即可。
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hdfs-site.xml #修改secondarynamenode添加如下所示的配置内容,具体配置信息查询官网得知。
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop002:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>hadoop002:50091</value>
</property>
~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh #此时启动会发现三个进程都是以hadoop002启动的
优化-修改hadoop进程pid文件存放位置
mkdir /data/tmp #创建pid文件存储目录
chmod -R 777 /data/tmp
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hadoop-env.sh #编辑,修改原有的为export HADOOP_PID_DIR=/data/tmp
~/app/hadoop-2.6.0-cdh5.7.0/sbin/stop-dfs.sh #
~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh #重启hadoop进程
部署yarn
编辑mapred-site.xml,设置mr运行的环境为yarn
su - hadoop
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 #复制一份配置文件
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/mapred-site.xml #添加如下配置
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
编辑yarn-site.xml文件
vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/yarn-site.xml #添加如下配置
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
启动yarn
~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-yarn.sh #启动yarn
jps #这时会发现多出两个进程 ResourceManager和NodeManager
ResourceManager :资源管理者,老大
NodeManager :节点管理者,老二
通过http://ip:8088/ 可查看yarn运行界面
运行mapreudce进行词频统计
find ./ -name '*example*.jar' #查询hadoop提供的样例jar包,找到我们需要的jar
hadoop jar ./app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar #查看有哪些案列,我们需要的wordcount案列进行词频统计
#创建两个log文件并上传hdfs
cd ~/data/
vim a.log
cat a.log
zuoze
Jge
dashu
adai
shiqi
1
[hadoop@hadoop002 data]$ cat b.log
cat: b.log: No such file or directory
[hadoop@hadoop002 data]$ vim b.log
[hadoop@hadoop002 data]$ cat b.log
ruoze
ruoze
dashu
wsk
wsk
1
2
3
hdfs dfs -mkdir -p /wordcount/inputdata #创建输入数据文件夹
hdfs dfs -mkdir -p /wordcount/inputdata
hdfs dfs -put b.log /wordcount/inputdata
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至完成需要等待一会儿
hdfs dfs -cat /wordcount/outputdata1/part-r-00000 #查看词频统计结果
1 2
2 1
3 1
Jge 1
adai 1
dashu 2
ruoze 2
shiqi 1
wsk 2
zuoze 1