开发环境
mac 系统 vm fusion centos 7.5mini
配置静态的ip地址
修改vim /etc/sysconfig/network-scripts/ifcfg-ens33
这个配置文件
在该文件中添加,修改如下内容:
BOOTPROTO="static" #配置为静态ip
#增加ip信息内容
IPADDR=192.168.31.11
GATEWAY=192.168.31.1
PREFIX=24
DNS1=114.114.114.114
修改HWADDR
和vm 机器上的一致
修改UUID
随意修改一个数就可以,保证在虚拟中不重复
重新启动网卡服务
service network restart
测试是否成功
ifconfig
命令查看是否配置成功
ping qq.com
查看是否能够连接远程网络
修改主机名称
查看当前主机名称
hostnamectl
或者hostnamectl status
这里有三种主机名称状态
静态--static
、瞬态--transient
或灵活--pretty
。可以在hostname
后面作为参数使用
修改主机名称
hostnamectl set-hostname 主机名称
默认修改三者状态的所有名称,如需单独修改,可以加上主机参数在进行修改
修改hosts
vim /etc/hosts
192.168.31.11 hadoop11
重新启动机器
su root reboot
建立一个用户,给该用户添加权限
建立用户
略
添加权限
vim /etc/sudoers
复制
root ALL=(ALL) ALL
root修改为新建立的用户名称
用户名称 ALL=(ALL) ALL
切换到新建用户,建立文件夹
`sudo 用户名称`
`sudo mkdir module`
`sudo mkdir software`
`chown 用户名称:组名称 ./module ./software`
上传文件
hadoop
文件,jdk
文件
配置jdk
略
配置hadoop
上传文件到software
目录
使用tar
命令解压
tar -zxvf ./hadoop-2.7.2.tar.gz -C ../module/
修改hadoop文件下的java_home
vim /etc/hadoop/hadoop_env.sh
找到JAVA_HOME
修改为具体的home路径
配置全局的hadoop路径
vim /etc/profile
末尾增加如下配置
# hadoop
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
刷新配置文件
source /etc/profile
验证配置
hadoop version
单机模式执行hadoop自带的exple
- 切换到
cd /opt/module/hadoop-2.7.2
目录下, mkdir input
创建一个文件夹用来存放输入的文件hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input/ ouput 'dfs[a-z.]+'
执行命令,hadoop
代表的是运行hadoop
程序 ,jar
说明的是jar
文件,share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar
文件的路径,grep
过滤的内容是从input
这个目录输入,然后输出到output
目录下,过来的条件是dfs[a-z.]+
- 完成后会在input同级目录下生成一个output文件夹查看里面的运行结果 .
- 注意
output
文件夹不需要自己手动建立,当有这个文件夹,会抛出异常
统计单词个数
- 切换到
cd /opt/module/hadoop-2.7.2
目录下, mkdir wcinput
一个文件夹touch word
创建一个文件- 执行
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
wordcount
统计单词的个数 wcoutput
查看结果
伪分布式模式(Pseudo-Distributed Operation)
修改etc/hadoop/core-site.xml
加入如下配置文件
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop13:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>
修改etc/hadoop/hdfs-site.xml
<!--产生的副本数-->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
建立文件夹
在hadoop
根目录下建立文件夹
mkdir -p data/tmp
格式化文件系统
hadoop namenode -format
启动namenode
hadoop-daemon.sh start namenode
启动 datanode
hadoop-daemon.sh start datanode
查看启动状态
jps
看到有namenode
和datanode
就是启动成功了
web客户端访问
关闭防火墙,centos 7关闭防火墙service firewalld stop
,关闭开机启动sudo systemctl disable firewalld
在浏览器中输入ip:50070
就可以访问
hdfs常用命令
创建文件夹
hdfs dfs -mkdir -p /user/heasy/input
上传文件到文件夹
hdfs dfs -put 文件名称
查看文件目录
hdfs dfs -ls 文件路径
查看文件
hdfs dfs -cat 文件路径
运行统计命令
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /user/heasy/input /user/heasy/output
查看统计结果
hdfs dfs -cat /user/heasy/output/*
下载文件到本机
hadoop dfs -get /user/heasy/output/* ./
删除文件
hadoop dfs -rmr /user/heasy/output
YARN单机版
编辑yarn-env.sh
添加JAVA_HOME
路径
编辑mapred-env.sh
添加JAVA_HOME
路径
编辑mapred-site.xml
先复制mapred-site.xml.template
这个文件,后更名为mapred-site.xml
增加如下配置
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
编辑yarn-site.xml
修改如下配置
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop13</value>
</property>
启动namenode
datanode
启动resourcemanager
yarn-daemon.sh start resourcemanager
启动datamanager
yarn-daemon.sh start nodemanager
测试启动是否成功
浏览器输入hadoop:8088
重新跑下测试用例
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /user/heasy/input/* /user/heasy/output
查看输出结果
查看文件系统中的输出结果
配置jobhistory
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop13:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop13:19888</value>
启动历史服务.
mr-jobhistory-daemon.sh start historyserver
查看服务
jps
查看服务 JobHistoryServer
配置ApplicationLogs
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
停止并重启historyserver
,resourcemanager
,nodemanager
登录web
可查看
ssh免密登录
输入ssh-keygen -t rsa
三次回车即可
会在当前用户下的.ssh/
目录下产生一个两个文件id_rsa
,id_rsa.pub
.
使用ssh-copy-id 主机名称/ip地址
复制私钥给指定的机器.会在.ssh/authorized_keys
产生一个文件
验真是否登录成功.在使用ssh-keygen
的机器上直接ssh 主机名称/ip地址
登录
rsync远程同步
- 简单说明
rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。 - 基本语法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
参数说明 :r
递归,v
显示复制过程,l
复制链接符号链接
$pdir/$fname
要拷贝的文件路径/名称
$user@hadoop$host:$pdir
目的用户@主机:目的路径
- 安装
rsync
,sudo yum -y install rsync
- 示例
sudo rsync -rvl /opt/tmp hadoop15:/opt
同步某一个文件夹到指定机器上
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if(($pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=15; host<17; host++)); do
#echo $pdir/$fname $user@hadoop$host:$pdir
echo --------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
集群规划
namenode
一定要和datanode
分开部署,不要放在同一台机器上secondarynamenode
一定要和namenode
分开
有由于现在手头只有三台虚拟机,部署结构如下:
nodemanager
和resourcemanage
最好不要放在一台机器上
如表
hadoop14 | hadoop15 | hadoop16 | |
---|---|---|---|
hdfs | namenode datanode | datanode | secondarynode datanode |
yarn | nodemanager | nodemange resourcemanger | nodemanager |
开始配置
- 修改
core-site.xml
,指定namenode
和文件存储路径
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop14:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
- 修改
hadoop-env.sh
中的java_home
export JAVA_HOME=/usr/local/soft/jdk1.8.0_181
- 修改
hdfs-site.xml
,修改副本数,和secondarynode
地址
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop16:50090</value>
</property>
- 修改
mapred-env.sh
中java_home
export JAVA_HOME=/usr/local/soft/jdk1.8.0_181
- 复制
mapred-site.xml.template
并修改名称为mapred-site.xml
,编辑mapred-site.xml
,指定mapreduce
运行在yarn上
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 修改
yarn-env.sh
中的java_home
export JAVA_HOME=/usr/local/soft/jdk1.8.0_181
- 修改
yarn-site.xml
,指定获取数据的方式,resourcemanager地址
!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop15</value>
</property>
- 修改
slaves
hadoop14
hadoop15
hadoop16
-
复制刚刚修改的文件到集群中的其他机器上
./xsync.sh /opt/
-
根据上面的集群规划,在
hadoop14
上格式话namenode
节点hadoop namenode -format
.然后启动namenode
和datanode
,启动脚本如下:start-dfs.sh
-
在hadoop15上启动
nodemanage
和resourcemanager
.启动脚本如下:start-yarn.sh
. -
查看没台机器的启动信息,
jps
,
hadoop14
信息如下
5745 DataNode
6439 Jps
5640 NameNode
6014 NodeManager
三个服务,和集群规划的服务数量一致,依次查看hadoop15
,hadoop16
和集群规划进行对照
- 注意: 如果不在指定的机器上面启动,会出现
namenode
,datanode
,resourcemaneger
,nodemanager
,secondarynode
启动不了的情况,首先需要停止stop-yarn.sh
,stop-dfs.sh
,然后删除hadoop
下目录./data/
,log
,然后重新格式化namenode
,hadoop namenode -format
,然后在start-dfs.sh
,start-yarn.sh
.
测试集群
- 建立文件系统目录.
hadoop fs -mkdir -p /user/heasy/input
- 上传文件到文件系统目录中,
hadoop fs -put ./test.txt /user/heasy/input/
- 查看文件
hadoop fs -lsr /
注意: 当上传的文件大小小于128M时,只会产生一个block
,大于128m时以此类推