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
笔者自学大数据笔记
- 设置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
NAME=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
# 保存退出
- 修改主机名
vim /etc/sysconfig/network
HOSTNAME=hadoop01
- 关闭防火墙
# 关闭防火墙 (开启: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
- 创建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
- 配置hadoop具有root权限
- 先用root账户修改 /etc/sudoers 文件权限为可编辑,默认只读 (-r–r-----)
- 修改文件 添加用户权限
- 改回 /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
- /opt目录创建module software文件夹
mkdir /opt/software /opt/module
- 修改module software文件夹所有者为dev用户:dev分组
# -R 递归文件夹,修改文件,文件夹拥有者
chown -R dev:dev /opt/software /opt/module
- 安装JDK(上传压缩包,解压,配置环境变量,配置文件生效source一下),此处略过~~
- 安装hadoop(上传压缩包,解压,配置环境变量 bin目录 && sbin目录 ,配置文件生效source一下),此处略过~~
Hadoop运行模式之单机模式(官网Grep+WordCount案例)
官方Grep案例
- 在hadoop-3.3.0文件夹下面创建一个input文件夹
mkdir input
- 将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
- 执行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.]+'
- 查看输出结果
cat output/part-r-00000
# 显示结果
1 dfsadmin
官方WordCount案例
- 在hadoop-3.3.0文件夹下面创建一个wcinput文件夹
mkdir wcinput
- 在 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
- 回到hadoop-3.3.0文件夹下执行wordcount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount wcinput/wc.txt output
- 查看结果
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)查看集群
- 查看集群是否启动成功
jps
4755 DataNode
4835 Jps
4630 NameNode
- WEB端查看HDFS
# hadoop3.x 版本
http://hadoop01:9870
# hadoop2.x版本
http://hadoop01:50070
- 查看产生的log日志
问题
- 思考:为什么不能一直格式化 NameNode,格式化NameNode,要注意什么?
注意:格式化NameNode,会产生新的集群 id,导致 NameNode 和DataNode 的集群 id 不一致,集群找不到已往数据。所以,格式 NameNode 时,一定要先删除data 数据和 log 日志,然后再格式化 NameNode
# 查看namenode集群ID
cat data/tmp/dfs/name/current/VERSION
namespaceID=851295736
clusterID=CID-2c00d4b3-1b98-4914-9d80-853c104b65f1
# 查看datanode 集群ID(会发现和namenode中箪集群ID完全一样)
cat data/tmp/dfs/data/current/VERSION
clusterID=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.sh
export 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
有点乱 嘻嘻