当前位置: 代码迷 >> 综合 >> Hadoop3.x 环境搭建&&填坑
  详细解决方案

Hadoop3.x 环境搭建&&填坑

热度:37   发布时间:2024-02-11 20:25:39.0

Hadoop3.x 环境搭建&&填坑

    • 环境配置 && 安装JDK && 安装Hadoop
    • Hadoop运行模式之单机模式(官网Grep+WordCount案例)
      • 官方Grep案例
      • 官方WordCount案例
    • Hadoop运行模式之伪分布式模式
      • 1. 分析
      • 2. 步骤
    • 问题
    • 下面开始填坑
      • 端口: 50070 ----> 9870
      • 错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
      • 执行rsync 命令报错 ===> 需要同步的服务器都要安装这个命令(同步和被同步的机器)
      • 集群配置文件修改
      • etc/hadoop/workers # 替换2.x版本的slaves
      • 安装时间同步器

环境配置 && 安装JDK && 安装Hadoop

  1. 设置静态IP

    vim /etc/sysconfig/network-scripts/ifcfg-eth0NAME=eth0
    DEVICE=eth0
    BOOTPROTO=static
    ONBOOT=yes
    HWADDR=00:50:56:25:71:6a
    IPADDR=192.168.0.111
    GATEWAY=192.168.0.1
    DNS1=192.168.0.1# 保存退出
    
  2. 修改主机名

    vim /etc/sysconfig/networkHOSTNAME=hadoop01
    
  3. 关闭防火墙

    # 关闭防火墙 (开启:start,重启:restart,关闭:stop,状态:status,开启自启动:enable,关闭自启动:disable)
    systemctl stop firewalld
    # 重启防火墙这样也可以
    firewall-cmd --reload# 关闭防火墙自启动
    systemctl disable firewalld
    # 列出开放的所有端口
    firewall-cmd --list-ports
    # 查询某个端口是否开放 eg:3306 响应:yes或no
    firewall-cmd --zone=public --query-port=3306/tcp
    # 添加防火墙端口后,要重启防火墙才生效
    # 添加一个端口 eg:3306 持久开启(服务器重启,依然保持开启状态,不添加则属于临时添加端口): --permanent
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    # 添加一组连续的端口 eg:3306,3307,3308,3309
    firewall-cmd --zone=public --add-port=3306-3309/tcp --permanent
    
  4. 创建dev用户

    #创建用户 默认创建分组(名跟用户名一样)并将用户添加到该组中
    useradd dev# 创建分组 eg:新建分组devgroup
    groupadd devgroup
    # 新建用户同时添加分组 eg:新建用户aaa并将其添加到已有的devgroup分组中
    useradd -g devgroup aaa
    # 给已有用户添加分组 eg:将已存在用户dev添加到已存在分组devgroup中
    usermod -G devgroup dev
    # 查询centos7目前有哪些用户 # cut -d : -f 1 /etc/passwd
    cat /etc/passwd
    # 查询目前用户分组情况
    cat /etc/group
    
  5. 配置hadoop具有root权限

    1. 先用root账户修改 /etc/sudoers 文件权限为可编辑,默认只读 (-r–r-----)

    2. 修改文件 添加用户权限

    3. 改回 /etc/sudoers 文件权限为只读

    #步骤1)
    chmod 777 /etc/sudoers#步骤 2)
    vim /etc/sudoers
    # 复制 [ root ALL=(ALL) ALL ] 这行添加在下面修改下用户名就可以 eg:dev用户添加具有root权限
    ## Allow root to run any commands anywhere 
    root    ALL=(ALL)       ALL
    dev    ALL=(ALL)       ALL
    # 保存退出#步骤3)
    chmod 440 /etc/sudoers
    
  6. /opt目录创建module software文件夹

    mkdir /opt/software /opt/module
    
  7. 修改module software文件夹所有者为dev用户:dev分组

    # -R 递归文件夹,修改文件,文件夹拥有者
    chown -R dev:dev /opt/software /opt/module
    
  8. 安装JDK(上传压缩包,解压,配置环境变量,配置文件生效source一下),此处略过~~

  9. 安装hadoop(上传压缩包,解压,配置环境变量 bin目录 && sbin目录 ,配置文件生效source一下),此处略过~~

Hadoop运行模式之单机模式(官网Grep+WordCount案例)

官方Grep案例

  1. 在hadoop-3.3.0文件夹下面创建一个input文件夹

    mkdir input
    
  2. 将hadoop的etc文件夹下xml配置文件复制到input 注意:output文件夹不能存在,否则报错文件已存在异常 FileAlreadyExistsException: Output directory file:/opt/module/hadoop-3.3.0/output already exists

    cp /opt/module/hadoop-3.3.0/etc/hadoop/*.xml ../../input
    
  3. 执行share目录下的MapReduce程序

    如果遇到执行程序找不到主类: 看你执行命令是否为 hadoop jar xxx,以为hadoop xxx就可以啦O~O

    error : [ 错误: 找不到或无法加载主类 share.hadoop.mapreduce.hadoop-mapreduce-examples-3.3.0.jar ]

    hadoop jar /opt/module/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar grep input output 'dfs[a-z.]+'
    
  4. 查看输出结果

    cat output/part-r-00000# 显示结果
    1	dfsadmin
    

官方WordCount案例

  1. 在hadoop-3.3.0文件夹下面创建一个wcinput文件夹

    mkdir wcinput
    
  2. 在 wcinput 文件下创建一个 wc.txt文件,并添加内容

    # 创建文件命令 # touch wc.txt
    vim wc.txt# wc.txt文件内容 随意单词 eg:↓↓↓
    hello word map reduce yarn 
    hadoop hadoop dev dev test
    test test aaa
    cechsi namenode datanode resourcemanager
    who
    am
    i# 保存退出 :wq
    
  3. 回到hadoop-3.3.0文件夹下执行wordcount程序

    hadoop share/
    
  4. 查看结果

    cat wcoutput/part-r-00000# 显示结果
    aaa	1
    am	1
    cechsi	1
    datanode	1
    dev	2
    hadoop	2
    hello	1
    i	1
    map	1
    namenode	1
    reduce	1
    resourcemanager	1
    test	3
    who	1
    word	1
    yarn	1
    

Hadoop运行模式之伪分布式模式

1. 分析

1)配置集群

2)启动,测试集群增/删/改

3)执行WordCoung案例

2. 步骤

1)配置集群

  • 配置hadoop文件夹下etc/hadoop/adoop-env.sh

    # 查看 $JAVA_HOME
    echo $JAVA_HOME
    /opt/module/jdk1.8.0_221/bin# 修改etc/hadoop/adoop-env.sh中JAVA_HOME配置
    export JAVA_HOME=/opt/module/jdk1.8.0_221/bin
    # 保存退出 :wq
    
  • 配置core-site.xml

    <!-- 指定HDFS 中 NameNode 的地址 -->
    <property><name>fs.defaultFS</name><value>hdfs://hadoop101:9000</value>
    </property><!-- 指定Hadoop 运行时产生文件的存储目录 -->
    <property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.3.0/data/tmp</value>
    </property>
    
  • 配置hfs-site.xml

    <!-- 指定HDFS 副本的数量,默认副本数:3 -->
    <property><name>dfs.replication</name><value>1</value>
    </property>
    

2)启动集群(hadoop文件夹下)

  • 格式化NameNode(第一次启动时格式化,以后就不要总格式化)

    	bin/hdfs namenode -format
    
  • 启动NameNode

    	sbin/hadoop-daemon.sh start namenode
    
  • 启动DataNode

    	sbin/hadoop-daemon.sh start datanode
    

    3)查看集群

  • 查看集群是否启动成功
jps4755 DataNode
4835 Jps
4630 NameNode
  • WEB端查看HDFS
# hadoop3.x 版本
http://hadoop01:9870
# hadoop2.x版本
http://hadoop01:50070
  • 查看产生的log日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9wwtwQ2a-1597584027054)(Hadoop环境搭建入门.assets/image-20200806012842985.png)]

问题

  • 思考:为什么不能一直格式化 NameNode,格式化NameNode,要注意什么?

注意:格式化NameNode,会产生新的集群 id,导致 NameNode 和DataNode 的集群 id 不一致,集群找不到已往数据。所以,格式 NameNode 时,一定要先删除data 数据和 log 日志,然后再格式化 NameNode

# 查看namenode集群ID
cat data/tmp/dfs/name/current/VERSIONnamespaceID=851295736
clusterID=CID-2c00d4b3-1b98-4914-9d80-853c104b65f1# 查看datanode 集群ID(会发现和namenode中箪集群ID完全一样)
cat data/tmp/dfs/data/current/VERSIONclusterID=CID-2c00d4b3-1b98-4914-9d80-853c104b65f1
datanodeUuid=9fc063f9-dad5-4ac9-a7e9-512a35782361

4)操作集群

下面开始填坑

端口: 50070 ----> 9870


错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

主机执行hadoop classpath,hadoop3.x版本需要配置hadoop classpath,然后重启yarn
vim yarn-site.xml 添加一个配置 hadoop classpath

<property><name>yarn.application.classpath</name>    <value>/opt/module/hadoop-3.3.0/etc/hadoop:/opt/module/hadoop-3.3.0/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.0/share/hadoop/common/*:/opt/module/hadoop-3.3.0/share/hadoop/hdfs:/opt/module/hadoop-3.3.0/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.0/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.0/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.0/share/hadoop/yarn:/opt/module/hadoop-3.3.0/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.0/share/hadoop/yarn/*</value>
</property>

执行rsync 命令报错 ===> 需要同步的服务器都要安装这个命令(同步和被同步的机器)

bash: rsync: 未找到命令
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(226) [sender=3.1.2]


集群配置文件修改

集群配置 corsite.xml<!-- 指定HDFS中NameNode的地址 -->
<property><name>fs.defaultFS</name><value>hdfs://hadoop02:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.3.0/data/tmp</value></property>

修改hadoop-env.sh  &&  yarn-env.sh  &&  mapred-env.shexport JAVA_HOME=/opt/module/jdk1.8.0_221

vim hdfs.site.xml

<property><name>dfs.replication</name><value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property><name>dfs.namenode.secondary.http-address</name><value>hadoop04:50090</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>hadoop03</value>
</property>

mapred-site.xml<!-- 指定MR运行在Yarn上 -->
<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>

etc/hadoop/workers # 替换2.x版本的slaves

192.168.0.112
192.168.0.113
192.168.0.114

安装时间同步器

yum install ntpd

有点乱 嘻嘻

  相关解决方案