1 安装hadoop

1.1 将hadoop导入到/opt/software中

  • 我使用xftp实现文件上传

1.2 安装hadoop

  1. 解压
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

1.3 添加hadoop环境变量

  • /etc/profile.d/env.sh中添加hadoop环境变量
##HADOOP_HOME 
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  • 使配置文件生效
source /etc/profile.d/env.sh
  • 检查环境变量是否生效
hadoop version

1.4 hadoop的目录结构

2 hadoop集群配置

2.1 集群配置

2.1.2 集群部署规划

hadoop102hadoop103hadoop104
HDFS==NameNode== DataNodeDateNode==SecondaryNameNode== DataNode
YARNNodeManager==ResourceManager== NodeManagerNodeManager

2.1.3 配置集群

  • 需要配置的文件,在/opt/module/hadoop-2.7.2/etc/hadoop目录下

    • core-site.xml
    • hdfs-site.xml
    • yarn-site.xml
    • mapred-site.xml
    • hadoop-env.sh
    • yarn-env.sh
    • mapred-env.sh
    • slaves

2.1.3.1 核心配置文件 core-site.xml

  • 修改core-site.xml
vim core-site.xml
  • configuration标签下添加如下配置
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

2.1.3.2 HDFS配置文件 hadoop-env.sh/hdfs-site.xml

  • 修改hadoop-env.sh
vim hadoop-env.sh
  • 修改jdk环境变量路径(25行)
export JAVA_HOME=/opt/module/jdk1.8.0_144
  • 修改hdfs-site.xml
vim hdfs-site.xml
  • configuration标签下添加如下配置
<property>
        <name>dfs.replication</name>
        <value>1</value>
</property>
<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:50090</value>
</property>

2.1.3.3 YARN配置文件 yarn-env.sh/yarn-site.xml

  • 修改 yarn-env.sh
vim  yarn-env.sh
  • 修改jdk环境变量路径(24行)
export JAVA_HOME=/opt/module/jdk1.8.0_144
  • 修改yarn-site.xml
vim yarn-site.xml
  • configuration标签下添加如下配置
<!-- Reducer 获取数据的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
</property>
<!-- 日志聚集功能 -->
<property>
        <name>yarn.log-aggregation.enable</name>
        <value>true</value>
</property>
<!-- 日志保留设置7天 -->
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>

2.1.3.4 MapReduce配置文件 mapred-env.sh/mapred-site.xml

  • 修改mapred-env.sh
vim  mapred-env.sh
  • 修改jdk环境变量路径(16行)
export JAVA_HOME=/opt/module/jdk1.8.0_144
  • 修改mapred-site.xml
vim mapred-site.xml
  • configuration标签下添加如下配置
<!-- 指定 MR 运行在 Yarn 上 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop102:19888</value>
</property>

2.1.3.5 修改slaves

  • 添加集群主机名
vim slaves
hadoop102
hadoop103
hadoop104

2.1.4 集群单节点启动

  1. 如果集群时第一次启动,需要==格式化NameNode==,在/opt/module/hadoop-2.7.2目录下操作
hadoop namenode -format
  1. 在hadoop102中启动NameNode
hadoop-daemon.sh start namenode
  1. 在hadoop102、hadoop103、hadoop104中分别启动DataNode
hadoop-daemon.sh start datanode
  1. 使用jps查看节点启动情况
jps

2.1.5 SSH免密登陆配置

2.1.5.1 配置SSH

ssh 192.168.222.103
  • 在询问是否connecting时,输入yes

2.1.5.2 无密钥配置

  1. 免密登陆原理

  1. 生成公钥和私钥,在~/.ssh目录下进行。敲3个回车
ssh-keygen -t rsa
  1. 将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

2.1.5.3 .ssh文件夹下文件功能解释

文件夹功能
known_hosts记录 ssh 访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authorized_keys存放授权过得无密登录服务器公钥

2.1.6 编写集群分发脚本 xsync

2.1.6.1 scp(secure copy)安全拷贝

  1. scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
  2. 基本语法
命令递归要拷贝的文件路径/名称目的用户@主机:目的路径/名称
scp-rpdir/​fnameuser@hadoop​host:pdir/​fname
  1. 实例
# 将 hadoop101 中/opt/module 目录下的软件拷贝到 hadoop102 上
scp -r /opt/module root@hadoop102:/opt/module

2.1.6.2 rsync远程同步工具

  1. rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
  2. ==rsync 和 scp 区别==:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更

新。scp 是把所有文件都复制过去。

  1. 基本语法

    1. -r:递归
    2. -v:显示复制过程
    3. -l:拷贝符号链接
命令递归要拷贝的文件路径/名称目的用户@主机:目的路径/名称
rsync-rvlpdir/fnameuser@hadoophost:pdir/fname
  1. 实例
#把 hadoop101 机器上的/opt/software 目录同步到 hadoop102 服务器的 root 用户 下的/opt/目录
rsync -rvl /opt/software/ root@hadoop102:/opt/software

2.1.6.3 xsync集群分发脚本 (~/bin/xsync)

  1. 需求:循环复制文件到所有节点的相同目录下
  2. 创建vim xsync
#!/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=103; host<105; host++)); do
        echo ------------------- hadoop$host -------------- 
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
  1. 修改脚本xsync,使具有执行权限
chmod 777 xsync
  1. 执行分发脚本,回到/opt/module目录
xsync hadoop-2.7.2/

2.1.7 群起集群

  1. 如果集群是第一次启动,需要格式化NameNode。==注意格式化之前,一定要先停 止上次启动的所有 namenode 和 datanode 进程,然后再删除 data 和 log 数据==。(/opt/module/hadoop-2.7.2
bin/hdfs namenode -format
  1. 启动命令

    1. ==注意:NameNode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启 动 YARN,应该在 ResouceManager 所在的机器上启动 YARN。==
#老命令
sbin/start-all.sh

#新(推荐)
#启动HDFS
sbin/start-dfs.sh
#启动YARN
sbin/start-yarn.sh
  1. web端查看NameNode:http://hadoop102:50070/

2.1.8 集群基本测试

2.1.8.1 上传文件到集群

  1. 上传小文件(/opt/module/hadoop-2.7.2
hdfs dfs -mkdir -p /user/ruki/input
hdfs dfs -put wcinput/wc.input /user/ruki/input
  1. 上传大文件
bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/ruki/input

2.1.8.2 HDFS文件存放路径

/opt/module/hadoop-2.7.2/data/tmp/dfs/data

2.1.8.3 拼接

cat blk_1073741837>>tmp.file

2.1.8.4 下载

  • /opt/module/hadoop-2.7.2
bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz ./

2.1.9 集群启动/停止方式总结

2.1.9.1 各个组件逐一启动/停止

  • HDFS
hadoop-daemon.sh start namenode/datanode/secondarynamenode
hadoop-daemon.sh stop namenode/datanode/secondarynamenode
  • YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager

2.1.9.2 各个模块启动/停止(配置ssh为前提)

  • 整体启动/停止HDFS
start-dfs.sh
stop-dfs.sh
  • 整体启动/定制YARN
start-yarn.sh
stop-yarn.sh

2.2 项目经验

2.2.1 HDFS存储多目录

  • hdfs-site.xml 文件中配置多目录,注意新挂载磁盘的访问权限问题。
<property> 
    <name>dfs.datanode.data.dir</name> 
    <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///hd2/dfs/ data2,file:///hd3/dfs/data3,file:///hd4/dfs/data4</value> 
</property>
  • 开启目录数据均衡 /opt/module/hadoop-2.7.2

    • 对于参数 10,代表的是集群中各个节点的磁盘空间利用率相差不超过 10%
bin/start-balancer.sh –threshold 10
  • 停止数据均衡命令
bin/stop-balancer.sh

2.2.2 支持LZO压缩配置

  1. 将编译好的hadoop-lzo-0.4.20.jar 放入 hadoop-2.7.2/share/hadoop/common/
  2. 同步至hadoop103、hadoop104
xsync hadoop-lzo-0.4.20.jar
  1. core-site.xml新增配置 (/opt/module/hadoop-2.7.2/etc/hadoop
<property>
        <name>io.compression.codecs</name>
        <value>
        org.apache.hadoop.io.compress.GzipCodec,
        org.apache.hadoop.io.compress.DefaultCodec,
        org.apache.hadoop.io.compress.BZip2Codec,
        org.apache.hadoop.io.compress.SnappyCodec,
        com.hadoop.compression.lzo.LzoCodec,
        com.hadoop.compression.lzo.LzopCodec
         </value>
</property>
<property>
        <name>io.compression.codec.lzo.class</name>
        <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
  1. 同步 core-site.xml 到 hadoop103、hadoop104
xsync core-site.xml
  1. 重启集群(/opt/module/hadoop-2.7.2/bin
start-dfs.sh
stop-dfs.sh

2.2.3 LZO创建索引

  • 创建 LZO 文件的索引,LZO 压缩文件的可切片特性依赖于其索引,故我们需要手动为 LZO 压缩文件创建索引。若无索引,则 LZO 文件的切片只有一个。

2.2.4.1 测试

  1. 将 bigtable.lzo(214M)上传到集群的根目录
hadoop fs -mkdir /input
hadoop fs -put bigtable.lzo /input
  1. 对上传的lzo文件上传索引
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /input/bigtable.lzo
  1. 执行wordcount
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output2

2.2.4 基准测试

2.2.4.1 HDFS写

  • 写入10个128mb的文件
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

2.2.4.2 HDFS读

  • 读取10个128mb的文件
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB

2.2.4.3 删除测试生成的数据

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -clean

3 遇到的问题

3.1 NameNode没有启动成功

Last modification:May 2nd, 2020 at 04:11 pm